更新時間:2020-10-26 17:29:00 來源:動力節(jié)點 瀏覽1575次
Javaweb是學(xué)習(xí)java編程的重要內(nèi)容,接觸過java的朋友們肯定都知道javaweb的重要性。在前面的文章中我們也介紹了javaweb三大組件是什么,分別是Servlet,F(xiàn)ilter,Listener,相信大家對三大組件也有一定的了解,今天我們來更進一步的學(xué)習(xí)javaweb過濾器的相關(guān)知識。
過濾器是javaweb三大組件之一,它與Servlet很相似,但是過濾器是用來攔截請求的,而不是處理請求的。當(dāng)用戶請求某個Servlet時,會先執(zhí)行部署在這個請求上的Filter,如果Filter“放行”,那么會繼承執(zhí)行用戶請求的Servlet;如果Filter不“放行”,那么就不會執(zhí)行用戶請求的Servlet??梢赃@樣理解javaweb過濾器:當(dāng)用戶請求某個Servlet時,Tomcat會去執(zhí)行注冊在這個請求上的Filter,然后是否“放行”由Filter來決定??梢岳斫鉃?,F(xiàn)ilter來決定是否調(diào)用Servlet,當(dāng)執(zhí)行完成Servlet的代碼后,還會執(zhí)行Filter后面的代碼。
下面是javaweb過濾器的工作流程方式:

Javaweb過濾器的作用就是攔截,有四種攔截方式:REQUEST 是默認(rèn)的,當(dāng)輸入其他的,那么默認(rèn)的將取消(消失),請求攔的是直接請求,不攔轉(zhuǎn)發(fā)請求REQUEST;轉(zhuǎn)發(fā)(專門攔轉(zhuǎn)發(fā)):FORWARD包含(專門攔包含):INCLUDE錯誤(專門攔錯誤):ERROR。
Javaweb過濾器的應(yīng)用場景:(1)執(zhí)行目標(biāo)資源之前做預(yù)處理工作,例如設(shè)置編碼,這種通常都會放行,只是在目標(biāo)資源執(zhí)行之前做一下準(zhǔn)備工作。例如放行 :幾乎所有的servlet中都需要寫request.setCharacterEndoin()可以把它放入到一個Filter中;(2)通過條件判斷是否放行,例如效驗當(dāng)前用戶是否已經(jīng)登錄,或者用戶IP是否已經(jīng)被禁用;(3)在目標(biāo)資源執(zhí)行后,做一些后續(xù)的特殊處理工作,例如把目標(biāo)資源輸出的數(shù)據(jù)進行處理。
多個Filter的執(zhí)行順序,在我們的請求到達Servle之間是可以經(jīng)過多個Filter的,一般來說,建議Filter之間不要有關(guān)聯(lián),各自處理各自的邏輯即可。這樣,我們也無需關(guān)心執(zhí)行順序問題。如果一定要確保執(zhí)行順序,就要對配置進行修改了,執(zhí)行順序如下:(1)在web.xml中,filter執(zhí)行順序跟
學(xué)習(xí)java,就要學(xué)習(xí)javaweb,進而就要學(xué)習(xí)javaweb過濾器,上面就是今天介紹的javaweb過濾器相關(guān)基礎(chǔ)知識,希望可以幫助java零基礎(chǔ)的朋友們學(xué)習(xí)理解過濾器,另外可以在javaweb教程中學(xué)習(xí)更多的知識。