28

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

4

3 回答 3

37

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
}

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

于 2010-11-08T10:15:51.797 回答
29

什么是过滤器?

Filters习惯于intercept and process requests在将它们发送到 servlet 之前(如果有请求)。

或者

Filtersintercept and process a response在它们被 servlet 发送回客户端之前,它们已经习惯了。

在此处输入图像描述

为什么使用它们?

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

- 压缩响应流。

- 创建不同的响应。

doFilter() 有什么作用?

doFilter()调用every time的容器决定了过滤器应该应用于一个页面。

它需要three arguments

-> Servlet请求

->服务器响应

->过滤链

所有的functionality that your filter supposed to do都在方法内部实现doFilter()

什么是过滤链?

你的filters do not know anything about the other filters and servlet. FilterChain知道order of the invocation of filtersanddrivenfilter elements您在DD.

于 2015-11-11T14:02:15.440 回答
12

过滤器是用来补充 Servlet 的。对于用法,你应该阅读这个,过滤器的要点。过滤器是使用责任链GoF 模式实现的。

于 2010-11-08T10:17:14.310 回答