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

Servlet、Filter、Listener、Interceptor 四大組件區別與聯系深度解析

     編輯:Java 綜合教學

Servlet、Filter、Listener、Interceptor 四大組件區別與聯系深度解析

一、 概念辨析

組件定義配置文件
Servlet服務端 Java 程序,處理請求響應,獨立於平台協議web.xml
Filter可復用代碼片段,轉換請求/響應/頭信息,不產生響應web.xml
Listener監聽域對象生命周期/屬性變更事件,自動觸發回調web.xml
InterceptorAOP 實現,攔截 Service/Action 方法前後/異常struts.xml / spring.xml

二、 加載順序

context-param → Listener → Filter → Servlet

三、 職責對比

  • Servlet:生成完整 HTML、HTML 片段、讀取請求數據、調用業務組件、設置響應頭/狀態碼。
  • Filter:請求預處理、修改請求/響應對象、攔截後處理、實現處理鏈(chain.doFilter())。
  • Listener:8 大接口分三類(Context/Session/Request),用於啟動初始化、在線統計、請求級資源清理等。
  • Interceptor:基於動態代理/反射,針對方法級橫切邏輯(事務、日誌、權限),可訪問 ActionContext/ValueStack。

四、 核心區別

  1. 流程控制權:Filter 可決定是否繼續傳遞(chain.doFilter()),Servlet 處理完即結束;Listener 完全事件驅動,不參與請求流程。
  2. 映射匹配:Servlet 採用精確路徑 > 最長路徑 > 擴展名優先級,最終只匹配一個;Filter 可匹配多個形成鏈;Interceptor 針對 Action 名稱/方法。
  3. 依賴容器:Filter/Listener 依賴 Servlet 容器;Interceptor(Struts2/Spring)不依賴容器,框架自行管理。
  4. 訪問上下文:Interceptor 可訪問 ValueStack、Action 上下文;Filter 僅能操作 ServletRequest/Response。
  5. 調用次數:Interceptor 在 Action 生命周期內可多次調用(攔截器棧);Filter 僅在容器初始化/每次請求調用一次。

五、 Struts2 中 Filter 與 Interceptor 關系

  • Struts2 核心入口是 StrutsPrepareAndExecuteFilter(Filter),負責啟動框架、清理 ThreadLocal。
  • Interceptor 棧在 Filter 內部通過 ActionInvocation 執行,屬於框架級攔截。
  • 可視為:Filter 是容器級大門,Interceptor 是框架級細粒度攔截器。

六、 選型建議

  • 編碼轉換、XSS 過濾、靜態資源放行 → Filter
  • 應用啟動加載配置、Session 監控 → Listener
  • 業務權限檢查、事務邊界、方法級日誌 → Interceptor
  • 核心業務流程控制 → Servlet/Controller
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved