是否在Servlet工作完成之前或之后执行了doFilter()?

时间:2009-08-24 15:17:18

标签: java servlets servlet-filters

javax.servlet.Filter对象既可用于身份验证(Filter需要在任何servlet工作需要完成之前捕获请求),也可用于XSLT转换(servlet需要完全生成内容) 。什么时候实际执行?

我知道这是依赖于实现的(在Web容器上),但这似乎是需要所有人解决的问题。

也许在每个过滤器注册时都有一个配置选项设置在Web容器中?

其他

此外,什么控制过滤器执行的顺序?为什么FooFilter会在BarFilter之前执行?

3 个答案:

答案 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配置执行的