Filter的详解与配置应用
1.filter概念與用處:
????????? filter 直譯為過濾器,是servlet中的重點(diǎn)對象,是web應(yīng)用組件,是個(gè)典型的處理鏈
????????? 主用用于: Jsp, Servlet, 靜態(tài)圖片文件或靜態(tài) html 文件等進(jìn)行攔截,從而實(shí)現(xiàn)一些特殊的功能。
?????????????????????? 例如實(shí)現(xiàn)URL級別的權(quán)限訪問控制、過濾敏感詞匯、壓縮響應(yīng)信息等一些高級功能。
2.filter的生命周期: (init方法與destroy方法只會執(zhí)行一次)
????????? 創(chuàng)建: 由WEB服務(wù)器負(fù)責(zé),服務(wù)器啟動(dòng)及創(chuàng)建,與servlet中的load-on-startup配置為1時(shí)效果相同 (只創(chuàng)建一次)
????????? 初始化:創(chuàng)建Filter對象實(shí)例后及會調(diào)用init()方法,接著被Web容器保存進(jìn)應(yīng)用級的集合容器中去了等待著,用戶訪問資源 (只初始化一次)
????????? 攔截: 當(dāng)用戶訪問的url被Filter的url-pattern攔截時(shí),Filter調(diào)用doFilter方法(多次攔截也不會再初始化filter)
????????? 消亡: 當(dāng)web應(yīng)用服務(wù)被停止或重新裝載了,Filter調(diào)用destroy方法,Filter銷毀
3.filter的攔截原理:
?????????? Filter接口中有一個(gè)doFilter方法,當(dāng)開發(fā)人員編寫好Filter類實(shí)現(xiàn)doFilter方法,并配置對哪個(gè)web資源進(jìn)行攔截后,
?????????? WEB服務(wù)器每次在調(diào)用web資源的service方法之前(服務(wù)器內(nèi)部對資源的訪問機(jī)制決定的),都會先調(diào)用一下filter的doFilter方法。
4.filter的應(yīng)用注意事項(xiàng):
??????????? 1> filter-mapping標(biāo)簽中servlet-name與url-pattern。
??????????????? Filter不僅可以通過url-pattern來指定攔截哪些url匹配的資源。
??????????????? 而且還可以通過servlet-name來指定攔截哪個(gè)指定的servlet(專門為某個(gè)servlet服務(wù)了,servlet-name對應(yīng)Servlet的相關(guān)配置)。
??????????? 2> filter-mapping標(biāo)簽中dispatcher。
??????????????? 指定過濾器所攔截的資源被 Servlet 容器調(diào)用的方式,可以是REQUEST,INCLUDE,FORWARD和ERROR之一,默認(rèn)REQUEST。
??????????????? 用戶可以設(shè)置多 個(gè)<dispatcher> 子元素用來指定 Filter 對資源的多種調(diào)用方式進(jìn)行攔截。
REQUEST:
當(dāng)用戶直接訪問頁面時(shí),Web容器將會調(diào)用過濾器。
????????????????????? 如果目標(biāo)資源是通過RequestDispatcher的include()或forward()方法訪問或ERROR情況時(shí),那么該過濾器就不會被調(diào)用。
INCLUDE:
????? 如果目標(biāo)資源是通過RequestDispatcher的include()方法訪問時(shí),那么該過濾器將被調(diào)用。除此之外,該過濾器不會被調(diào)用。
?????????????? FORWARD:
?????????????????????? 如果目標(biāo)資源是通過RequestDispatcher的forward()方法訪問時(shí),那么該過濾器將被調(diào)用,除此之外,該過濾器不會被調(diào)用。
ERROR:
?????????????????????? 如若在A.jsp頁面page指令中指定了error屬性=examError.jsp,那么A.jsp中若出現(xiàn)了異常,會跳轉(zhuǎn)到examError.jsp中處理。
?????????????????????? 而在跳轉(zhuǎn)到examError.jsp時(shí),若過濾器配置了ERROR的dispather那么則會攔截,否則不會攔截。
5.filter的實(shí)例入門:
??????????????? 1、新建一個(gè)類,實(shí)現(xiàn)Filter接口
2、實(shí)現(xiàn)doFilter()方法,打印一句話,來證明能夠進(jìn)行攔截
3、在web.xml中進(jìn)行配置(參照Servlet配置)
4、訪問一個(gè)頁面,看看能不能攔截
????????????
轉(zhuǎn)載于:https://www.cnblogs.com/yiyongyao/p/4501059.html
總結(jié)
以上是生活随笔為你收集整理的Filter的详解与配置应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CentOS 6.5源码包安装MySQL
- 下一篇: Socket编程基本流程实践