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

Vin*_*mar 23 java servlets chain servlet-filters

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

Boz*_*zho 35

Servlet过滤器是责任链模式的实现

关键是每个过滤器都保持在它所映射到的每个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
}
Run Code Online (Sandbox Code Playgroud)

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

  • 在写我的答案时,我收到一条消息,有人已经提供了一个.但我仍然继续努力,认为提供者必须错过提及模式及其链接.但在提交我之后,我发现我完全错了.+1 (3认同)

Pra*_*shi 21

什么是过滤器?

Filters用于intercept and process requests在将它们发送到servlet之前(在请求的情况下).

要么

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

在此输入图像描述

为什么使用它们?

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

- 压缩响应流.

- 创建不同的响应.

doFilter()做什么?

doFilter()被称为every time容器确定该过滤器应被应用到页面.

它需要 three arguments

- > ServletRequest

- > ServlerResponse

- > 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并且drivenfilter elements你定义DD.


Ade*_*ari 12

过滤器可以补充Servlets.对于用法,您应该阅读"过滤器的基本要素".过滤器使用Chain of Responsibility GoF模式实现.