Java-Filter:過濾器請求攔截


1.概念

  • web中的過濾器:當訪問服務器資源時,過濾器可以將請求攔截下來,完成一些特殊的功能
  • 過濾器的作用:
    • 一般用於完成通用的操作,如:登錄驗證,統一編碼處理,敏感字符過濾

2.快速入門

1.步驟

  1. 定義一個類,實現接口filter
  2. 復寫方法
  3. 配置攔截路徑
    1. web.xml
    2. 注解

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. destroy在服務器關閉后,Filter對象被銷毀,如果服務器是正常關閉,則會執行destroy方法
  2. doFilter每一次請求被攔截時執行,執行多次
  3. init在服務器啟動后,會創建Filter對象,然后調用init方法,只執行一次,用於加載資源

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配置
      • 設置dispatcherTypes = {...}即可

5.過濾器鏈(配置多個服務器)

  • 執行順序 過濾器1 過濾器2 執行資源 過濾器2 過濾器1
  • 過濾器先后順序問題
    • 注解配置:按照類名的字符串比較規則比較,值小的先執行
    • web.xml配置: 誰定義在上邊,誰先執行
  • 增強對象的功能
    • 設計模式:一些通用的解決固定問題的方式
    • 裝飾模式
    • 代理模式
    • 概念
      • 真實對象:被代理的對象
      • 代理對象
      • 代理模式:代理對象代理真實對象,達到增強真實對象功能的目的
    • 實現方式
      • 靜態代理
      • 動態代理
      • 實現步驟
        • 代理對象和真實對象實現相同的接口
        • 代理對象=Proxy.newProxyInstance();
        • 使用代理對象調用方法
        • 增強方法
      • 增強方式
      • 增強參數列表
      • 增強返回值類型
      • 增強方法體執行邏輯

Listener:監聽器

  • 概念:web的三大組件之一
  • 事件監聽機制
    • 事件:一件事情
    • 事件源:事件發生的地方
    • 監聽器:一個對象
    • 注冊監聽:將事件,事件源,監聽器綁定在一起,當事件源上發生某個事情后,執行監聽器代碼
  • ServletContextListener:監聽ServletContext對象的創建和銷毀
    • void contextDestroyed(ServletContextEvent sce) :ServletContext對象被銷毀之前會調用該方法
    • void contextInitialized(ServletContextEvent sce) :ServletContext對象被創建之前會調用該方法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM