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

Java Web 服務器端組件詳解:Servlet、Filter、Listener 職責與生命周期

     編輯:Java 綜合教學

Java Web 服務器端組件詳解:Servlet、Filter、Listener 職責與生命周期

一、 Servlet

運行在服務器端的 Java 類,處理客戶請求並生成動態響應。

核心任務

  1. 讀取顯式請求數據(表單參數)
  2. 讀取隱式請求數據(Cookie、Header、Media Type)
  3. 處理業務邏輯生成結果
  4. 發送顯式響應(HTML、JSON 等)
  5. 發送隱式響應(設置 Cookie、Cache-Control)

生命周期

  • init():首次創建時調用(可配置 load-on-startup 提前加載)
  • service():每次請求創建新線程調用,分發至 doGet/doPost 等
  • destroy():容器關閉時調用一次

注意

GET 請求參數長度限制約 1024 字符,大數據請用 POST。

二、 Filter

可復用的攔截組件,在請求到達 Servlet 前/響應返回瀏覽器前進行預處理/後處理,不能直接生成響應。

生命周期

  • 創建:Web 應用啟動時(單實例)
  • init():創建後立即執行一次
  • doFilter():每次攔截執行,鏈式調用 chain.doFilter() 傳遞給下一個
  • destroy():應用卸載前執行一次

URL 映射模式

  • 精確匹配:/target.jsp
  • 前綴匹配:/happy/*
  • 後綴匹配:*.jsp
  • 不可在中間使用通配符(如 /happy/*.jsp)

典型場景

  • 登錄驗證、字符編碼統一、敏感詞過濾(配合 HttpServletRequestWrapper 裝飾者模式)

三、 Listener

監聽 Web 容器中域對象(ServletContext、HttpSession、ServletRequest)的創建/銷毀/屬性變更事件。

核心接口(8 個)

域對象生命周期監聽屬性監聽
ServletContextServletContextListenerServletContextAttributeListener
HttpSessionHttpSessionListenerHttpSessionAttributeListener
ServletRequestServletRequestListenerServletRequestAttributeListener

此外還有 HttpSessionBindingListener(對象綁定/解綁感知)與 HttpSessionActivationListener(鈍化/活化感知)。

應用示例

  • 在線人數統計:實現 HttpSessionBindingListener,綁定時 +1,解綁時 -1。
  • 啟動加載數據源:ServletContextListener 中初始化 DataSource 存入 application 域。

四、 區別總結

組件配置位置核心職責執行流程
Servletweb.xml業務處理、生成響應短流程,處理完結束
Filterweb.xml請求/響應攔截修飾鏈式,可繼續向下傳遞
Listenerweb.xml事件感知、自動觸發事件驅動,非請求鏈路
Interceptorstruts.xml / spring.xmlAOP 橫切關注點針對 Action/方法,非 URL

加載順序: context-param → listener → filter → servlet

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