监听器listener:
监听器listener:随着web项目的开始而开始,web项目的结束而结束
最先开始加载web.xml文件,随着webxml同时加载,里面的参数同时加载到服务器里。
主要作用是:将重复的代码简化,做一些初始化的内容添加工作、设置一些基本的内容、比如一些参数或者是一些固定的对象等等。
如何获取web.xml的参数:
* 将web.xml里面初始的值获取到
比如说content里面的值
<context-param>
<param-name>username</param-name>
<param-value>root</param-value>
</context-param>
l ServletContextListener 监听ServletContext对象
1. public class DemoListener implementsServletContextListener{//需要实现接口ServletContextListener定义类实现ServletContextListener
实现里面的两个抽象方法:
销毁方法
@Override
publicvoidcontextDestroyed(ServletContextEvent arg0) {
// 应用监听器的销毁方法
}
把什么参数放进来就执行这个方法contextInitialized:
@Override
publicvoid contextInitialized(ServletContextEventserEvent) {
//这个方法能过获取到web.xml的初始值
//用初始化的这个对象赋值
serEvent.getServletContext();
Stringisername=serEvent.getServletContext().getInitParameter("username");
//把获取到的东西扔到项目中
//怎么调用去用它
serEvent.getServletContext().setAttribute("username", isername);
}
ServletContextEvent初始化了一个对象,通过这个对象,获取到我们的getServletContext,
第二种
2. publicclass ListenerRequest implements ServletRequestListener {//实现ServletRequestListener
//这个解决了无法获取项目名的问题
@Override
publicvoid requestDestroyed(ServletRequestEventarg0) {//在请求调用的时候才会调用的
}
@Override
publicvoid requestInitialized(ServletRequestEventserEvent) {
// ServletRequestEvent通过这个对象处理,可以获取到ServletRequest对象
serEvent.getServletRequest();
String otx=serEvent.getServletContext().getContextPath();
System.out.println(otx);
serEvent.getServletRequest().setAttribute("otx", otx);
}
ServletRequestEvent可以获取到servlet的requst对象,
用getservletrequest方法。
然后去配置web.xml文件
<listener>
<listener-class>com.ly.listener.ListenerRequest</listener-class>
</listener>
² 过滤器:
主要目的:过滤字符编码;其次,做一些应用逻辑判断等.
Filter跟web应用一起启动
当web应用重新启动或销毁时,Filter也被销毁
Filter对浏览器传递过来的参数过滤,
浏览器传给filter,处理完以后,将请求返回给content层
1. implements实现Filter接口,引用importjavax.servlet.Filter;
2. dofilter方法最重要的两个参数就是,ServletRequest,ServletResponse
publicclass FilterDemo implements Filter{
实现里面的三个方法:
@Override
publicvoid destroy() {
// System.out.println("准备销毁...");
}
@Override
publicvoid doFilter(ServletRequest serRequest,ServletResponse arg1,FilterChain chain) throws IOException, ServletException {
serRequest.setCharacterEncoding("uft-8");解决乱码
// 强制类型转换
HttpServletRequest request =(HttpServletRequest) serRequest;
HttpServletResponse response =(HttpServletResponse) arg1;
HttpSessionsession = request.getSession();
//通过点出session,获取到它的username
System.out.println(session.getAttribute("username"));
System.out.println("filter执行成功");
chain.doFilter(serRequest,arg1);//将请求传回去
}
@Override
publicvoid init(FilterConfig arg0) throws ServletException {
System.out.println("初始化...");
}
}
<filter>
配置路径
<filter-name>FilterEconding</filter-name>
<filter-class>com.ly.filter.FilterEconding</filter-class>
</filter>
再配置路由:
<filter-mapping>
<filter-name>FilterEconding</filter-name>
<!-- * 代表截获所有的请求想要它作用到哪里就到哪 /servlet/*-->
<url-pattern>/servlet/*</url-pattern>
</filter-mapping>
监听器listener:随着web项目的开始而开始,web项目的结束而结束
最先开始加载web.xml文件,随着webxml同时加载,里面的参数同时加载到服务器里。
主要作用是:将重复的代码简化,做一些初始化的内容添加工作、设置一些基本的内容、比如一些参数或者是一些固定的对象等等。
如何获取web.xml的参数:
* 将web.xml里面初始的值获取到
比如说content里面的值
<context-param>
<param-name>username</param-name>
<param-value>root</param-value>
</context-param>
l ServletContextListener 监听ServletContext对象
1. public class DemoListener implementsServletContextListener{//需要实现接口ServletContextListener定义类实现ServletContextListener
实现里面的两个抽象方法:
销毁方法
@Override
publicvoidcontextDestroyed(ServletContextEvent arg0) {
// 应用监听器的销毁方法
}
把什么参数放进来就执行这个方法contextInitialized:
@Override
publicvoid contextInitialized(ServletContextEventserEvent) {
//这个方法能过获取到web.xml的初始值
//用初始化的这个对象赋值
serEvent.getServletContext();
Stringisername=serEvent.getServletContext().getInitParameter("username");
//把获取到的东西扔到项目中
//怎么调用去用它
serEvent.getServletContext().setAttribute("username", isername);
}
ServletContextEvent初始化了一个对象,通过这个对象,获取到我们的getServletContext,
第二种
2. publicclass ListenerRequest implements ServletRequestListener {//实现ServletRequestListener
//这个解决了无法获取项目名的问题
@Override
publicvoid requestDestroyed(ServletRequestEventarg0) {//在请求调用的时候才会调用的
}
@Override
publicvoid requestInitialized(ServletRequestEventserEvent) {
// ServletRequestEvent通过这个对象处理,可以获取到ServletRequest对象
serEvent.getServletRequest();
String otx=serEvent.getServletContext().getContextPath();
System.out.println(otx);
serEvent.getServletRequest().setAttribute("otx", otx);
}
ServletRequestEvent可以获取到servlet的requst对象,
用getservletrequest方法。
然后去配置web.xml文件
<listener>
<listener-class>com.ly.listener.ListenerRequest</listener-class>
</listener>
² 过滤器:
主要目的:过滤字符编码;其次,做一些应用逻辑判断等.
Filter跟web应用一起启动
当web应用重新启动或销毁时,Filter也被销毁
Filter对浏览器传递过来的参数过滤,
浏览器传给filter,处理完以后,将请求返回给content层
1. implements实现Filter接口,引用importjavax.servlet.Filter;
2. dofilter方法最重要的两个参数就是,ServletRequest,ServletResponse
publicclass FilterDemo implements Filter{
实现里面的三个方法:
@Override
publicvoid destroy() {
// System.out.println("准备销毁...");
}
@Override
publicvoid doFilter(ServletRequest serRequest,ServletResponse arg1,FilterChain chain) throws IOException, ServletException {
serRequest.setCharacterEncoding("uft-8");解决乱码
// 强制类型转换
HttpServletRequest request =(HttpServletRequest) serRequest;
HttpServletResponse response =(HttpServletResponse) arg1;
HttpSessionsession = request.getSession();
//通过点出session,获取到它的username
System.out.println(session.getAttribute("username"));
System.out.println("filter执行成功");
chain.doFilter(serRequest,arg1);//将请求传回去
}
@Override
publicvoid init(FilterConfig arg0) throws ServletException {
System.out.println("初始化...");
}
}
<filter>
配置路径
<filter-name>FilterEconding</filter-name>
<filter-class>com.ly.filter.FilterEconding</filter-class>
</filter>
再配置路由:
<filter-mapping>
<filter-name>FilterEconding</filter-name>
<!-- * 代表截获所有的请求想要它作用到哪里就到哪 /servlet/*-->
<url-pattern>/servlet/*</url-pattern>
</filter-mapping>