Filter&Listener筆記
Filter過濾器
概念:當訪問伺服器得資源時,過濾器可以將請求攔截下來,完成一些特殊得功能 作用:一般用於完成通用得操作,如:登陸驗證,統一編碼處理,敏感字元過濾 快速入門 步驟 定義一個類,實現介面Filter 複寫方法 配置攔截路徑 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>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>
過濾器執行流程 執行過濾器 執行放行後得資源 回來執行過濾器放行程式碼下邊得程式碼 過濾器宣告週期方法 init:在伺服器啟動後,會建立Filter物件,然後呼叫init方法,只執行一次,用於載入資源 doFilter:每一次請求被攔截資源時,會執行,可執行多次 destory:在伺服器關閉後,Filter物件被銷燬,如果伺服器是正常關閉,則會執行destory方法,只執行一次,用於銷燬資源 過濾器配置 攔截路徑配置
1.具體資源路徑:/index.jsp
2.攔截目錄:/user/*
3.字尾名攔截: *.jsp
4.攔截所有資源:/*
攔截方式配置:資源被訪問的方式
註解配置:
設定dispatcherTypes屬性
設定dispatcherTypes屬性
1. REQUEST:預設值。瀏覽器直接請求資源
2. FORWARD:轉發訪問資源
3. INCLUDE:包含訪問資源
4. ERROR:錯誤跳轉資源
5. ASYNC:非同步訪問資源
web.xml配置
設定<dispatcher></dispatcher>
過濾器鏈 執行順序:如果有兩個過濾器:過濾器1和過濾器2 1. 過濾器1 2. 過濾器2 3. 資源執行 4. 過濾器2 5. 過濾器1 過濾器先後順序問題: 1. 註解配置:按照類名的字串比較規則比較,值小的先執行 如: AFilter 和 BFilter,AFilter就先執行了。 2. web.xml配置: 誰定義在上邊,誰先執行
增強物件的功能 設計模式:一些通用的解決固定問題的方式 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