1、什么是FilterChain
? ? FilterChain過濾器鏈:在一個Web應(yīng)用中培慌,可以開發(fā)編寫多個Filter,這些Filter組合起來稱為是一個過濾器鏈
? ? Web服務(wù)器根據(jù)Filter在web.xml文件中的注冊順序(mapping的配置順序)決定先調(diào)用哪個Filter柑爸,依次調(diào)用后面的過濾器吵护,如果沒有下一個過濾器,則調(diào)用目標(biāo)資源
2、FilterConfig對象的概述
(1)FilterConfig對象的作用:
用來獲得Filter的相關(guān)的配置的對象
(2)FilterConfig對象的API
?? ?getFilterName()
?? ?getInitParameter(String name)
?? ?getInitParameterNames()
?? ?getServletContext()
3馅而、<dispatcher>的配置
? ? 默認(rèn)的情況下祥诽,過濾器會攔截請求,如果進(jìn)行轉(zhuǎn)發(fā)(需要攔截這次轉(zhuǎn)發(fā))
? ? dispatcher的取值有四個:
?? ?? ? REQUEST:默認(rèn)值瓮恭。默認(rèn)過濾器攔截的就是請求
?? ?? ? FORWARD:轉(zhuǎn)發(fā)
?? ?? ? INCLUDE:頁面包含的時候進(jìn)行攔截
?? ?? ? ERROR:頁面出現(xiàn)全局錯誤頁面跳轉(zhuǎn)的時候進(jìn)行攔截
4.Filter的生命周期描述
? ? Filter的創(chuàng)建和銷毀是由web服務(wù)器負(fù)責(zé)雄坪。Web應(yīng)用程序啟動的時候,Web服務(wù)器創(chuàng)建Filter的實例對象屯蹦,并調(diào)用其init方法進(jìn)行初始化的操作(Filter對象只會創(chuàng)建一次维哈,init方法也只會執(zhí)行一次)
? ? 每次Filter進(jìn)行攔截的時候,都會執(zhí)行doFilter的方法
? ? 當(dāng)服務(wù)器關(guān)閉的時候登澜,或者應(yīng)用從服務(wù)器中移除的時候阔挠,服務(wù)器會銷毀Filter對象
5.<url-pattern>的配置
? ? 完全路徑匹配:以/開始,例如/aaa? /aaa/bbb
? ? 目錄匹配:以/開始脑蠕,例如/*? /aaa/*? /aaa/bbb/*
? ? 擴(kuò)展名匹配:不能以/開始购撼,以*開始,例如*.jsp *.do *.action
6.<servlet-name>的配置
? ? 專門以Servlet的配置的名稱攔截Servlet
7.通過上面的分析谴仙,現(xiàn)在要增強(qiáng)request的getParameter方法迂求,增強(qiáng)的過程要寫在過濾器當(dāng)中
如何增強(qiáng)一個類中的方法?
繼承
必須要能夠控制這個類的構(gòu)造
裝飾者
被增強(qiáng)的類和增強(qiáng)的類需要實現(xiàn)相同的接口
在增強(qiáng)的類中獲得被增強(qiáng)的類的引用
缺點:接口中的方法過多狞甚,會導(dǎo)致要重寫很多其他的方法
動態(tài)代理
類需要實現(xiàn)接口