参考文章 : http://blog.csdn.net/gunandrose/archive/2003/08/20/19841.aspx
1, 过虑器在web.xml中的注册:
.......
<filter>
<filter-name>mySecondFilter</filter-name>
<filter-class>Filter.mySecondFilter</filter-class>
</filter>
<filter>
<filter-name>myFirstFilter</filter-name>
<filter-class>Filter.myFirstFilter</filter-class>
<init-param>
<param-name>grant</param-name>
<param-value>zqb</param-value>
</init-param>
<init-param>
<param-name>encoding</param-name>
<param-value>gbk</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>myFirstFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>mySecondFilter</filter-name>
<url-pattern>/moudleA/*</url-pattern>
</filter-mapping>
......
2,过滤器类的制作:
这个很简单,主要是实现Filter的接口就行了. 需要注意的是,在做完你想要做的事情后, 记得 chain.doFilter(arg0,arg1) , 将过滤器向下一个过滤器传递(像接力赛一样) ,当然如果有必要也可以不传递给下一个,比如. 登陆用户角色不符合时.
3,过滤器的执行顺序:
如果有多个过滤器,它们的执行顺序应该是按照web.xml中<filter-mapping>的定义顺序来的; 当然,前提是<url-pattern>都匹配的时候.
4,接口Filter中的三个主要方法的执行时机:
init() : 这是一个容器所调用的初始化方法。它保证了在第一次doFilter()调用前由容器调用。您能获取在 web.xml 文件中指定的初始化参数。
doFilter(): 这是一个完成过滤行为的方法。这同样是上游过滤器调用的方法。引入的 FilterChain
对象提供了后续过滤器所要调用的信息。
destory(): 容器在破坏过滤器实例前,doFilter():
中的所有活动都被该实例终止后,调用该方法。