chain.doFilter(req,res);
我们在servlet程序中使用了这个方法。 我想知道在servlet中doFilter()
方法的用途是什么? 还有Java servlet中过滤器和链概念的作用是什么?
chain.doFilter(req,res);
我们在servlet程序中使用了这个方法。 我想知道在servlet中doFilter()
方法的用途是什么? 还有Java servlet中过滤器和链概念的作用是什么?
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将永远不会被调用。这对于安全目的非常有用 - 例如,您可以检查是否有用户登录。
什么是过滤器?
过滤器
用于在请求被发送到servlet之前(对于请求)或在servlet将响应发送回客户端之前(对于响应)截取和处理请求。
或者
过滤器
用于在 servlet 将响应通过客户端发送回来之前拦截和处理响应。
为什么要使用过滤器?
- 过滤器可以执行安全检查。
- 压缩响应流。
- 创建不同的响应。
doFilter()是做什么的?
doFilter()
每次容器确定需要应用过滤器于页面时都会被调用。
它需要 三个参数
->ServletRequest
->ServlerResponse
->FilterChain
所有你的过滤器所需实现的 功能都在doFilter()
方法中实现。
什么是FilterChain?
过滤器不知道其他过滤器和servlet的任何信息
。但是,FilterChain 知道你在DD
中定义的过滤器元素
的调用顺序。