定義2個Filter,filter1過濾.htm和.json結尾的url,filter2過濾.htm和.xml結尾的url。
1、init()方法執行順序:先執行filter2的init()方法,后執行filter1的init()方法。
因為Filter是責任鏈模式的,上一級對象包含下一級對象的指針,所以創建順序在web.xml中是從后往前的。
2、同一mapping url的doFilter()執行順序,如*.htm:先執行filter1的doFilter()方法,后執行filter2的doFilter()方法,會進行鏈式調用。在web.xml中,是按照從前往后的順序執行。
3、當全部Filter執行完成,且沒有return時,會調用url映射的servlet的service()方法。service()方法執行完后,會逐層放回Filter的doFilter()方法,有點像spring的aop。
4、不同mapping url的doFilter()執行順序,如*.json:只會調用filter1的doFilter()方法。mapping url只會執行對應Filter的doFilter()方法。
5、Tomcat7的Filter實現類為ApplicationFilterChain,創建代碼如下:
Java代碼:
ApplicationFilterFactory factory =
ApplicationFilterFactory.getInstance();
ApplicationFilterChain filterChain =
factory.createFilterChain(request, wrapper, servlet);
Java代碼:
<filter>
<filter-name>filter1</filter-name>
<filter-class>filter.Filter1</filter-class>
</filter>
<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern>*.htm</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern>*.json</url-pattern>
</filter-mapping>
<filter>
<filter-name>filter2</filter-name>
<filter-class>filter.Filter1</filter-class>
</filter>
<filter-mapping>
<filter-name>filter2</filter-name>
<url-pattern>*.htm</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>filter2</filter-name>
<url-pattern>*.xml</url-pattern>
</filter-mapping>
與本文無關:寧波月嫂www.hongqiangnb.com 轉載請注明,肆意刪除鏈接,我們將保留追責權利。