Filter&Listener
Filter接口:過濾器
作用:
當訪問服務器的資源時,過濾器可以將請求攔截下來,完成一些特殊的功能,如:登錄驗證、統一編碼處理、敏感詞過濾……
使用步驟:
- 定義一個java類,實現Filter接口
- 複寫方法
- 配置攔截路徑:通過
web,xml
或者@webFilter("路徑")
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>
過濾器的生命週期:
init
:執行一次,加載資源doFilter
:執行多次,攔截資源後執行destroy
:執行一次,釋放資源
過濾器的攔截路徑配置:
攔截路徑 | 實例 | 過濾器執行的情況 |
---|---|---|
具體資源路徑 | /index.jsp |
訪問index.jsp 資源時 |
攔截目錄 | /user/* |
訪問/user 下的所有資源時 |
後綴名攔截 | *.jps |
訪問所有後綴名爲.jsp 資源時 |
攔截所有資源 | /* |
訪問所有資源時 |
過濾器的攔截方式配置(資源被訪問的方式):
- 註解配置:
設置dispatcherTypes 屬性 |
功能 |
---|---|
REQUEST | 默認值。瀏覽器直接訪問請求資源 |
FORWARD | 轉發訪問資源 |
INCLUDE | 包含訪問資源 |
ERROR | 錯誤跳轉資源 |
ASYNC | 異步訪問資源 |
web.xml
配置:設置<dispatcher></dispatcher>
標籤即可
過濾器鏈(配置多個過濾器):
- 執行順序:如果有兩個過濾器,過濾器1和過濾器2
過濾器1 -> 過濾器2 -> 資源執行 ->過濾器2 -> 過濾器1
- 過濾器先後順序問題:
- 註解配置:按照類名的字符串比較規則比較,值小的先執行
web.xml
配置:<filter-mapping>
誰定義在上邊,誰先執行
Listener接口:監聽器
概念:web的三大組件之一
事件監聽機制:
- 事件:一件事情
- 事件源:事件發生的地方
- 監聽器:一個對象
- 註冊監聽:將事件、事件源、監聽器綁定在一起
ServletContextListener接口
作用:監聽ServletContext
對象的創建和銷燬
方法:
常用方法 | 功能描述 |
---|---|
void contextDestroyed(ServletContextEvent sce) | ServletContext對象被銷燬之前會調用該方法 |
void contextInitialized(ServletContextEvent sce) | ServletContext對象創建後會調用該方法 |
使用步驟:
-
定義一個類,實現
ServletContextListener
接口 -
複寫方法
-
配置:
web.xml
或者@WebListener
web.xml
配置:<listener> <listener-class> Listener接口實現類 </listener-class> </listener>