filter 过滤器加载流程

过滤器例子

<!--A过滤器-->
<
filter> <filter-name>mdamptRightLimitFilter</filter-name> <filter-class> com.sgfm.datacenter.filter.ALimitFilter </filter-class> </filter> <filter-mapping> <filter-name>AFilter</filter-name> <url-pattern>*.do</url-pattern> </filter-mapping>
<!--B过滤器-->
<filter> <filter-name>BFilter</filter-name> <filter-class>com.sgfm.datacenter.filter.BFilter</filter-class> </filter> <filter-mapping> <filter-name>BFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> </filter-mapping>

 

 

1.当web应用启动时候,就开始调用过滤器链中的所有init方法。初始化顺序 b->a,然后调用dofilter

public void init(FilterConfig filterConfig) {
        applicationContext = WebApplicationContextUtils.getWebApplicationContext(filterConfig.getServletContext());
    }

 

2.再 调用dofilter,不过只会调用 <url-pattern>/*</url-pattern> 的dofilter方法,为什么了,应为容器会将应用的上下问给去掉,只匹配/*的过滤器

当然这只是启动的时候

当在运行的时候,因为是过滤器链所以都会调用,只不过这时候调用的顺序就是先精确匹配,在通配符匹配

 

eg:调用的cc.do 会先调用 Afilter->Bfilter

 

posted @ 2017-08-30 18:08  zero_and_one  阅读(532)  评论(0编辑  收藏  举报