Filter执行流程 (三)

2014-11-24 07:11:51 · 作者: · 浏览: 2
ngFilter
*.jsp


CharsetEncodingFilter
/servlet/*



AuthFilter
filter.AuthFilter


AuthFilter
*.jsp



AuthFilter
/servlet/*



< xml version="1.0" encoding="UTF-8" >
http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:javaee="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">


CharsetEncodingFilter
filter.CharsetEncodingFilter

encoding
GB18030



CharsetEncodingFilter
*.jsp


CharsetEncodingFilter
/servlet/*



AuthFilter
filter.AuthFilter


AuthFilter
*.jsp



AuthFilter
/servlet/*


Filter中主要有三个方法init(),doFilter(),destroy()

1.init(FilterConfigfilterConfig)

Web容器调用该方法该方法来初始化过滤器。容器在调用该方法时,向过滤器传递

FilterConfig对象,利用FilterConfig对象可以得到ServletContext对象,以及部署描述符中配置的过滤器的初始化参数。\

从图中可以看出来Listener,Filter,Servlet及Tomcat的一个启动顺序。

2.doFilter(ServletRequestrequest, ServletResponse response,FilterChain chain)

这是Filter的主要方法,其中的request和response和servlet里的参数一样,至于chain是用于后面对请求的转发的,该参数的chain.doFilter方法是一种回调过程。

该方法以chain.doFilter()为界限,先执行前面的代码,然后执行chain.doFilter()方法来将请求传递给下一个Filter(如果没有Filter了就传递给Servlet),等到这条链执行完后,再往回执行后面的代码,它是使用回调来实现的。

大家可以通过下面的图来进行理解:

\


3.destroy()

这个方法servlet的destroy()方法一样,都是当服务器断开的时候才执行该销毁方法,Filter也是实例化一次,多次调用。

摘自 赵丹丹的专栏