1. 什么是Filter
- 是Sun公司提供的一种特殊的JavaEE组件,可以对用户的请求进行拦截,以实现特定的功能
- 常见的功能:访问权限控制,敏感词过滤,压缩响应内容等
2. 如何开发一个Filter
1. 开发一个Filter类,实现Filter接口
2. 实现接口中定义的3个抽象方法
1. doFilter()
2. init()
3. destory()
3. 在web.xml中进行配置
<filter>
<filter-name>
<filter-class>
<filter-mapping>
<filter-name>
<url-pattern>
3. FilterChain
-
过滤器链,代表一次请求中所有需要生效的Fitler和资源组成的链表
-
API
chain.doFitler(request,response);
- 当前过滤器放行本次请求
- 将导致过滤器链上的下一个过滤器被调用
- 如果当前过滤器是链上的最后一个过滤器,将导致链尾的资源被调用
4. 多个Filter生效的顺序
- 多个Filter生效的顺序由 web.xml中配置的出现的顺序决定
- 先配置的对应的Filter会先生效
- 当响应离开资源时,会先经过 后生效的过滤器,逐个向前执行
5. Filter的生命周期
创建、初始化、就绪、销毁
1. 创建
当服务器启动后,会加载并实例化所有配置的Filter
2. 初始化
- 当Filter被实例化之后,立即调用它的init()方法
- 开发者需要执行哪些初始化的逻辑,可以写入init()方法中
- 该方法只执行1次
3. 就绪
- 每当Filter拦截了一个请求,会调用它doFilter()
- 开发者希望执行哪些拦截的逻辑,可以写入doFilter()方法中
- 该方法会被调用多次
4. 销毁
- 当服务器关闭,或者当前项目被移出容器时,Filter实例会被销毁
- 在销毁前,会调用它的destory()方法
- 该方法也仅会被调用1次
6. Filter拦截多个请求
-
直接在url-pattern中指定要拦截的具体url
<url-pattern>/test.jsp</url-pattern>
-
可以使用 /* 作为通配符,拦截多个url
<url-pattern>/*</url-pattern> 拦截所有请求 字符编码过滤器:将解决请求乱码和响应乱码的代码都放进一个过滤器 <url-pattern>/user/*</url-pattern> 拦截所有对/user下资源的请求
7. FilterConfig
- FilterConfig对象代表了一个Filter在web.xml中配置的初始化参数
- 当服务器实例化一个Filter时,会读取该Filter在web.xml中配置的参数,创建一个FilterConfig对象,将数据封装进去
- 在调用一个Filter的init()方法时,会将创建好的FilterConfig对象,以参数的形式传入该方法