Servlet中的过滤器和链的作用是什么?

28

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

3个回答

39

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将永远不会被调用。这对于安全目的非常有用 - 例如,您可以检查是否有用户登录。


5
在回答的过程中,我收到了一条消息,说已经有人提供了答案。但是我仍然继续着我的思路,认为那个人可能忘了提及模式和相关链接。但是在提交我的答案后,我发现我完全错了。+1 - Adeel Ansari
1
@Adeel Ansari,无论如何,您提供了我没有的链接-“滤波器要点”的链接,所以在这方面+1。 - Bozho

30

什么是过滤器?

过滤器用于在请求被发送到servlet之前(对于请求)或在servlet将响应发送回客户端之前(对于响应)截取和处理请求。

或者

过滤器用于在 servlet 将响应通过客户端发送回来之前拦截和处理响应。

enter image description here

为什么要使用过滤器?

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

- 压缩响应流。

- 创建不同的响应。

doFilter()是做什么的?

doFilter() 每次容器确定需要应用过滤器于页面时都会被调用。

它需要 三个参数

->ServletRequest

->ServlerResponse

->FilterChain

所有你的过滤器所需实现的 功能都在doFilter()方法中实现。

什么是FilterChain?

过滤器不知道其他过滤器和servlet的任何信息。但是,FilterChain 知道你在 DD 中定义的 过滤器元素 的调用顺序。


13

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接