【发布时间】:2011-05-06 14:10:45
【问题描述】:
chain.doFilter(req,res);
我们在一个 servlet 程序中使用了它。我想知道 servlet 中方法 doFilter() 的用途是什么?
还有在 Java servlet 中过滤器和链的概念有什么用?
【问题讨论】:
标签: java servlets servlet-filters chain
chain.doFilter(req,res);
我们在一个 servlet 程序中使用了它。我想知道 servlet 中方法 doFilter() 的用途是什么?
还有在 Java servlet 中过滤器和链的概念有什么用?
【问题讨论】:
标签: java servlets servlet-filters chain
什么是过滤器?
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 servlet。 FilterChain 通过您在DD中定义的filter elements知道order of the invocation of filters和driven。
【讨论】:
过滤器用于补充 Servlet。对于用法,您应该阅读此内容,The Essentials of Filters。过滤器使用Chain of Responsibility GoF 模式实现。
【讨论】:
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。这对于安全目的很有用 - 例如,您可以检查是否有用户登录。
【讨论】: