過濾器Filter
Filter快速入門
1.1、步驟:
- 創建一個類實現Filter接口
- 重寫接口中方法 doFilter方法是真正過濾的。
- 在web.xml文件中配置
註意:在Filter的doFilter方法內如果沒有執行chain.doFilter(request,response)
那麽資源是不會被訪問到的。
1.2、FilterChain
FilterChain 是 servlet 容器為開發人員提供的對象,它提供了對某一資源的已過濾請求調用鏈的視圖。過濾器使用 FilterChain 調用鏈中的下一個過濾器,如果調用的過濾器是鏈中的最後一個過濾器,則調用鏈末尾的資源。
問題:怎樣可以形成一個Filter鏈?
只要多個Filter對同一個資源進行攔截就可以形成Filter鏈
問題:怎樣確定Filter的執行順序?
由<filter-mapping>來確定
1.3、Filter生命周期
Servlet生命周期:
實例化 --》 初始化 --》 服務 --》 銷毀
- 當服務器啟動,會創建Filter對象,並調用init方法,只調用一次.
- 當訪問資源時,路徑與Filter的攔截路徑匹配,會執行Filter中的doFilter方法,這個方法是真正攔截操作的方法.
- 當服務器關閉時,會調用Filter的destroy方法來進行銷毀操作.
1.4
在Filter的init方法上有一個參數,類型就是FilterConfig.
FilterConfig它是Filter的配置對象,它可以完成下列功能
- 獲取Filtr名稱
- 獲取Filter初始化參數
- 獲取ServletContext對象。
問題:怎樣在Filter中獲取一個FIlterConfig對象?
1.5、Filter配置
基本配置
<filter>
<filter-name>filter名稱</filter-name>
<filter-class>Filter
</filter>
<filter-mapping>
<filter-name>filter名稱</filter-name>
<url-pattern>路徑</url-pattern>
</filter-mapping>
關於其它配置
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()方法訪問時,那麽該過濾器將被調用。除此之外,該過濾器不會被調用
過濾器Filter