從 CGI 到 Servlet 的演進
- CGI (Common Gateway Interface): 每請求啟動一個**作業系統行程**,資源消耗大、併發能力低、平台相依。
- Servlet: 運行於 Web 容器 **JVM 內部**,每請求啟動一個**執行緒**,輕量、高併發、跨平台。James Gosling 1995 年提出,後隨 Web 應用複雜化而成為標準。
Servlet 與 Web 容器:分工與共生
| Web 容器職責 | Servlet 職責 |
| 管理生命週期 (載入、初始化、銷毀) | 實作業務邏輯 (doGet/doPost) |
封裝請求為 HttpServletRequest | 從 Request 取參數、Session、Header |
建立 HttpServletResponse 供輸出 | 設定回應碼、Header、寫入 Body |
| 靜態資源服務、SSL、Session 管理 | 專注動態處理 |
| 多執行緒調度、資源池管理 | 無執行緒安全責任 (需自行同步共享資料) |
Servlet 實例化與映射機制
- 容器啟動時**不**預先建立 Servlet 實例。
2. 首次請求到達,容器根據 URL 在 web.xml (或 Servlet 3.0 註解) 找到對應 Servlet 類別。
3. 載入類別、實例化、呼叫 init(),**單一實例**服務所有後續請求。
4. 容器關閉時統一銷毀、呼叫 destroy()。
部署描述檔演進
- Servlet < 3.0: 僅靠
web.xml 定義 <servlet>/<servlet-mapping>,大型專案 XML 極其龐大。
- Servlet 3.0+: 支援
@WebServlet、@WebFilter、@WebListener 註解,**web.xml 成為可選**,大幅簡化配置。
JSP 與 Servlet 的關係
JSP 本質是 Servlet:容器將 JSP 編譯為繼承 HttpJspBase 的 Servlet 類別。Servlet 處理邏輯,JSP 處理視圖,兩者分工協作,奠定 MVC 架構基礎,後續框架 (Struts, Spring MVC) 均建構於此。

- 上一篇文章: Java EE 6 數據源定義新範式:註解與部署描述符雙軌制
- 下一篇文章: Tomcat 7 實測:Servlet 3.0 註解式部署零 web.xml 體驗
Copyright ©
程式碼之家 All Rights Reserved