一、當我們為一個資源設置了多個過濾器時,這些過濾器就組成一個Filter鏈的結構。
當執行到一個filter的doFilter方法,調用其中的chain.doFilter()。如果還有攔截器(filter),則繼續執行下一個filter的doFIlter方法,
如果之后沒有過濾器了,就放行請求。相當於調用了目標資源的service()方法。
doFilter()方法用於調用Filter鏈上的下一個過濾器,如果當前過濾器為最后一個過濾器則將請求發送到目標資源。
二、當有多個Filter時,在web.xml中<url-pattern>靠前的filter先執行。
三、<dispatcher>標簽
在web.xml中加載配置filter類后,詳見上篇創建一個Filter, <url-pattern>標簽里有<dispatcher> 標簽用來設置請求的方式。
如果不設置,默認的攔截的請求是request。當轉發的請求到達時,過濾器就過濾不了。
如果想攔截轉發的請求web資源。就在<dispatcher>里設置方式為FORWARD。這時,
請求的web資源就攔截不了。當然,可以在<url-pattern>中寫多個<dispatcher>,
方式設置為REQUEST。
如果想要攔截jsp中動態的include,就再寫一個<dispatcher>,
方式設置為INCLUDE。