servlet中filter和chain有啥用?

Posted

技术标签:

【中文标题】servlet中filter和chain有啥用?【英文标题】:What is the use of filter and chain in servlet?servlet中filter和chain有什么用? 【发布时间】:2011-05-06 14:10:45 【问题描述】:

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

【问题讨论】:

【参考方案1】:

什么是过滤器?

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

Filters 用于intercept and process a response,然后由 servlet 发送回客户端。

为什么要使用它们?

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

-压缩响应流。

-创建不同的响应。

doFilter() 有什么作用?

doFilter() 被称为 every time 容器确定 过滤器应应用于页面。

需要three arguments

->ServletRequest

->ServlerResponse

->过滤链

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

什么是过滤器链?

您的filters do not know anything about the other filters and servletFilterChain 通过您在DD 中定义的filter elements 知道order of the invocation of filtersdriven

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

在写我的答案时,我收到一条消息,有人已经提供了一个。但我仍然继续努力,认为提供者一定没有提到模式和指向它的链接。但是在提交我的之后,我发现我完全错了。 +1 @Adeel Ansari 无论如何,您提供了一个我没有提供的链接 - 指向“过滤器的基本要素”的链接,所以也在那里 +1。

以上是关于servlet中filter和chain有啥用?的主要内容,如果未能解决你的问题,请参考以下文章

filter和filtermapping有啥用

JSP中站点中的WEB-INF下的web.xml文件有啥用呢?一般写啥内容的?

java 过滤器Filter中chain.doFilter()之前和之后代码的执行顺序

优化MyEclipse速度中这个validation到底有啥用??

有啥用!登录一些红宝石方法[重复]

在JAVA中filter有啥作用?