主要內容
- Filter :過濾器
- Listener :監聽器
Filter :過濾器
-
概念
- web中的過濾器 :訪問服務器的資源時,過濾器可以將請求攔截下來,完成一些特殊的功能。
- 過濾器的作用 :一般用於通用的操作;如登陸驗證,統一編碼處理,敏感字符過濾…
-
快速入門
- 創建一個類,實現接口Filter;是javax.servlet下的Filter
- 複寫方法
- 在方法中需要放行
- 配置攔截路徑
- web.xml配置
- 註解配置 @WebFilter("/*")
-
過濾器細節
- web.xml配置
<filter>
<filter-name>demo1</filter-name>
<filter-class>com.web.FilterDemo1</filter-class>
</filter>
<filter-mapping>
<filter-name>demo1</filter-name>
<!-- 攔截路徑 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
- 過濾器執行流程
- 放行之前
- 是對request對象的請求消息進行增強
- 放行之後
- 是對response對象的響應消息進行增強
- 響應回來後是在放行後開始執行
3. 過濾器的生命週期
- init :服務器啓動後,會創建Filter對象;此時執行此方法;只執行一次,一般用於加載資源
- doFilter :每一次請求被攔截時,會執行該方法;可以執行多次
- destroy :服務器關閉時,會銷燬Filter對象。若服務器是正常關閉,則會執行此方法,只執行一次;一般用於釋放資源
4. 過濾器配置詳解
- 攔截路徑的配置
1. 具體資源路徑 :/index.jsp 只有訪問index.jsp資源時,過濾器纔會被執行
2. 攔截目錄 : /user/* 訪問/user下的所有資源時,過濾器都會被執行
3. 後綴名攔截 : .jsp 訪問所有後綴名爲jsp的資源時,過濾器會被執行
4. 攔截所有資源 : / 訪問所有資源,鍋爐其都會被執行
- 攔截方式的配置
- 註解配置
* 設置dispatcherTypes屬性
1. REQUEST: 默認值;瀏覽器直接請求資源
2. FORWARD: 轉發訪問資源
3. INCLUDE: 包含訪問資源
4. ERROR: 錯誤跳轉資源
5. ASYNC: 異步訪問資源
- web.xml配置
* 設置標籤即可
5. 過濾器鏈(配置多個過濾器)
* 執行順序 若有兩個過濾器,過濾器1和過濾器2
* 則執行順序爲
* 過濾器1 – 過濾器2 – 資源 – 過濾器2 – 過濾器1
* 過濾器的先後順序問題
1. 註解配置
按照類名的字符串比較規則進行比較,值小的先執行
如: Afilter 和 Bfilter,則Afilter先執行
2. web.xml配置
按照定義的順序執行,誰定義在前面,誰先執行
基於Filter的兩個小案例
Listener :監聽器
-
概念 :web的三大組件之一
- 事件監聽機制
- 事件 :一件事情
- 事件源 :事件發生的地方
- 監聽器 :一個對象
- 註冊監聽 :將事件,事件源,監聽器綁定在一起;但事件源上發生事件時,運行監聽器代碼
- 事件監聽機制
-
ServletContextListener :監聽ServletContext對象的創建與銷燬
- 方法
- void contextDestroyed(ServletContextEvent sce) :ServletContext對象被銷燬前會調用此方法
- void contextInitialized(ServletContextEvent sce) :ServletContext對象被創建後會調用此方法
- 步驟
- 定義一個類,實現ServletContextListener接口
- 複寫方法
- 配置
-
web.xml配置
<!-- 配置監聽器 -->
<listener>
<listener-class>com.web.listener.ContextLoaderListener</listener-class>
</listener>
<!-- 指定初始化參數 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</context-param>
-
註解配置
@WebListener
-
- 方法