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

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

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

也许为Web容器的每个Filter注册设置一个配置选项?

额外:

什么控制filter执行的顺序? 为什么FooFilter会在BarFilter之前执行?

filter链实质上包装了servlet调用。 链将处理所有链接,直到它到达“底部”,然后允许servlet运行,然后反向返回链。 例如,如果您有一个新的“示例filter”,则您的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 } 

alt text http://img228.imageshack.us/img228/8945/filter.png

关于顺序:我记得从spec servlet容器不保证将按某种顺序调用filter。

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

filter是在与服务器关联的servlet或JSP页面之前在服务器上运行的程序。

根据servlet2.3规范,filter是根据web.xml配置filter映射序列Ref- http://www.programering.com/a/MTMyADOwATI.html执行的。