servlet中过滤器和链的用途是什么?

时间:2010-11-08 10:09:35

标签: java servlets servlet-filters chain

chain.doFilter(req,res);
我们在servlet程序中使用了它。我想知道servlet中方法doFilter()的用法是什么? 还有什么在Java servlet中使用过滤器和链概念?

3 个答案:

答案 0 :(得分:35)

Servlet过滤器是chain of responsibility pattern

的实现

重点是每个过滤器都保持在它所映射到的每个servlet的“前面”和“后面”。因此,如果您在servlet周围有一个过滤器,那么您将拥有:

void doFilter(..) { 
    // do stuff before servlet gets called

    // invoke the servlet, or any other filters mapped to the target servlet
    chain.doFilter(..);

    // do stuff after the servlet finishes
}

您还可以选择 not 来调用chain.doFilter(..),在这种情况下,永远不会调用servlet。这对于安全目的很有用 - 例如,您可以检查是否有用户登录。

答案 1 :(得分:20)

什么是过滤器?

Filters在发送给servlet之前用于intercept and process requests(如果是请求)。

<强> OR

Filters在被servlet发送回客户端之前用于intercept and process a response

enter image description here

为何使用它们?

- 过滤器可以执行安全检查。

- 压缩响应流。

- 创建不同的回复。

doFilter()做什么?

  

doFilter()被称为every time,容器决定了这一点   过滤器应该应用于页面。

需要three arguments

- &GT; 的ServletRequest

- &GT; ServlerResponse

- &GT; FilterChain

所有functionality that your filter supposed to do都在doFilter()方法中实现。

什么是FilterChain?

  

您的filters do not know anything about the other filters and servlet。    FilterChain 通过您在order of the invocation of filters中定义的driven了解filter elementsDD

答案 2 :(得分:12)

过滤器可以补充Servlets。对于用法,您应该阅读The Essentials of Filters。过滤器使用Chain of Responsibility GoF模式实现。