过滤器和监听器
一、什么是过滤器(Filter)
Filter 过滤器它是 JavaWeb 的三大组件之一。三大组件分别是:Servlet 程序、Listener 监听器、Filter 过滤器。Filter 过滤器是 JavaEE 的规范,也就是接口。Filter过滤器主要是用于拦截请求,过滤响应的。结合过滤器可以进行权限检查、编码控制、事务管理等操作。
Web的三大组件:
二、过滤器(Filter)的接口
Filter是由Tomcat启动时创建,是javax.servlet包下面的一个接口,这个接口中定义了3个方法。
package javax.servlet;
import java.io.IOException;
public interface Filter {
//初始化
void init(FilterConfig var1) throws ServletException;
//过滤
void doFilter(ServletRequest var1, ServletResponse var2, FilterChain var3) throws IOException, ServletException;
//销毁
void destroy();
}
注意:
1.tomcat服务器一启动就会调用过滤器中的无参构造方法创建过滤器类的对象,然后立刻调用初始化init方法。
2.每次访问拦截的资源都会执行一次执行过滤的方法doFilter
3.正常关闭tomcat服务器,执行销毁过滤器的方法destory。
三、过滤器(Filter)的请求和响应对象
1、在浏览器发起请求时,tomcat会创建:过滤器对象、Request对象、Response对象
2、发起请求的URL路径和过滤器要拦截的URL路径一致时,会进入到Filter中的doFilter方法
3、此时,tomcat把Request对象、Response对象作为参数,传递到doFilter方法中
4、在doFilter方法中执行:filterChain.doFilter方法时,会再次把request对象、response对象作为参数,传递给Servlet的service方法中。
四、监听器(Listener)是什么
监听器是用于监听某个对象的状态变化的组件。比如监听ServletContext,HttpSession,ServletRequest等域对象的创建和销毁事件,还有这些域对象中的属性发生修改的事件。其中涉及到的几个名词如下:
- 事件源:被监听的对象。
- 监听器(listener):监听事件源对象状态的变化都会触发监听器。
- 注册监听器:将监听器与事件源对象进行绑定。
- 响应行为:事件源对象状态变化时的动作。
五、监听器(Listener)接口分类
接口中的方法:
针对对象的创建和销毁:
public class HelloServletContextListener implements ServletContextListener {
//ServletContext域在web应用启动时被创建,所以当前web应用被启动时由Servlet容器调用该方法
@Override
public void contextInitialized(ServletContextEvent sce) {
//下面是获取被监听对象的两个方法
ServletContext sc = sce.getServletContext();
Object obj = sce.getSource();
}
//ServletContext域在web应用卸载时被销毁,所以当前web应用被卸载时由Servlet容器调用该方法
@Override
public void contextDestroyed(ServletContextEvent sce) {}
}
还需要去web.xml中配置,如下:
<listener>
<listener-class>com.sgg.Listener.test.HelloServletContextListener</listener-class>
</listener>
六、监听器(Listener)开发步骤
1、创建类,并实现监听器接口,重写接口中所有的抽象方法。
2、配置监听器:
- XML方式: web.xml中添加标签。
- 注解方式: @WebListener
参考链接