資源描述:
《Java中的Filter過濾器詳解》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、Java中的Filter過濾器詳解Filter也稱之為過濾器,它是Servlet技術(shù)中最實(shí)用的技術(shù),WEB開發(fā)人員通過Filter技術(shù),對(duì)web服務(wù)器管理的所有web資源:例如Jsp,Servlet,靜態(tài)圖片文件或靜態(tài)html文件等進(jìn)行攔截,從而實(shí)現(xiàn)一些特殊的功能。作者:李天煒來源:李天煒
2、2016-12-0709:56?收藏??分享?Filter簡介Filter也稱之為過濾器,它是Servlet技術(shù)中最實(shí)用的技術(shù),WEB開發(fā)人員通過Filter技術(shù),對(duì)web服務(wù)器管理的所有web資源:例如Jsp,Servlet,靜態(tài)圖片
3、文件或靜態(tài)html文件等進(jìn)行攔截,從而實(shí)現(xiàn)一些特殊的功能。例如實(shí)現(xiàn)URL級(jí)別的權(quán)限訪問控制、過濾敏感詞匯、壓縮響應(yīng)信息等一些高級(jí)功能。它主要用于對(duì)用戶請(qǐng)求進(jìn)行預(yù)處理,也可以對(duì)HttpServletResponse進(jìn)行后處理。使用Filter的完整流程:Filter對(duì)用戶請(qǐng)求進(jìn)行預(yù)處理,接著將請(qǐng)求交給Servlet進(jìn)行處理并生成響應(yīng),最后Filter再對(duì)服務(wù)器響應(yīng)進(jìn)行后處理。Filter功能·在HttpServletRequest到達(dá)Servlet之前,攔截客戶的HttpServletRequest。根據(jù)需要檢查HttpSe
4、rvletRequest,也可以修改HttpServletRequest頭和數(shù)據(jù)?!ぴ贖ttpServletResponse到達(dá)客戶端之前,攔截HttpServletResponse。根據(jù)需要檢查HttpServletResponse,也可以修改HttpServletResponse頭和數(shù)據(jù)。如何借助Filter實(shí)現(xiàn)攔截功能Filter接口中有一個(gè)doFilter方法,當(dāng)開發(fā)人員編寫好Filter,并配置對(duì)哪個(gè)web資源進(jìn)行攔截后,WEB服務(wù)器每次在調(diào)用web資源的service方法之前,都會(huì)先調(diào)用一下filter的doF
5、ilter方法,因此,在該方法內(nèi)編寫代碼可達(dá)到如下目的:·調(diào)用目標(biāo)資源之前,讓一段代碼執(zhí)行?!な欠裾{(diào)用目標(biāo)資源(即是否讓用戶訪問web資源)。web服務(wù)器在調(diào)用doFilter方法時(shí),會(huì)傳遞一個(gè)filterChain對(duì)象進(jìn)來,filterChain對(duì)象是filter接口中最重要的一個(gè)對(duì)象,它也提供了一個(gè)doFilter方法,開發(fā)人員可以根據(jù)需求決定是否調(diào)用此方法,調(diào)用該方法,則web服務(wù)器就會(huì)調(diào)用web資源的service方法,即web資源就會(huì)被訪問,否則web資源不會(huì)被訪問。Filter開發(fā)兩步走1.編寫java類實(shí)現(xiàn)F
6、ilter接口,并實(shí)現(xiàn)其doFilter方法。2.在web.xml文件中使用和元素對(duì)編寫的filter類進(jìn)行注冊(cè),并設(shè)置它所能攔截的資源。web.xml配置各節(jié)點(diǎn)介紹:·指定一個(gè)過濾器。o用于為過濾器指定一個(gè)名字,該元素的內(nèi)容不能為空。o元素用于指定過濾器的完整的限定類名。o元素用于為過濾器指定初始化參數(shù),它的子元素指定參數(shù)的名字,指定參數(shù)的值。o在過濾器中,可以使用FilterC
7、onfig接口對(duì)象來訪問初始化參數(shù)?!?filter-mapping>元素用于設(shè)置一個(gè)Filter所負(fù)責(zé)攔截的資源。一個(gè)Filter攔截的資源可通過兩種方式來指定:Servlet名稱和資源訪問的請(qǐng)求路徑o子元素用于設(shè)置filter的注冊(cè)名稱。該值必須是在元素中聲明過的過濾器的名字o設(shè)置filter所攔截的請(qǐng)求路徑(過濾器關(guān)聯(lián)的URL樣式)·指定過濾器所攔截的Servlet名稱?!?dispatcher>指定過濾器所攔截的資源被S
8、ervlet容器調(diào)用的方式,可以是REQUEST,INCLUDE,FORWARD和ERROR之一,默認(rèn)REQUEST。用戶可以設(shè)置多個(gè)子元素用來指定Filter對(duì)資源的多種調(diào)用方式進(jìn)行攔截?!?dispatcher>子元素可以設(shè)置的值及其意義oREQUEST:當(dāng)用戶直接訪問頁面時(shí),Web容器將會(huì)調(diào)用過濾器。如果目標(biāo)資源是通過RequestDispatcher的include()或forward()方法訪問時(shí),那么該過濾器就不會(huì)被調(diào)用。oINCLUDE:如果目標(biāo)資源是通過RequestDispatch
9、er的include()方法訪問時(shí),那么該過濾器將被調(diào)用。除此之外,該過濾器不會(huì)被調(diào)用。oFORWARD:如果目標(biāo)資源是通過RequestDispatcher的forward()方法訪問時(shí),那么該過濾器將被調(diào)用,除此之外,該過濾器不會(huì)被調(diào)用。oERROR:如果目標(biāo)資源是通過聲明式異常處理機(jī)制調(diào)用時(shí),那么