Javaweb-Filter攔截器

一、什麼是Filter攔截器

Javaweb中的過濾器可以攔截所有訪問web資源的請求或響應操作。

二、Filter配置

1.基本配置

       <filter>

              <filter-name>filter名稱</filter-name>

              <filter-class>Filter類的包名.類名</filter-class>

       </filter>

       <filter-mapping>

              <filter-name>filter名稱</filter-name>

              <url-pattern>路徑</url-pattern>

       </filter-mapping>

 2.關於其它配置

1.<url-pattern>

              完全匹配   以”/demo1”開始,不包含通配符*
              目錄匹配   以”/”開始  以*結束

              擴展名匹配  *.xxx  不能寫成/*.xxx

2.<servlet-name>

它是對指定的servlet名稱的servlet進行攔截的。

 3.<dispatcher>

 可以取的值有  REQUEST FORWARD  ERROR  INCLUDE  
它的作用是:當以什麼方式去訪問web資源時,進行攔截操作. 
1.REQUEST 當是從瀏覽器直接訪問資源,或是重定向到某個資源時進行攔截方式配置的它也是默認值
2.FORWARD 它描述的是請求轉發的攔截方式配置
3.ERROR 如果目標資源是通過聲明式異常處理機制調用時,那麼該過濾器將被調用。除此之外,過濾器不會被調用。

4.INCLUDE 如果目標資源是通過RequestDispatcher的include()方法訪問時,那麼該過濾器將被調用。除此之外,該過濾器不會被調用

三、FilterChain

FilterChain 是 servlet 容器爲開發人員提供的對象,它提供了對某一資源的已過濾請求調用鏈的視圖。過濾器使用 FilterChain 調用鏈中的下一個過濾器,如果調用的過濾器是鏈中的最後一個過濾器,則調用鏈末尾的資源。

問題:怎樣可以形成一個Filter鏈?

       只要多個Filter對同一個資源進行攔截就可以形成Filter鏈

問題:怎樣確定Filter的執行順序?

       由<filter-mapping>來確定


上圖先執行MyFilter過濾器,再執行MyFilter2過濾器。

MyFilter--MyFilter2


上圖先執行MyFilter2過濾器,再執行MyFilter過濾器。

MyFilter2--MyFilter


四、生命週期

1.Servlet生命週期:

實例化 --》初始化 --》服務 --》銷燬

 

2.Filter生命週期

l  當服務器啓動,會創建Filter對象,並調用init方法,只調用一次.

l  當訪問資源時,路徑與Filter的攔截路徑匹配,會執行Filter中的doFilter方法,這個方法是真正攔截操作的方法.

l  當服務器關閉時,會調用Filter的destroy方法來進行銷燬操作.

二者的主要區別在於Filter是在服務器啓動時就實例化和初始化,而Servlet是在初次訪問時才進行實例化和初始化

五、FilterConfig

在Filter的init方法上有一個參數,類型就是FilterConfig.

FilterConfig它是Filter的配置對象,它可以完成下列功能

1.      獲取Filtr名稱

2.      獲取Filter初始化參數

3.      獲取ServletContext對象。

怎樣在Filter中獲取一個FIlterConfig對象?



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章