通過一個生活中的例子來說明過濾器到底是個什麼東西
小紅帽 去外婆家的路上遇到了一個土匪,那麼此時(小紅帽就是用戶),(土匪就可以比作一個過濾器),(外婆家就是一個服務器),小紅帽要訪問外婆家就必須經過土匪,土匪打劫了小紅帽的錢財後,然後將其放行
web中的過濾器:當訪問服務器資源時,過濾器可以將請求攔截下來,完成一些特殊的功能。
過濾器的作用:
*一般用於完成通用的操作:如登錄驗證,統一編碼處理,敏感字符過濾.....
使用步驟
1.定義一個類,實現Filter接口
2.複寫方法
- init() 服務器啓動後,在創建Filter對象時執行一次…一般用於加在資源
- doFilter() 每次訪問都會執行
- destroy() 服務器正常關閉執行
3.配置攔截路徑
- web.xml配置
<filter>
<filter-name>必須和下面的名字一致(名字隨意)</filter-name>
<filter-class>Filter的完整的路徑名</filter-class>
</filter>
<filter-mapping>
<filter-name>必須和上面的名字一致(名字隨意)</filter-name>
<url-pattern>攔截路徑</url-pattern>
</filter-mapping>
- 註解配置
@WebFilter("攔截路徑")
細節
攔截路徑配置
語法 | 說明 |
---|---|
/index.jsp | 具體訪問資源目錄時 |
/包名/* | 訪問某一個包下所有的目錄時 |
*.jsp | 攔截所有後綴名是jsp的(注意沒有斜槓) |
/* | 所有資源 |
攔截方式配置
設置dispatcherTypes屬性,有2個常用的值(
(1)REQUEST: 默認,瀏覽器直接請求資源纔會執行
(2)FORWARD: 轉發訪問的資源纔會執行)
@WebFilter(value = "攔截路徑",dispatcherTypes = "屬性名")
過濾器鏈(多個Filter)
執行順序
- 註解配置按類名的字符串大小排序,大的先執行(比如:Demo01和bDemo02;aDemo02就會先執行)
- web.xml:誰定義在上面誰先執行