1.过滤器的概念
Java中的Filter 并不是一个标准的Servlet ,它不能处理用户请求,也不能对客户端生成响应。 主要用于对HttpServletRequest 进行预处理,也可以对HttpServletResponse 进行后处理,是个典型的处理链。与servlet非常相似,请求发送到servlet之前,可用过滤器截获和处理请求,另外在servlet结束工作之后,但在相应发回给客户之前,可以用过滤器处理
2.过滤器可以做的事情
1.请求过滤器:
完成安全检查
重新格式化请求首部或体
建立请求审计或日志
2.响应过滤器:
压缩响应流
追加或修改响应流
创建一个完全不同的响应
3.过滤器的生命周期
init():初始化
在init()方法中,要把调用过滤器之前的所有初始化任务,比较常见的是保存FilterConfig对象的一个引用
doFilter():真正的过滤工作在此执行
一个ServletRequest方法 注:
不是HttpServletRequest
一个ServletResponse方法
不是HttpServletResponse
一个FilterChain方法
destroy():撤销
一般用于把状态清空,可不写
FilterChain的doFilter()方法要负责明确接下来调用谁的doFilter()方法,如果已经到了链尾则确定调用哪个servlet的service()方法
4.声明和确定过滤器顺序
servlet过滤器的执行顺序就是servlet过滤器在web.xml里面映射文件的顺序
过滤器可以应用于请求分派器
<url-pattern>映射总是在<servlet-name>映射前面
<dispatcher>元素
REQUEST值表示对客户请求启用过滤器,默认值是REQUEST
INCLURE值表示对由一个include()调用分配来的请求启用过滤器
FORWARD值表示对一个forward()调用分派来的请求启用过滤器
ERROR值表示对错误处理器调用的资源启用过滤器
5.过滤器的实例
(1)请求跟踪过滤器
xml的注释在上面
(2)解决中文字符编码的过滤器
xml文件格式: