javax.servlet.Filter对象既可用于身份验证(Filter需要在任何servlet工作需要完成之前捕获请求),也可用于XSLT转换(servlet需要完全生成内容) 。什么时候实际执行?
我知道这是依赖于实现的(在Web容器上),但这似乎是需要所有人解决的问题。
也许在每个过滤器注册时都有一个配置选项设置在Web容器中?
其他
此外,什么控制过滤器执行的顺序?为什么FooFilter会在BarFilter之前执行?
答案 0 :(得分:51)
过滤器链实质上包装了servlet调用。链将处理所有链接,直到它到达“底部”,然后允许servlet运行,然后反向返回链。例如,如果你有一个新的“示例过滤器”,你的doFilter()方法可能如下所示:
public void doFilter(ServletRequest request,
ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// do pre-servlet work here
chain.doFilter(request, response);
// do post servlet work here
}
答案 1 :(得分:7)
alt text http://img228.imageshack.us/img228/8945/filter.png
关于顺序:我记得从spec servlet容器中不能保证按某种顺序调用过滤器。
答案 2 :(得分:-1)
根据servlet2.3规范,过滤器是根据过滤器映射序列Ref - http://www.programering.com/a/MTMyADOwATI.html
的web.xml配置执行的