Filter
1、過濾器,由servlet容器調用,用來攔截以及處理請求和響應
2、其本身不能生成請求和響應對象,但可以對請求和響應對象進行檢查和修改
3、過濾器介於客戶端與Servlet/JSP等相關的資源之間,對於與過濾器關聯的Servlet來說,過濾器可以在Servlet被調用之前檢查並且修改request對象,在Servlet調用之後檢查並修改response對象。
工作原理
1. 客戶端將請求發送給Web容器;
2. Web容器根據客戶端發送的請求生成請求對象request和響應對象response。
3. Web容器在調用與過濾器相關聯的Web組件(例如Servlet/JSP)之前,先將request對象以及response對象發送給過濾器。
4. 過濾器對request對象進行必要的處理;
5. 過濾器把處理過的request對象以及response對象傳遞給Web組件;
6. Web組件調用完成後,再次通過過濾器,此時過濾器對response對象進行必要的處理;
7. 過濾器把處理過的response對象傳遞給Web容器;
8. Web容器將響應的結果返回到客戶端,並在瀏覽器上顯示。
過濾器執行流程
1. 執行過濾器
2. 執行放行後的資源
3. 回來執行過濾器放行代碼下邊的代碼
使用
一、 步驟:
1. 定義一個類,實現接口Filter
2. 實現init( )方法,如有必要,讀取過濾器的初始化參數;
3. 實現doFilter( )方法,完成對ServletRequest對象以及ServletResponse對象的檢查和處理;
4. 在doFilter( )方法中調用FilterChain接口對象chain的doFilter( )方法,以便將過濾器傳遞給後續的過濾器或資源。
5. 配置攔截路徑
1. web.xml
2. 註解
二、代碼:
@WebFilter("/*")//訪問所有資源之前,都會執行該過濾器
public class FilterDemo1 implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("filterDemo1被執行了....");
//放行
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
}
}
過濾器細節:
web.xml配置
<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>
<servlet-name>它用於設置當前Filter攔截哪一個servlet
是通過servlet的name來確定的。
過濾器執行流程
1. 執行過濾器
2. 執行放行後的資源
3. 回來執行過濾器放行代碼下邊的代碼
3. 過濾器生命週期方法
1. init:在服務器啓動後,會創建Filter對象,然後調用init方法。只執行一次。用於加載資源
2. doFilter:每一次請求被攔截資源時,會執行。執行多次
3. destroy:在服務器關閉後,Filter對象被銷燬。如果服務器是正常關閉,則會執行destroy方法。只執行一次。用於釋放資源
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配置
* 設置<dispatcher></dispatcher>標籤即可
5. 過濾器鏈(配置多個過濾器)
* 執行順序:如果有兩個過濾器:過濾器1和過濾器2
1. 過濾器1
2. 過濾器2
3. 資源執行
4. 過濾器2
5. 過濾器1
* 過濾器先後順序問題:
1. 註解配置:按照類名的字符串比較規則比較,值小的先執行
* 如: AFilter 和 BFilter,AFilter就先執行了。
2. web.xml配置: <filter-mapping>誰定義在上邊,誰先執行
Listener:監聽器
* 概念:web的三大組件之一。
* 事件監聽機制
* 事件 :一件事情
* 事件源 :事件發生的地方
* 監聽器 :一個對象
* 註冊監聽:將事件、事件源、監聽器綁定在一起。 當事件源上發生某個事件後,執行監聽器代碼
* ServletContextListener:監聽ServletContext對象的創建和銷燬
* 方法:
* void contextDestroyed(ServletContextEvent sce) :ServletContext對象被銷燬之前會調用該方法
* void contextInitialized(ServletContextEvent sce) :ServletContext對象創建後會調用該方法
* 步驟:
1. 定義一個類,實現ServletContextListener接口
2. 複寫方法
3. 配置
1. web.xml
<listener>
<listener-class>cn.itcast.web.listener.ContextLoaderListener</listener-class>
</listener>
* 指定初始化參數<context-param>
2. 註解:
* @WebListener