过滤器
1. 简介
定义:
一个可以截取用户端的请求与响应信息,并对这些信息过滤的服务器端的组件
2. 工作原理
3. 生命周期
4. 三个方法
init()
这是过滤器的初始化方法,Web 容器创建过滤器实例后将调用该方法,该方法可以读取 web.xml 文件中过滤器的参数
doFilter()
该方法完成实际的过滤操作,当用户请求访问与过滤器关联的 URL 时,Web 容器将先调用过滤器的 doFilter 方法。
FilterChain 参数可以调用 chain.doFilter 方法,将请求传给下一个过滤器(或目标资源),或利用转发、重定向将请求转发到其他资源
destroy()
Web 容器在销毁过滤器实例前调用该方法,在这个方法中可以释放过滤器占用的资源
5. web.xml 配置
<filter>
<filter-name>Filter的名字</filter-name>
<filter-class>Filter的类名称</filter-class>
<!-- 初始化参数 -->
<init-param>
<param-name>参数名称</param-name>
<param-value>参数的值</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Filter的名字</filter-name>
<url-pattern>URL</url-pattern>
<!-- 零对或多对 -->
<!-- 可选值为:REQUEST|INCLUDE|FORWARD|ERROR -->
<!-- 未设定默认为REQUEST -->
<dispatcher></dispatcher>
</filter-mapping>
6. 过滤器链
定义
针对一个用户请求,过滤器有多个,服务器会按照 web.xml 中过滤器定义的先后顺序组装成一条链
- 执行顺序
7. 分类
Servlet2.5
- QUEST
用户直接访问页面时,Web 容器将会调用过滤器
- INCLUDE
目标资源是通过 RequestDispatcher 的 forward 访问时,该过滤器将被调用
- FORWARD
目标资源是通过 RequestDispatcher 的 include 访问时,该过滤器将被调用
- ERROR
目标资源是通过声明式异常处理机制调用时,过滤器将被调用
Servlet3.0新增
ASYNC
支持异步处理
8. 应用场景
- 对用户请求进行统一认证
- 编码转换
- 对用户发送的数据进行过滤替换
- 转换图像格式
- 对响应的内容进行压缩