Filter以及Filter链

Filter:用来拦截请求,处于客户端与被请求资源之间,目的是重用代码。Filter可认为是Servlet的一种“变种”,它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理,是个典型的处理链。它与Servlet的区别在于:它不能直接向用户生成响应。完整的流程是:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。

Filter链,在web.xml中哪个先配置,哪个就先调用。在filter中也可以配置一些初始化参数。

自定义Filter的创建步骤:
(1)创建Filter 处理类: 

(2)在web.xml 文件中配置Filter 。 
创建Filter 必须实现javax.servlet.Filter接口,在该接口中定义了三个方法。 
• void init(FilterConfig config): 用于完成Filter 的初始化。 
• void destroy(): 用于Filter 销毁前,完成某些资源的回收。 
• void doFilter(ServletRequest request, ServletResponse response,FilterChain chain): 实现过滤功能,该方法就是对每个请求及响应增加的额外处理。 

在servlet2.4中,过滤器同样可以用于请求分派器,但须在web.xml中声明,<dispatcher>INCLUDE或FORWARD或REQUEST或ERROR</dispatcher>该元素位于filter-mapping中。 

dispatcher几个参数的含义:

  • REQUEST:默认值,过滤从浏览器发送过来的请求和重定向 不过滤转发

  • FORWARD:只过滤转发过来的请求

  • INCLUDE:只过滤包含过来的请求

  • ERROR:只过滤错误过来的请求

猜你喜欢

转载自blog.csdn.net/qq_35462323/article/details/87882606