Filter & Listener
阿新 • • 發佈:2020-11-19
今日內容
1. Filter:過濾器
2. Listener:監聽器
Filter:過濾器
1. 概念: * 生活中的過濾器:淨水器,空氣淨化器,土匪、 * web中的過濾器:當訪問伺服器的資源時,過濾器可以將請求攔截下來,完成一些特殊的功能。 * 過濾器的作用: * 一般用於完成通用的操作。如:登入驗證、統一編碼處理、敏感字元過濾... 2. 快速入門: 1. 步驟: 1. 定義一個類,實現介面Filter 2. 複寫方法 3. 配置攔截路徑 1. web.xml 2. 註解 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() { } } 3. 過濾器細節: 1. web.xml配置 <filter> <filter-name>demo1</filter-name> <filter-class>cn.itcast.web.filter.FilterDemo1</filter-class> </filter> <filter-mapping> <filter-name>demo1</filter-name> <!-- 攔截路徑 --> <url-pattern>/*</url-pattern> </filter-mapping> 2. 過濾器執行流程 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>誰定義在上邊,誰先執行 4. 案例: 1. 案例1_登入驗證 * 需求: 1. 訪問day17_case案例的資源。驗證其是否登入 2. 如果登入了,則直接放行。 3. 如果沒有登入,則跳轉到登入頁面,提示"您尚未登入,請先登入"。
2. 案例2_敏感詞彙過濾 * 需求: 1. 對day17_case案例錄入的資料進行敏感詞彙過濾 2. 敏感詞彙參考《敏感詞彙.txt》 3. 如果是敏感詞彙,替換為 *** * 分析: 1. 對request物件進行增強。增強獲取引數相關方法 2. 放行。傳遞代理物件 * 增強物件的功能: * 設計模式:一些通用的解決固定問題的方式 1. 裝飾模式 2. 代理模式 * 概念: 1. 真實物件:被代理的物件 2. 代理物件: 3. 代理模式:代理物件代理真實物件,達到增強真實物件功能的目的 * 實現方式: 1. 靜態代理:有一個類檔案描述代理模式 2. 動態代理:在記憶體中形成代理類 * 實現步驟: 1. 代理物件和真實物件實現相同的介面 2. 代理物件 = Proxy.newProxyInstance(); 3. 使用代理物件呼叫方法。 4. 增強方法 * 增強方式: 1. 增強引數列表 2. 增強返回值型別 3. 增強方法體執行邏輯
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