首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

深入解析 Servlet 過濾器:核心概念、生命週期與實戰應用

     編輯:Java 綜合教學

Servlet 過濾器核心概念

Servlet 過濾器是一種實現了 javax.servlet.Filter 介面的 Java 類別,主要用於攔截客戶端請求與伺服器回應,實現請求預處理、回應後處理等横切關注點。常見應用場景包含字元編碼統一、登入驗證、日誌記錄、敏感詞過濾、資料壓縮等。

工作原理與生命週期

過濾器由 Web 容器負責實例化與管理,其生命週期包含三個關鍵階段:

  • 初始化:容器啟動時建立單一實例,呼叫 init(FilterConfig) 讀取 web.xml 配置參數。
  • 過濾處理:每個匹配請求觸發 doFilter(ServletRequest, ServletResponse, FilterChain),透過 chain.doFilter() 傳遞給下一個過濾器或目標資源。
  • 銷毀:容器關閉前呼叫 destroy() 釋放資源。

圖解展示了請求通過過濾器鏈的完整流程,以及 Dispatcher 模式(REQUEST、FORWARD、INCLUDE、ERROR、ASYNC)對攔截範圍的影響。

配置方式

傳統 web.xml 配置

<filter>
  <filter-name>encoding</filter-name>
  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  <init-param>
    <param-name>encoding</param-name>
    <param-value>utf-8</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>encoding</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

自定義過濾器範例

<filter>
  <filter-name>userFilter</filter-name>
  <filter-class>com.wx.login.filter.UserFilter</filter-class>
  <init-param>
    <param-name>Site</param-name>
    <param-value>菜鳥網絡</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>userFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

現代註解式開發:@WebFilter

Servlet 3.0+ 支援使用 @WebFilter 註解直接在類別上宣告過濾器,屬性包含 filterName、urlPatterns、initParams、dispatcherTypes 等,容器部署時自動掃描註冊,無需 XML 配置。

過濾器鏈執行機制

多個過濾器按 filter-mapping 定義順序形成鏈,請求依次通過各 doFilter 前置邏輯,到達目標資源後,回應再依逆序通過各 doFilter 後置邏輯。圖示清晰展示了「疊床架屋」式的調用堆疊。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved