Servlet 是以 Java 撰寫、運行於支援 Java 的 Web 伺服器內部的伺服器端程式。它獨立於通訊協定與平台,採用請求-回應模式提供動態 Web 服務。簡單來說,Servlet 對伺服器端就像 Applet 對客戶端,但無圖形介面,故又稱「無臉物件」。
運作流程
- 客戶端發送 HTTP 請求至 Web 伺服器。
- 伺服器將請求封裝為
ServletRequest,轉交 Servlet。
- Servlet 處理邏輯,動態生成回應內容(通常視請求而定)。
- 伺服器將
ServletResponse 送回客戶端。
主要優勢
- 資源整合能力強:可與檔案、資料庫、Applet、Java 應用程式互動,並能保存請求間的狀態資訊。
- 安全可控:伺服器可授權本地資源存取,Servlet 自行管控外部訪問權限。
- 分散式架構支援:Servlet 可作為其他服務的客戶端,參與分散式系統,支援本地或遠端啟動。
- 鏈式呼叫:Servlet 可串聯呼叫,形成處理管線。
- 標籤技術:透過 Servlet Tag 在靜態 HTML 中動態嵌入內容。
- 協定獨立:API 不預設傳輸協定,擴展性極佳。
- 繼承 Java 優勢:可移植、健壯、易開發,擁有完整的物件導向特性。
- 高效能執行緒模型:首次請求初始化後長駐背景,後續請求以執行緒處理,多用戶共享單一進程,僅在伺服器卸載時銷毀。
生命週期
- 載入與實例化:伺服器載入類別、建立實例。
- 初始化
init():僅執行一次,載入驅動、初始化資源。
- 服務
service():每請求呼叫一次,建立 Request/Response 物件,派發至 doGet()/doPost() 等。
- 銷毀
destroy():伺服器關閉或回收資源前呼叫,釋放連線、執行緒等。
行業地位
在美國,EJB + Servlet + JSP 已成為電子商務開發的事實標準。ASP 因微軟策略轉向而發展受限,PHP 因架構缺陷難勝商業級應用。Servlet 技術堆疊以其成熟度與生態系,穩佔主流地位。