Web - 過濾器Filter & 監聽器Listener
一、過濾器Filter
filter執行在servlet和jsp之前 , 對客戶端訪問的資源進行過濾.
符合條件放行 , 不符合條件不放行 .(使用FilterChain.doFilter方法放行!)
1.filter的寫法.
首先需編寫一個類 , 實現filter介面 , 實現doFilter()方法.
1.配置檔案的寫法: 在web.xml中進行配置.
<filter> <filter‐name>MyFilter1</filter‐name> <filter‐class>類的全限定名</filter‐class> </filter> <filter‐mapping> <filter‐name>MyFilter1</filter‐name> <url‐pattern>對映路徑</url‐pattern> </filter‐mapping>
2.註解方式: 類上加註解 @WebFilter(“對映路徑”)
注: doFile方法預設攔截請求,如過濾之後,需要繼續訪問資源,用FilterChain放行.
底層執行了 servlet的servie方法.
2.對映路徑.
1.完全匹配: /servlet1
只有訪問的地址是servlet1 , 才執行該過濾器.
2.目錄匹配: /a/b/* (重點)
當訪問的目標資源的地址是/a/b/任何資源 , 都執行該過濾器.
3.副檔名匹配: *.jsp
訪問的目標資源是.jsp時 , 才執行該過濾器.
3.filter的生命週期.
- init(): Filter物件建立時, 立即執行.
- doFilter(): filter執行過濾的核心方法.
- destory(): filter物件銷燬前執行destory方法.
filter物件的生命週期:
建立: 伺服器啟動的時候.
銷燬: 伺服器關閉的時候.
執行過濾: 請求的路徑滿足過濾器的配置路徑 , 執行一次過濾器的doFilter方法.
4.FilterChain過濾器鏈.
過濾器鏈:
多個過濾器組成的一個整體.(只有所有的過濾器都對請求進行了放行,請求才能訪問到目標資源,只要多個過濾器中只有一個過濾器不放行 請求,那麼這個請求都不能夠訪問到目標資源。)
執行順序:
1.配置檔案: 取決於filter-mapping的順序(越靠前 , 越先執行.)
2.註解配置: 取決於filter的類名稱的字母順序.
5.配置全域性錯誤頁面.
錯誤頁面: 用來兜底 , 當發生錯誤的時候 , 自動以一個好看的錯誤頁面顯示給使用者.
<error-page>
<error-code>404</error-code>
<!-- jsp裡面可以設定好看的頁面. -->
<location>/404.jsp</location>
</error-page>
二、監聽器Listener
監聽器: 監聽某個物件的狀態變化的元件.
事件源: 被監聽的物件 , 3個域物件(request,session,servletCotnext)
監聽器: 監聽事件源物件(狀態的變化)
響應行為: 監聽器監聽到事件源的狀態變化時,所涉及的功能程式碼.
1.ServletContextListener監聽器:
:用於監聽ServletContext域的建立與銷燬的監聽器.
2.ServletContext域的生命週期
建立: 伺服器啟動時建立.
銷燬: 伺服器關閉時銷燬.
作用範圍: 整個web應用.
3.監聽器的編寫步驟:
1.編寫一個監聽器類實現監聽器介面ServletContextListener.
2.重寫監聽器的方法.
3.在web.xml中進行配置. 或使用註解配置: @WebListener .
<listener>
<listener-class> 全限定名 </listener-class>
</listener>