Filter&Listener筆記

Filter:過濾器

  1. 概念:html

    • web中的過濾器:當訪問服務器的資源時,過濾器能夠將請求攔截下來,完成一些特殊的功能。
    • 過濾器的做用: 通常用於完成通用的操做。如:登陸驗證、統一編碼處理、敏感字符過濾…
  2. 使用步驟:java

    1. 定義一個類,實現接口Filter
    2. 複寫方法
    3. 配置攔截路徑和servlet差很少;方法1:web.xml;方法2: 註解
  3. 代碼示例:web

 1    @WebFilter("/*")//訪問全部資源以前,都會執行該過濾器
2    public class FilterDemo1 implements Filter {
3        @Override
4        public void init(FilterConfig filterConfig) throwsServletException {
5
6        }
7
8        @Override
9        public void doFilter(ServletRequest servletRequest,ServletResponse servletResponse, FilterChain filterChain)throws IOException, ServletException {
10            System.out.println("filterDemo1被執行了....");
11
12
13            //放行
14            filterChain.doFilter(servletRequest,servletResponse);
15
16        }
17
18        @Override
19        public void destroy() {
20
21        }
22    }

filter的一些細節

  1. web.xml配置
1    <filter>
2        <filter-name>demo1</filter-name>
3        <filter-class>cn.demo.web.filter.FilterDemo1<filter-class>
4    </filter>
5    <filter-mapping>
6        <filter-name>demo1</filter-name>
7        <!-- 攔截路徑 -->
8        <url-pattern>/*</url-pattern>
9    </filter-mapping>
  1. 過濾器執行流程設計模式

    1. 執行過濾器
    2. 執行放行後的資源
    3. 回來執行過濾器放行代碼下邊的代碼
  2. 過濾器生命週期方法瀏覽器

    1. init:在服務器啓動後,會建立Filter對象,而後調用init方法。只執行一次。用於加載資源
    2. doFilter:每一次請求被攔截資源時,會執行。執行屢次
    3. destroy:在服務器關閉後,Filter對象被銷燬。若是服務器是正常關閉則會執行destroy方法。只執行一次。用於釋放資源
  3. 過濾器攔截路徑配置服務器

    1. 具體資源路徑: /index.jsp 只有訪問index.jsp資源時,過濾纔會被執行
    2. 攔截目錄: /user/* 訪問/user下的全部資源時,過濾器都會被行
    3. 後綴名攔截: *.jsp 訪問全部後綴名爲jsp資源時,過濾器都會執行
    4. 攔截全部資源:/* 訪問全部資源時,過濾器都會被執行
  4. 過濾器攔截方式配置:可配置多個請求方式app

    • 註解配置設置dispatcherTypes屬性
      REQUEST:默認值。攔截瀏覽器直接請求資源
      FORWARD:攔截轉發訪問的資源
      INCLUDE:攔截包含訪問資源
      ERROR:攔截錯誤跳轉資源
      ASYNC:攔截異步訪問資源
      例如:@WebFilter(value = "/*",dispatcherTypes = DispatcherType.REQUEST)
    • 在 web.xml配置設置dispatcher標籤便可
  5. 過濾器鏈(配置多個過濾器)異步

    • 執行順序:若是有兩個過濾器:過濾器1和過濾器2
      過濾器1——>過濾器2——>資源執行——>過濾器2——>過濾器1
    • 過濾器前後順序問題:
      1.註解配置:按照類名的字符串比較規則比較,值小的先執行;如: AFilter 和 BFilter,AFilter就先執行了。
      2.web.xml配置: filter-mapping標籤誰定義在上邊,誰先執行
  • 加強對象的功能:使用設計模式,即一些通用的解決固定問題的方式
    1. 代理模式基本概念:
      1.真實對象:被代理的對象
      2.代理對象:
      3.代理模式:代理對象代理真實對象,達到加強真實對象功能的目的
    2. 實現方式:
      1. 靜態代理:有一個類文件描述代理模式
      2. 動態代理:在內存中造成代理類;主要的實現步驟:代理對象真實對象實現相同的接口->代理對象 = Proxy.newProxyInstance();->使用代理對象調用方法->加強方法
    • 代理對象加強方式:
      1.加強參數列表
      2.加強返回值類型
      3.加強方法體執行邏輯

Listener:監聽器

  • 概念:事件監聽機制,web的三大組件之一。jsp

  • 事件:一件事情ide

  • 事件源 :事件發生的地方

  • 監聽器 :一個對象

  • 註冊監聽:將事件、事件源、監聽器綁定在一塊兒。 當事件源上發生某個事件後,執行監聽器代碼

  • ServletContextListener:監聽ServletContext對象的建立和銷燬

  • 方法1:void contextDestroyed(ServletContextEvent sce) ,ServletContext對象被銷燬以前會調用該方法

  • 方法2: void contextInitialized(ServletContextEvent sce) ,ServletContext對象建立後會調用該方法

  • 使用步驟:
    1.定義一個類,實現ServletContextListener接口
    2.複寫方法
    3.配置

  • web.xml配置方式

1   <listener>
2    <listener-class>cn.test.web.listener.  ContextLoaderListener</listener-class>
3   </listener>
4   <!-- context-param標籤指定初始化參數 -->
  • 註解配置:@WebListener
相關文章
相關標籤/搜索