过滤器在三个方面很象Servlet
- 容器知道过滤器API
- 容器管理过滤器的生命周期
- 都在DD中声明
过滤器的生命周期
每个过滤器都必须实现java.servlet.Filter接口,该接口有三个方法:
首先要有一个init() : 最常见的是保存 FilterConfig 对象的一个引用
主要工作在doFilter()中完成 , doFilter的原型为:
public void doFilter(ServletRequest req,ServletResponse resp,FilterChain chain)
最后是destroy()
可以把过滤器想象成“可入栈”
1.得到请求时,容器会调用Filter1的doFilter方法,它会在此运行,知道遇到其中的chain.doFilter方法。
2.容器把Filter2的doFilter方法压入栈顶,并执行该方法
3.容器把servletA的service方法压入栈顶并执行,直到结束,然后从栈中弹出。
4.容器把控制权交给Filter2,执行它的doFilter方法,直到结束,然后从栈中弹出。
5.容器把控制权交给Filter1,执行它的doFilter方法,直到结束,然后从栈中弹出。