目录
1. Filter
对Request请求的对象进行拦截(在用户的请求访问资源前),拦截后可以做一些处理(加解密、日志记录...)
Filter的配置可以通过注解或者部署描述完成,但当资源需要被多个Filter使用,且它的触发顺序很重要的时候,只能通过部署描述配置。
-
1.1 Filter的核心类
-
Filter的实现类必须实现javax.servlet.Filter接口
-
1.1.1 三个重要的方法
- init(FilterConfig filterConfig)
- Servlet容器初始化Filter时,会触发init(),该方法只调用一次,用于初始化Filter。
- doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
- Servlet容器每次梳理Filter相关资源的时候,都会调用该Filter实例的doFilter方法
- 既可以拦截请求,也可以拦截响应
- 一个资源可以被多个Filter关联,也称为Filter链。
- 只要调用filterChain.doFilter()就会触发链路中的下一个Filter,直到最后一个Filter,才会执行servlet方法。
- 如果没有在该方法的结尾处调用filterChain.doFilter(),Request请求终止,结束。
- destory()
- Servlet容器销毁Filter时触发。
- init(FilterConfig filterConfig)
-
-
1.2 Filter的配置
- 步骤
- 确认需要拦截处理的资源
- 配置Filter的初始化参数,这些参数可以在init()中读取
- 配置Filter的名称
- 步骤
-
1.3 Filter顺序
如果多个Filter应用于同一个资源,那么Filter的触发顺序就取决于部署描述中的顺序。
2. Listeners
Servlet API提供了一系列的时间和事件监听接口。监听的所有事件继承自java.util.Event对象。上层的Servlet可以通过事件驱动监听一些事件的状态。
编写监听器的方法:实现监听接口,在部署文件描述文件中指定监听接口的实现类。
-
2.1 监听器接口分类
- ServletContext
- HttpSession
- ServletRequest
-
2.2 应用级监听
- 接口
- ServletContextListener
- 响应ServletContext的创建和销毁
- ServletContextAttributeListener
- 响应ServletContext范围的属性被添加,删除或替换
- ServletContextListener
- 适用场景
- 应用全局共享数据加载(初始化一些数据)
- 监听容器初始化和销毁时机,进行准备工作和清理工作
- 监听ServletContext的属性操作
- 接口
-
2.3 会话级监听
- 接口
- HttpSessionListenern
- 监听HttpSession的创建和销毁
- HttpSessionAttributeListener
- 与ServletContextAttributeListener类似,它会响应HttpSession范围的属性的添加,删除或替换。
- HttpSessionListenern
- 接口
-
2.4 请求级监听
- 接口
- ServletRequestListener
- 对ServletRequest的创建和销毁事件进行响应。容器会通过一个池子来存放并复用多个ServletRequest。ServletRequest的创建时刻是从容器池里被分配出来的时刻,而它的销毁时刻是放回容器池里的时刻。
- ServletRequestAttributeListener
- 响应ServletRequest范围的属性被添加,删除或替换。
- ServletRequestListener
- 接口
3. 注解描述
-
3.1 主要注解
- WebServlet:标识Servlet类
- WebFilter:标识Filter类
- WebListener:标识Listener类
- WebInitParam:标识初始化参数
- MulitpartConfig:标识上传附件的配置