首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Servlet 開發必備知識:架構、生命週期、執行緒安全與適用場景

     編輯:Java 相關知識

Servlet 執行於 Web 容器,無 UI,單實例多執行緒模型賦予其高效能優勢。本文系統梳理 Servlet 類別體系、生命週期、HTTP 方法對應、執行緒安全陷阱,並對比 JSP 適用場景。

類別繼承體系

Servlet (interface)
  ↑
GenericServlet (協議無關)
  ↑
HttpServlet (HTTP 專用) ← 我們繼承的基類

生命週期三大方法

方法呼叫時機頻率
init(ServletConfig)Servlet 初始化一次
service(req, resp)每次請求多次
destroy()容器卸載 Servlet一次

HttpServlet 的 service() 會依 HTTP 方法分派到 doGet()/doPost()/doPut()/doDelete() 等。

HTTP 方法與 doXxx() 對應表

  • GET → doGet()
  • POST → doPost()
  • PUT → doPut()
  • DELETE → doDelete()
  • HEAD/TRACE/CONNECT/OPTIONS → 對應 doHead() 等(較少用)

一般只需覆寫 doGet()/doPost();JBuilder 向導可勾選需產生的方法。

執行緒安全: Servlet 最大的坑

Servlet 預設單實例多執行緒:所有請求共用同一個 Servlet 實例。

  • 區域變數(方法內):執行緒安全,各執行緒有獨立堆疊。
  • 成員變數(類別屬性):非執行緒安全,共享狀態會導致競態條件。

原則:除非刻意設計共享狀態,否則不要用成員變數儲存可變資料;必須用時,採用 synchronized、ThreadLocal 或 java.util.concurrent 同步機制。

Servlet vs JSP:何時用哪個?

特性ServletJSP
本質含 HTML 的 Java 程式含 Java 的 HTML 網頁
自動啟動✓ <load-on-startup>✗ 首次請求才編譯初始化
路徑映射✓ 通配符 <url-pattern>✗ 單一固定 URI
過濾器/監聽器✓ 原生支援✗
適合場景業務邏輯重、需預載、框架基礎設施頁面呈現邏輯重、UI 導向

Servlet 四大獨門絕技

  1. 自動啟動:<load-on-startup> 完成啟動初始化(載入字典、啟動後台任務)。
  2. 路徑匹配映射:通配符攔截多重 URI,Struts/Spring MVC 核心基礎。
  3. Servlet 過濾器:請求前/響應後統一處理(編碼轉換、統一頁首尾、權限檢查)。
  4. Servlet 監聽器:監聽 Web 容器事件(啟動/關閉、Session 建立/銷毀、屬性變更)。

決策口訣

「業務邏輯重、需預載、做基建 → Servlet;頁面呈現重、UI 導向 → JSP。」
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved