什麼是 Servlet?
Servlet 是用 Java 編寫的伺服器端程式,具有協議無關、平台無關的特性。它運行於支援 Java 的 Web 伺服器中,能夠動態擴展伺服器功能,並採用「請求-回應」模式提供 Web 服務。最早支援 Servlet 技術的是 JavaSoft 的 Java Web Server,隨後其他基於 Java 的 Web 伺服器也陸續支援標準的 Servlet API。
Servlet 核心運作流程
Servlet 的主要功能在於互動式地瀏覽和修改資料,生成動態 Web 內容。其運作過程如下:
- 客戶端發送請求至伺服器端
- 伺服器將請求資訊傳遞給 Servlet
- Servlet 根據請求動態生成回應內容,並傳回伺服器
- 伺服器將回應返回給客戶端
Servlet 的特性
Servlet 外觀如同一般 Java 程式,但需導入 Java Servlet API 專屬套件。由於是物件位元碼,可動態從網路載入,故 Servlet 對 Server 猶如 Applet 對 Client。但 Servlet 運行於伺服器端,無需圖形使用者介面,因此也被稱為「無臉物件」。
Servlet 的核心優勢
- 資源互動豐富:可與檔案、資料庫、Applet、Java 應用程式等互動,生成回應內容,並能保存請求-回應過程中的資訊
- 資源存取控制:伺服器可完全授權本地資源存取(如資料庫),Servlet 自身控制外部用戶存取數量與性質
- 分散式應用支援:可作為其他服務的客戶端程式,適用於分散式應用系統,可從本地或遠端硬碟啟動
- 鏈式調用:一個 Servlet 可調用另一個或一系列 Servlet,形成鏈式處理
- 標籤技術:可在 HTML 頁面中動態調用 Servlet
- 協議無關性:Servlet API 不對傳輸協議做任何假設
- 繼承 Java 優勢:擁有面向物件、可移植、穩健、易開發等所有 Java 優勢
- 高效能執行緒模型:首次請求啟動後持續駐留記憶體,每個請求產生新執行緒而非新進程,多客戶可在同一進程中並行服務,僅在 Web Server 卸載時銷毀
Servlet 生命週期詳解
- 載入 Servlet:通常動態執行,伺服器亦可配置啟動時強制載入初始化特定 Servlet
- 建立實例:伺服器建立 Servlet 實例
- 初始化:呼叫
init() 方法
- 處理請求循環:
- 客戶端請求到達
- 建立請求物件與回應物件
- 呼叫
service() 方法,傳入請求/回應物件
service() 解析請求、存取資源、處理邏輯
- 透過回應物件輸出結果,可能轉呼叫
doGet()、doPost() 或自訂方法
- 後續請求複用同一實例,重複上述循環,不再呼叫
init()
- 銷毀:伺服器不再需要時(通常關閉時),呼叫
destroy() 方法
行業地位
在美國,EJB + Servlet + JSP 已幾乎成為電子商務開發標準。ASP 因微軟策略調整發展受限,PHP 因架構缺陷在商業站點極少採用。