Servlet 定義
Servlet 是用 Java 編寫的伺服端程式,與協定和平台無關,運行於支援 Java 的 Web 伺服器中。它能動態擴展伺服器能力,採用請求-回應模式提供 Web 服務。最早支援 Servlet 技術的是 JavaSoft 的 Java Web Server,隨後其他基於 Java 的 Web 伺服器開始支援標準 Servlet API。
核心功能與工作流程
Servlet 主要功能在於互動式瀏覽與修改資料、生成動態 Web 內容。流程如下:
- 客戶端發送請求至伺服器;
- 伺服器將請求資訊轉發給 Servlet;
- Servlet 動態生成回應內容並傳回伺服器(內容通常取決於客戶端請求);
- 伺服器將回應返回給客戶端。
Servlet 特點
- 外觀像普通 Java 程式,匯入
javax.servlet 等專用套件。
- 以位元組碼形式動態從網路載入,對伺服器如同 Applet 對客戶端,故稱「無臉物件」(Faceless Object),無圖形使用者介面。
- 可與檔案、資料庫、Applet、Java 應用程式等資源互動生成回應。
- 伺服器可完全授權本地資源存取(如資料庫),Servlet 控制外部使用者存取量與性質。
- 可作為其他服務的客戶端,用於分散式系統,可從本地或遠端硬碟啟動。
- 支援鏈式調用:一個 Servlet 可調用另一個或一系列 Servlet。
- 採用 Servlet Tag 技術,可在 HTML 頁面中動態調用 Servlet。
- API 與協定無關,不假設傳輸協定。
- 擁有 Java 所有優勢:可移植、穩健、易開發。
- 單一實例多線程模型:首次請求啟動,後續請求各生成新線程處理,僅在 Web 伺服器卸載時銷毀。
Servlet 生命週期
- 載入 Servlet:通常動態執行,伺服器也可配置啟動時強制載入初始化。
- 建立實例:伺服器建立 Servlet 實例。
- 調用 init():完成初始化工作。
- 處理請求循環:
- 客戶端請求到達;
- 伺服器建立請求與回應物件;
- 調用 service(request, response);
- service() 取得請求資訊、處理、存取資源、生成回應;
- 可能轉發至 doGet()、doPost() 或自定方法;
- 後續請求重複 a-f 步驟,不再調用 init()。
- 銷毀:伺服器不再需要時(通常關閉時),調用 destroy()。
業界地位
在美國,EJB + Servlet + JSP 已幾乎成為電子商務開發標準。ASP 因微軟專注訴訟與 Win2000 而發展受限;PHP 因模式與先天缺陷,鮮少用於商業站點。