阅读目录
过滤器是Java Web三大组件之一,它与Servlet很相似。对于Web应用程序来说,过滤器是一个驻留在服务器端的Web组件,它可以截取客户端和资源之间的请求和响应信息并对这些信息进行过滤。本文将对过滤器的和实现机制和应用进行简单的总结。
当Web容器接收到一个对资源的请求时,它将判断是否有过滤器与这个资源相关联,如果有那么容器将请求交给过滤器进行处理。下图所示为过滤器的工作过程。

在web应用程序中可以部署多个过滤器形成一个过滤器链,在请求资源时,过滤器链中的过滤器将依次对请求进行处理(执行顺序是在web.xml文件中的部署顺序),并将请求传递给下一个过滤器,直到目标资源。在发送响应时,则是按照相反的顺序对响应进行处理的,直到客户端。
过滤器的应用场景主要有几下几点:
写一个过滤器就是写一个类,并且这个类要实现Filter接口。Filter接口定义了三个方法,init()、doFilter()和destory()。它们的执行构成了过滤器的生命周期。
下面代码既是一个实现了Filter接口的过滤器:
过滤器写好之后要通过在web.xml文件对其进行配置,配置的方法类似于Servlet的。
然后在WebContent目录下,新建一个jsp文件:
当请求访问1.jsp文件时,显示结果如下:

结果分析:因为上述过滤器是与1.jsp文件相关联,所以web容器将请求先交给过滤器进行处理,输出“过滤器拦截你”后,过滤器对请求进行“放行”,所以又输出“这是测试页面”。
过滤器的部署是在和元素来完成的。?
过滤器有四种拦截方式,分别是:REQUEST、FORWARD、INCLUDE、ERROR。
拦截方式是在中设置的,默认情况是REQUEST方式。
可以通过或者中设置目标资源,在中指定过滤器关联的URL样式;在指定过滤器指定的Servlet,用户在访问元素指定的URL上的资源或元素指定的Servlet时,该过滤器才会被容器调用。
通过过滤器可以解决页面的乱码问题,代码如下: