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

Servlet 基礎完整指南:生命週期、工作模式、與 JSP 比較、核心 API 與配置實戰

     編輯:Java 綜合教學

什麼是 Servlet?

Servlet (Server Applet) 是運行在支援 Java 的應用伺服器上的伺服器端程式,主要功能:交互式瀏覽/修改資料、生成動態 Web 內容。狹義指實現 javax.servlet.Servlet 介面的類,廣義指任何實現該介面的類。

生命週期 (核心考點)

  1. 載入類:容器載入 Servlet 類到記憶體
  2. 實例化:建立 Servlet 實例 (預設單例)
  3. 初始化:呼叫 init(ServletConfig config),僅執行一次
  4. 服務請求:呼叫 service(ServletRequest, ServletResponse),每請求一次執行一次
    • HTTP 請求會分派至 doGet、doPost、doPut、doDelete、doHead、doOptions、doTrace
  5. 銷毀:容器關閉/重新部署時呼叫 destroy(),釋放資源

關鍵特性:單例多執行緒

  • 容器通常只建立 **一個 Servlet 實例**
  • 多執行緒並發呼叫 service()
  • 線程安全責任在開發者:避免使用實例變數儲存請求狀態,改用區域變數或 ThreadLocal

工作模式

Client (瀏覽器) 
    │ HTTP Request
    ▼
Web Server (Tomcat/Jetty)
    │ 解析請求、建立 Request/Response 物件
    ▼
Servlet Container
    │ 找到對應 Servlet、確保已初始化
    ▼
Servlet.service(req, resp)
    │ 業務邏輯、資料庫操作、生成回應
    ▼
Web Server
    │ 封裝 HTTP Response
    ▼
Client
    │ 渲染顯示

Servlet vs JSP 深度比較

SUN 官方演進建議

  1. 早期:Servlet 獨大 (HTML 生成痛苦)
  2. 中期:JSP + JavaBean (邏輯仍混雜在 JSP)
  3. 成熟:JSP (View) + Servlet (Controller) + JavaBean/EJB (Model) = MVC Model 2
  4. 現代:Spring MVC / Spring Boot (註解式 Controller) + Thymeleaf/FreeMarker/前端框架

核心 API 速查

維度ServletJSP
本質Java 類最終編譯為 Servlet 類
HTML 生成out.println("...") 痛苦直接寫 HTML 標籤,極其方便
業務邏輯適合寫複雜業務邏輯 (Controller)不適合大量 Java 代碼 (View)
分工控制層、業務層表現層
MVC 角色ControllerView
修改 HTML需重新編譯 Java 檔修改 JSP 即時生效 (開發模式)
介面/類核心方法用途
HttpServletRequestgetParameter, getHeader, getSession, getAttribute, getInputStream獲取請求資訊、表單數據、Session、屬性、請求體
HttpServletResponsesetContentType, setStatus, addHeader, getWriter, getOutputStream設定回應類型、狀態碼、頭、輸出文字/二進制
HttpSessiongetAttribute, setAttribute, invalidate, getId會話層級資料共享
ServletContextgetInitParameter, getAttribute, setAttribute, getResourceAsStream應用層級全域配置/資源
ServletConfiggetInitParameter, getServletName, getServletContext單一 Servlet 初始化參數

完整 Hello World 實戰

1. Servlet 類

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
            throws ServletException, IOException {
        resp.setContentType("text/html;charset=UTF-8");
        PrintWriter out = resp.getWriter();
        out.println("

歡迎來到 Servlet 世界!

"); out.println("

當前時間: " + new java.util.Date() + "

"); } }

2. web.xml 配置 (Servlet 3.0+ 可用 @WebServlet 註解替代)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://xmlns.jcp.org/xml/ns/javaee" version="3.1">
    <servlet>
        <servlet-name>MyServlet</servlet-name>
        <servlet-class>com.example.MyServlet</servlet-class>
        <load-on-startup>1</load-on-startup> <!-- 啟動時初始化,數值越小優先級越高 -->
    </servlet>
    <servlet-mapping>
        <servlet-name>MyServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
    
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

3. 註解式配置 (Servlet 3.0+ 推薦)

@WebServlet(
    name = "MyServlet",
    urlPatterns = {"/hello", "/hi"},
    loadOnStartup = 1,
    initParams = {
        @WebInitParam(name = "author", value = "ZhangSan"),
        @WebInitParam(name = "version", value = "1.0")
    }
)
public class MyServlet extends HttpServlet { ... }

三大進階用途

  1. 控制器 (MVC Controller):接收請求、參數驗證、呼叫 Service、選擇 View、屬性傳遞
  2. 過濾器:@WebFilter 實現登入檢查、編碼設定、日誌記錄、XSS 防護、靜態資源快取
  3. 監聽器:@WebListener 監聽 ServletContext (應用啟動/銷毀)、HttpSession (建立/銷毀/屬性變更)、ServletRequest 等生命週期事件

部署與除錯技巧

  • 打包為 WAR 檔部署至 webapps
  • 開發模式啟用熱部署 (Tomcat reloadable="true" 或 IDE 支援)
  • 查看 catalina.out / localhost.yyyy-mm-dd.log 排查錯誤
  • 使用 curl -v / Postman 測試 API
  • 遠端除錯:JVM 參數 -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved