1>Filter的基本功能是對Servlet容器呼叫Servlet的過程進行攔截,從而在Servlet進行響應處理的前實現一些特殊的功能。 2>在ServletAPI中定義了三個介面類來供開發人員編寫Filter程式:Filter,FilterChain,FilterConfig 3>Filter程式是一個實現了Filter介面的Java類,與Servlet程式相似,它由Servlet容器進行呼叫和執行 4>Filter程式需要在web.xml檔案中進行註冊和設定它所能攔截的資源: Filter程式可以攔截JSP,Servlet靜態圖片檔案和靜態html檔案
方法/步驟
1.新建兩個JSP檔案
2.首頁做個跳轉到result.jsp
3.結果頁面僅輸出一句話,表示到達結果頁
4.執行首頁
5.點選連線,到達結果頁,這是一個正常的跳轉
6.現在給它加上一個攔截器,新建HelloWorldFilter.java檔案
7.讓它實現 Filter 介面,併為每個方法輸出方法名,我們看下這個攔截器是如何執行的
8.在web.xml中註冊並對映攔截器
9.再次啟動工程,發現,inIt方法在Servlet容器載入當前WEB應用時即被建立,且只被呼叫一次。該方法用於對當前的Filter進行初始化操作
10.當點選連線後發現呼叫doFilter方法,跳轉到結果頁面,但是頁面上並沒有輸出我們想要的結果
11.再次重新整理結果頁,發現,重新整理一次,呼叫一次doFilter方法,
說明:真正Filter的邏輯程式碼需要編寫在該方法中,每次呼叫都會呼叫該方法。
12.在doFilter中增加如下程式碼即:
doFilter(ServletRequest request,ServletResponse response)把請求傳給Filter鏈的下一個Filter,
它是 FilterChain:Filter鏈,多個Filter可以構成Filter鏈。
若當前Filter是鏈的最後一個,則把請求傳給目標Servlet(或JSP)
多個Filter 攔截的順序和
13.執行結果,現在返回到正常的結果頁面
14.通俗來講,攔截器就是一個門衛,讓你進去你就進去,讓你去哪裡你就去哪裡!