1. 程式人生 > >Web - 過濾器Filter & 監聽器Listener

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>