web应用发布完成之后,在request访问web资源之前,容器必须定位需要应用到该资源上的filter列表。容器需要确保实例化列表中的每个filter并调用它的init方法。如不能正确执行,filter可以抛出异常。
配置描述文件中每个filter的声明在每个虚拟机中仅仅只有一个实例。容器提供filter配置秘书中声明的config对象, 它包含了该web应用的ServletContext引用,和filter初始参数。
当容器接收到request,将取得列表中的第一个filter实例,并调用它的doFilter方法。将传入ServletRequest,ServletResponse和filterchain的引用。
doFilter方法遵循以下模式:
1.该方法检测request的头信息
2.可能会用一个定制的ServletRequest或HttpServletRequest包装request对象。
3.可能会用一个定制的ServletResponse或HttpServletResponse包装response对象。
4.filter可以调用filter链中的下一个入口,可能是一个filter,也可能是目的web资源。
5.调用链中的下一个filter之后,filter可以检测响应头信息。
6.处理过程中,filter可能抛出异常。如果在doFilter中抛出UnavailableException,容器不要继续filter链的处理,如飞永久性异 常,它可以选择在稍晚的时候重新执行整个filter链。