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

Servlet 進階 API 實戰:ServletConfig、ServletContext、監聽器、過濾器、包裝器與非同步處理

     編輯:Java 相關知識

1. Servlet 初始化與 ServletConfig

  • 容器啟動 → 讀取配置 → 實例化 Servlet → 建立 ServletConfig (含初始參數) → 呼叫 init(config)。
  • GenericServlet 已封裝 ServletConfig,提供 getInitParameter() 等便利方法。
  • 重寫無參 init() 而非有參版本,避免忘記 super.init(config)。

2. ServletContext (應用程式上下文)

  • 每個 Web 應用一個 ServletContext,可跨 Servlet 共享資料。
  • 常用:getRequestDispatcher("/path") (路徑必須以 / 開頭)、getResourceAsStream() 讀取資源檔、setAttribute/getAttribute 全域共享。
  • 應用初始參數在 web.xml 設定 <context-param>,配合 ServletContextListener 初始化資源。

3. 八大監聽器分類

監聽器介面監聽事件典型用途
ServletContextListener應用啟動/銷毀載入配置、初始化連線池、啟動排程
ServletContextAttributeListener屬性增/刪/改審計、快取同步
HttpSessionListenerSession 建立/失效在線人數統計、Session 資料清理
HttpSessionAttributeListenerSession 屬性變更同步 Session 資料至叢集
HttpSessionBindingListener物件綁定/解綁 Session實作於值物件自身,感知生命週期
HttpSessionActivationListenerSession 鈍化/活化 (分布式)叢集環境 Session 遷移處理
ServletRequestListener請求開始/結束請求耗時統計、ThreadLocal 清理
ServletRequestAttributeListener請求屬性變更除錯、日誌記錄

4. 過濾器

  • 實作 Filter,配置 @WebFilter 或 web.xml。
  • 生命週期:init → 多次 doFilter → destroy。
  • doFilter(req, res, chain):前置處理 → chain.doFilter(req, res) (放行) → 後置處理。
  • 若不呼叫 chain.doFilter 即為**攔截** (如權限檢查失敗直接重定向)。
  • 支援 dispatcherTypes 區分 REQUEST/FORWARD/INCLUDE/ERROR/ASYNC。

5. 請求/回應包裝器

  • HttpServletRequestWrapper:解決請求體多次讀取、統一編碼、參數過濾 (如 XSS 過濾)。
  • HttpServletResponseWrapper:響應壓縮 (GZIP)、自訂輸出流。

6. 非同步處理

  • Servlet 3.0+:request.startAsync() 返回 AsyncContext,釋放容器執行緒。
  • 適用:長耗時操作 (報表生成、遠端呼叫)、推送技術 (Comet/WebSocket 前身)。
  • 流程:啟動非同步 → 交給業務執行緒池處理 → 完成後 asyncContext.complete() 或 dispatch()。
  • 前置過濾器也需標註 asyncSupported=true。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved