代码之家  ›  专栏  ›  技术社区  ›  Jeremy Powell

在servlet的工作完成之前或之后是否执行了dofilter()?

  •  23
  • Jeremy Powell  · 技术社区  · 15 年前

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

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

    可能在某个地方为每个使用Web容器注册的过滤器设置了一个配置选项?

    附加:

    另外,什么控制过滤器的执行顺序?为什么要在barfilter之前执行foofilter?

    3 回复  |  直到 15 年前
        1
  •  50
  •   Rich Kroll    15 年前

    从本质上讲,过滤器链包装了servlet调用。链将处理所有链接,直到它到达“底部”,然后允许servlet运行,然后反向返回链。例如,如果您有一个新的“example 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
    
    }
    
        2
  •  7
  •   Roman    15 年前

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

    关于订单:正如我记得的,从spec servlet容器不能保证过滤器将以某种顺序被调用。

        3
  •  -1
  •   Anil Kesarwani    9 年前

    根据servlet2.3规范,根据filter-mapping-sequence-ref的web.xml配置执行过滤器- http://www.programering.com/a/MTMyADOwATI.html