一、过滤器应用场景
- 对请求和响应进行统一处理
- 对请求进行日志记录和审核
- 对数据进行屏蔽和替换
- 对数据进行加密和解密
比如:在jsp页面中通过页面编码解决中文乱码问题太繁琐了,就可以使用过滤技术实现对请求数据的过滤,在请求与响应数据之间,添加过滤。
比如:在游戏中,出现脏话,就可以使用过滤器,屏蔽脏话或者防止js代码的攻击等等
二、过滤器的工作原理
三、过滤器的生命周期
- 实例化
- 初始化
- 执行过滤
- 销毁
四、Filter接口
void init(FilterConfig filterConfig) | Web容器调用该方法实现过滤器的初始化 |
void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) | 客户端请求资源时,Web容器会调用与资源对应的过滤器的doFilter()方法。在该方法中,可以对请求和响应进行处理,实现过滤器的功能 |
void destory() | Web容器调用该方法,造成过滤器失效 |
FilterFilter接口没有实现类,编写过滤器必须要实现该接口 实现类,编写过滤器必须要实现该接口 没有实现类,编写
五、过滤器链
通常客户端对服务器请求之后,服务器调用Servlet之前会执行一组过滤器(多个过滤器),那么这组过滤器就称为一条过滤器链。
每个过滤器实现某个特定的功能,一个过滤器检测多个Servlet。(匹配几个,检测几个)。
一组过滤器中的执行顺序与<filter-mapping>的配置顺序一致。
当第一个Filter的doFilter方法被调用时,web服务器会创建一个代表Filter链的FilterChain对象传递给该方法。在doFilter方法中,开发人员如果调用了FilterChain对象的doFilter方法,则web服务器会检查FilterChain对象中是否还有filter,如果有,则调用第2个filter,如果没有,则调用目标资源
如果为注解的话,是按照类名的字符串顺序进行起作用的
六、过滤器的初始化参数(两种方式)
1、注解
@WebFilter(value="/*",initParams= {@WebInitParam(name = "version", value = "1.0")})
2、在xml文件中配置
<filter>
<filter-name>myfilter</filter-name>
<filter-class>com.web.filter.SecondFilter</filter-class>
<init-param>
<param-name>suffix</param-name>
<param-value>html</param-value>
</init-param>
</filter>初始化参数可以配置多个的
七、如何获得初始化参数
public void init(FilterConfig fConfig) throws ServletException {
suffix = fConfig.getInitParameter("suffix");
}
八、过滤器的优点
可以实现 Web 应用程序中的预处理和后期处理逻辑
lter接口没有实现类,编写过滤器必须要实现该接口 没有实现Filter接口没有实现类,编写过滤器必须要实现该接口 类,编写过滤器必须要实现