更新時(shí)間:2021-07-27 16:44:33 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1049次
Filter,過濾器,顧名思義,即是對(duì)數(shù)據(jù)等的過濾,預(yù)處理過程。為什么要引入過濾器呢?在平常訪問網(wǎng)站的時(shí)候,有時(shí)候發(fā)一些敏感的信息,發(fā)出后顯示時(shí)就會(huì)將敏感信息用*等字符替代,這就是用過濾器對(duì)信息進(jìn)行了處理。
這只是一個(gè)簡(jiǎn)單的例子,當(dāng)然,過濾器那么強(qiáng)大,它的功能也不可能局限于此,它不僅能預(yù)處理數(shù)據(jù),只要是發(fā)送過來的請(qǐng)求它都是可以預(yù)處理的,同時(shí),它還可以對(duì)服務(wù)器返回的響應(yīng)進(jìn)行預(yù)處理,這樣,大大減輕了服務(wù)器的壓力。例如,實(shí)現(xiàn)URL級(jí)別的權(quán)限訪問控制、過濾敏感詞匯、壓縮響應(yīng)信息等一些高級(jí)功能。下面來詳細(xì)介紹一下過濾器。
過濾作用,對(duì)從客戶端向服務(wù)器端發(fā)送的請(qǐng)求進(jìn)行過濾,也可以對(duì)服務(wù)器端返回的響應(yīng)進(jìn)行處理。它使用戶可以改變一個(gè)request和修改一個(gè)response.。Filter不是一個(gè)servlet,它不能產(chǎn)生一個(gè)response,但是它能夠在一個(gè)request到達(dá)servlet之前預(yù)處理request,也可以在response離開servlet時(shí)處理response。換句話說,filter其實(shí)是客戶端與servlet中間的一個(gè)傳遞者,并且它可以對(duì)要傳遞的東西進(jìn)行修改。
注意:過濾器是用來攔截請(qǐng)求和響應(yīng)的,不能產(chǎn)生響應(yīng),而servlet是用來處理請(qǐng)求并產(chǎn)生響應(yīng)的。
實(shí)現(xiàn)URL級(jí)別的權(quán)限訪問控制,過濾敏感詞匯,壓縮響應(yīng)信息等。
當(dāng)客戶端發(fā)生請(qǐng)求后,在HttpServletRequest到達(dá)Servlet之前,過濾器攔截客戶的HttpServletRequest。根據(jù)需要檢查HttpServletRequest,也可以修改HttpServletRequest頭和數(shù)據(jù)。在過濾器中調(diào)用doFilter方法,對(duì)請(qǐng)求放行。請(qǐng)求到達(dá)Servlet后,對(duì)請(qǐng)求進(jìn)行處理并產(chǎn)生HttpServletResponse發(fā)送給客戶端。在HttpServletResponse到達(dá)客戶端之前,過濾器攔截HttpServletResponse。根據(jù)需要檢查HttpServletResponse,可以修改HttpServletResponse頭和數(shù)據(jù)。最后,HttpServletResponse到達(dá)客戶端。
Servlet API提供了一個(gè)Filter接口,編寫的過濾器必須實(shí)現(xiàn)該接口。
(1)Filter接口中有三個(gè)重要的方法。
init()方法:初始化參數(shù),在創(chuàng)建Filter時(shí)自動(dòng)調(diào)用。當(dāng)我們需要設(shè)置初始化參數(shù)的時(shí)候,可以寫到該方法中。doFilter()方法:攔截到要執(zhí)行的請(qǐng)求時(shí),doFilter就會(huì)執(zhí)行。這里面寫我們對(duì)請(qǐng)求和響應(yīng)的預(yù)處理。destroy()方法:在銷毀Filter時(shí)自動(dòng)調(diào)用。
(2)Filter的生命周期
Filter的創(chuàng)建和銷毀由web服務(wù)器控制。
服務(wù)器啟動(dòng)的時(shí)候,web服務(wù)器創(chuàng)建Filter的實(shí)例對(duì)象,并調(diào)用其init方法,完成對(duì)象的初始化功能。filter對(duì)象只會(huì)創(chuàng)建一次,init方法也只會(huì)執(zhí)行一次。攔截到請(qǐng)求時(shí),執(zhí)行doFilter方法。可以執(zhí)行多次。服務(wù)器關(guān)閉時(shí),web服務(wù)器銷毀Filter的實(shí)例對(duì)象。
用戶在配置filter時(shí),可以使用為filter配置一些初始化參數(shù),當(dāng)web容器實(shí)例化Filter對(duì)象,調(diào)用其init方法時(shí),會(huì)把封裝了filter初始化參數(shù)的filterConfig對(duì)象傳遞進(jìn)來。因此開發(fā)人員在編寫filter時(shí),通過filterConfig對(duì)象的方法,就可獲得:
String getFilterName():得到filter的名稱。String getInitParameter(String name):返回在部署描述中指定名稱的初始化參數(shù)的值。如果不存在返回null.Enumeration getInitParameterNames():返回過濾器的所有初始化參數(shù)的名字的枚舉集合。public ServletContext getServletContext():返回Servlet上下文對(duì)象的引用。
一組過濾器對(duì)某些web資源進(jìn)行攔截,那么這組過濾器就稱為過濾器鏈。過濾器的執(zhí)行順序和有關(guān)(誰在前先執(zhí)誰)。
以上就是動(dòng)力節(jié)點(diǎn)小編介紹的"Filter是什么意思",希望對(duì)大家有幫助,想了解更多可查看Filter過濾器。動(dòng)力節(jié)點(diǎn)在線學(xué)習(xí)教程,針對(duì)沒有任何Java基礎(chǔ)的讀者學(xué)習(xí),讓你從入門到精通,主要介紹了一些Java基礎(chǔ)的核心知識(shí),讓同學(xué)們更好更方便的學(xué)習(xí)和了解Java編程,感興趣的同學(xué)可以關(guān)注一下。
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743