Servlet 是 Java Web 技術的基石,運行於伺服器端容器中,以執行緒模型處理 HTTP 請求,產生動態回應。本文系統梳理 Servlet 核心架構、生命週期、與 CGI/Applet/JSP 的本質差異,建立正確技術認知。
javax.servlet.Servlet 介面定義通用契約,HttpServlet 專為 HTTP 協定特化。public interface Servlet {
void init(ServletConfig config) throws ServletException; // 1. 載入後調用一次
void service(ServletRequest req, ServletResponse resp) // 2. 每請求調用
throws ServletException, IOException;
void destroy(); // 3. 卸載前調用一次
ServletConfig getServletConfig();
String getServletInfo();
}
HttpServlet 進一步將 service() 分派為 doGet(), doPost(), doPut(), doDelete() 等對應 HTTP 方法。
| 維度 | 傳統 CGI | Java Servlet | 優勢結論 |
|---|---|---|---|
| 進程模型 | 每請求 fork 新進程 (重量級) | 每請求一執行緒 (輕量級),共享 JVM | Servlet 效能高 10-100 倍 |
| 記憶體 | N 請求 = N 份程式碼載入 | N 請求 = 1 份類別碼 + N 執行緒棧 | Servlet 記憶體佔用極低 |
| 啟動開銷 | 每請求支付進程啟動成本 | 容器啟動時載入,請求零啟動成本 | 高併發下 CGI 癱瘓,Servlet 穩健 |
| 持久連線/連線池 | 極難實現 (進程隔離) | 自然支援資料庫連線池、快取共享 | Servlet 適合企業級應用 |
| 平台移植 | C/Perl/Shell 依賴作業系統 | Write Once, Run Anywhere | Servlet 移植零成本 |
| 開發生產力 | 手工解析 Query String、Header、表單 | API 內建解析、Session、Cookie、上傳 | Servlet 開發效率高 |
| 投資成本 | 免費但維護成本高 | 免費容器 (Tomcat/Jetty) + 免費工具 | Servlet 總擁有成本低 |
| 特性 | Applet | Servlet |
|---|---|---|
| 運行位置 | 客戶端瀏覽器 (需 JVM 外掛) | 伺服器端容器 |
| GUI | AWT/Swing 豐富介面 | 無 GUI,純邏輯 |
| 安全沙箱 | 嚴格限制 (無本地檔案/網路存取) | 伺服器端完全信任,存取資源庫 |
| 部署 | HTML <applet> 標籤,客戶端下載類別 | WAR 部署至容器,客戶端零安裝 |
| 現狀 | 已淘汰 (瀏覽器移除 Java 外掛) | 企業級主流,持續演進 (Jakarta EE) |
_jspService()),無新功能,純粹是「HTML 模板 + Java 片段」的語法糖。${...})、JSTL (<c:forEach>) 存取 Model,零 Java 程式碼片段。service()。ThreadLocal/synchronized/無狀態設計。@Resource, @EJB, @PersistenceContext 注入 DataSource、EJB、EntityManager。web.xml / @ServletSecurity 宣告式安全、角色基礎存取控制 (RBAC)。javax.servlet.* → jakarta.servlet.*。jakarta.websocket) 原生整合。@WebServlet(asyncSupported=true)) + CompletableFuture / Reactive Streams 支援長輪詢、SSE、串流。@MultipartConfig),無需 Commons FileUpload。Servlet 以 輕量執行緒模型、標準化 API、容器管理服務、平台無關性 徹底解決 CGI 效能與開發痛點,確立 Java 伺服器端統治地位。理解 Servlet 本質,是掌握 Spring MVC、Spring WebFlux、JAX-RS、gRPC-Java 等所有上層框架的前提。現代開發雖少直接寫原生 Servlet,但其核心契約 (Request/Response/Filter/Listener/AsyncContext) 仍貫穿整個 Java Web 技術棧。