过滤器就是 Servlet 的高级特性之一,就是一个具有拦截/过滤功能的一个东西,在生活中过滤器可以是香烟滤嘴,滤纸,净水器,空气净化器等,在 Web 中仅仅是一个实现了 Filter 接口的 Java 类而已。
对应于 Servlet 的开发步骤:
<!-- web.xml -->
<filter>
<filter-name>filter的名称</filter-name>
<filter-class>filter类的全限定名</filter-class>
</filter>
<filter-mapping>
<filter-name>指定对哪一个filter做的映射</filter-name>
<url-pattern>指定对哪些资源进行过滤</url-pattern>
</filter-mapping>
<url-pattern>
表示对哪些资源做过滤/拦截。例如:/hello.jsp
当前 Filter 就仅仅只对 hello.jsp 资源做拦截./index
当前 Filter 就仅仅只对 /index 资源做拦截./*
当前 Filter 就对所有资源做拦截.访问任意的资源,都会先进入该过滤器器./system/*
当前 Filter 就对以 /system/
打头的资源做拦截.
如/system
, /system/a
, /system/a/b/c
, /systema
web.xml
中定义的先后次序 (如果使用注解配置,则 Filter 的执行顺序由 Filter 的类名的字母的顺序来决定,如 AFilter 和 BFilter,则先执行 AFilter) <url-pattern>
也可以对指定的 Servlet 做过滤(注解通过 servletNames
指定,配置由 <servlet-name>
指定)<dispatcher>
配置项指定了 Filter 的过滤时间:REQUEST
:只对请求做过滤,默认选项,如果有该配置项则必须显式写明FORWARD
:只对请求转发(forword)方式做过滤ERROR
:只对跳转到全局的错误页面做过滤INCLUDE
:只对请求包含(include)方式做过滤dispatcherTypes
除了对web应用的监听外,还能监听session和request的生命周期,以及他们的attribute发生的变化。
了解详情戳这里