Filter概述
Filter意为滤镜或者过滤器,用于在Servlet之外对request或者response进行修改。Filter提出滤镜链的概念,一个FilterChain包括多外Filter。客户端请求request在抵达Servlet之前会经过FilterChain里的所有Filter,服务器响应response在从Servlet抵达客户端浏览器之前会经过FilterChain里的所有Filter。Filter处理过程如下:
Filter像是客户端浏览器与服务器端之间的一层滤网。
Filter接口
一个Filter必须实现javax.servlet.Filter接口。
public class MyFilter implements Filter {
public void init(FilterConfig config) throws ServletException{}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOExcepton, ServletException{
System.out.println(“request被处理之前…”);
chain.doFilter(request, response);
System.out.println(“request被处理之后,response抵达客户端浏览器之前……”)
}
public void destroy() {}
}
注:chain.doFilter(request, response)将request递交给FilterChain中的下一个Filter,如果所有Filter都走完了则交给Servlet。
Filter配置
<dispatcher>配置到达servlet的方式,有4种取值:REQUEST、FORWORD、INCLUDE、ERROR。如果没配置默认为REQUEST。
Filter经典案例
Filter可以处理如:权限验证、日志记录、数据压缩、数据加密、格式转换、图像处理等工作。
- 防盗链Filter(其它网端访问本站图片,将会显示错误图片)
- 字符编码Filte(这个只处理POST提交请求的编码)
对于GET请求还需要修改Tomcat的/conf/server.xml
添加URIEncoding=”UTF-8”
- 日志记录Filter(日志可拆卸)
- 异常捕捉异常Filter
如果在chain.doFilter(request, response)上加上try…catch语句,就能捕捉Servlet中抛出的可预料的与不可预料的异常,然后根据不同异常进行不同异常处理。
- 权限验证Filter
Java Web程序一般使用session或者cookie来记录用户是否登录,以及该用户的权限。
- 内容替换Filter
- GZIP压缩Filter
- 图像水印Filter
- 缓存Filter
- XSLT转换Filter
Filter是一种很有弹性的机制,功能很强大,而且与servlet、JSP等没有任何耦合,可自由拆卸。Filter是现在流行的AOP(Aspect Orainted Programming,面向切面编程)思想的一种体现。
转载请注明:学时网 » Java Web过滤器Filter(五)