運行在服務器端的 Java 類,處理客戶請求並生成動態響應。
init():首次創建時調用(可配置 load-on-startup 提前加載)service():每次請求創建新線程調用,分發至 doGet/doPost 等destroy():容器關閉時調用一次GET 請求參數長度限制約 1024 字符,大數據請用 POST。
可復用的攔截組件,在請求到達 Servlet 前/響應返回瀏覽器前進行預處理/後處理,不能直接生成響應。
init():創建後立即執行一次doFilter():每次攔截執行,鏈式調用 chain.doFilter() 傳遞給下一個destroy():應用卸載前執行一次/target.jsp/happy/**.jsp/happy/*.jsp)HttpServletRequestWrapper 裝飾者模式)監聽 Web 容器中域對象(ServletContext、HttpSession、ServletRequest)的創建/銷毀/屬性變更事件。
| 域對象 | 生命周期監聽 | 屬性監聽 |
|---|---|---|
| ServletContext | ServletContextListener | ServletContextAttributeListener |
| HttpSession | HttpSessionListener | HttpSessionAttributeListener |
| ServletRequest | ServletRequestListener | ServletRequestAttributeListener |
此外還有 HttpSessionBindingListener(對象綁定/解綁感知)與 HttpSessionActivationListener(鈍化/活化感知)。
HttpSessionBindingListener,綁定時 +1,解綁時 -1。ServletContextListener 中初始化 DataSource 存入 application 域。| 組件 | 配置位置 | 核心職責 | 執行流程 |
|---|---|---|---|
| Servlet | web.xml | 業務處理、生成響應 | 短流程,處理完結束 |
| Filter | web.xml | 請求/響應攔截修飾 | 鏈式,可繼續向下傳遞 |
| Listener | web.xml | 事件感知、自動觸發 | 事件驅動,非請求鏈路 |
| Interceptor | struts.xml / spring.xml | AOP 橫切關注點 | 針對 Action/方法,非 URL |
加載順序: context-param → listener → filter → servlet