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

Java Servlet API 入門核心教程:從架構原理到核心類實戰詳解

     編輯:Java 程式設計入門

Servlet 核心定位

Servlet 是運行在 Web 容器 (如 Tomcat、Jetty) 中的 Java 組件,由容器負責實例化、初始化、請求分發、銷毀。相比傳統 CGI (進程級、性能差、開發繁瑣),Servlet 具備:

  • 線程級並發模型,輕量高效。
  • 完整 Java 生態支持 (多線程、連接池、框架集成)。
  • 標準化 API (Servlet Spec),跨容器可移植。
  • 豐富生命週期回調 (init、service、destroy)。

開發環境快速搭建

  1. JDK 8+ + Maven/Gradle。
  2. Servlet API 依賴 (provided scope):
    <dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope></dependency>
  3. Web 容器:Tomcat 9/10 (Servlet 4.0/5.0)、Jetty、Undertow。
  4. IDE 創建 Web Application 項目,配置 web.xml 或註解開發。

核心類繼承體系與關鍵方法

1. Servlet 介面 (頂層契約)

  • init(ServletConfig):初始化,僅調用一次,載入配置、建立連接池等昂貴資源。
  • service(ServletRequest, ServletResponse):核心請求處理入口,每請求一線程調用。
  • destroy():銷毀前釋放資源 (關閉連接池、線程池、緩存)。
  • getServletConfig()、getServletInfo()。

2. GenericServlet (抽象基類,協議無關)

  • 實現 Servlet、ServletConfig、Serializable。
  • 提供 getInitParameter()、getServletContext()、log() 等便利方法。
  • 開發者通常繼承其子類 HttpServlet,而非直接繼承 GenericServlet。

3. HttpServlet (HTTP 協議專用,實戰核心)

  • 重寫 service():根據 HTTP Method 分發至 doGet、doPost、doPut、doDelete、doHead、doOptions、doTrace。
  • 核心參數:HttpServletRequest (請求數據、Header、Session、屬性)、HttpServletResponse (狀態碼、Header、輸出流、Cookie)。
  • 常用輔助:getRequestDispatcher() 轉發/包含、sendRedirect() 重定向。

4. 會話管理:HttpSession & Cookie

  • request.getSession() 獲取/創建會話,服務端存儲狀態 (購物車、用戶身份)。
  • Cookie 類:new Cookie(name, value)、setMaxAge(sec)、setPath()、setHttpOnly(true) 防 XSS、setSecure(true) 僅 HTTPS 傳輸。
    響應中添加:response.addCookie(cookie);請求中讀取:request.getCookies()。

Web.xml 核心配置 vs 註解開發 (Servlet 3.0+)

配置項web.xml (傳統)註解 (現代)
Servlet 註冊<servlet><servlet-class>...</servlet>@WebServlet("/url")
URL 映射<servlet-mapping>...</servlet-mapping>@WebServlet(urlPatterns={"/a","/b"})
初始化參數<init-param>...</init-param>@WebInitParam(name="k", value="v")
加載順序<load-on-startup>1</load-on-startup>@WebServlet(loadOnStartup=1)
Filter/Listener<filter>...</filter>@WebFilter / @WebListener

建議:新項目全面採用註解開發,web.xml 僅用於容器級全局配置 (如 JNDI 數據源、安全約束、錯誤頁面)。

最佳實踐檢查清單

  1. 線程安全:Servlet 實例單例多線程共享,**不要**在實例變量中存儲請求級數據,使用局部變量或 ThreadLocal。
  2. 資源管理:init() 初始化連接池/線程池,destroy() 確保關閉,防止內存洩漏。
  3. 異常處理:統一異常攔截 (Filter 或 error-page),返回友好錯誤頁/JSON,記錄完整堆棧。
  4. 輸入驗證:所有參數經過白名單校驗、長度限制、XSS/SQL注入過濾。
  5. 響應設置:明確 setContentType("application/json;charset=UTF-8")、setCharacterEncoding("UTF-8")。
  6. 異步處理 (Servlet 3.0+):長耗時任務 (推送、報表) 使用 request.startAsync() 釋放容器線程,提升吞吐量。

從 Servlet 到 Spring MVC

Spring MVC 的核心 DispatcherServlet 本質是一個 HttpServlet,封裝了參數綁定、視圖解析、異常處理、攔截器鏈等企業級功能。理解 Servlet 原理有助於深度掌握 Spring MVC 運行機制、排查疑難雜症、編寫高性能 Filter/Interceptor。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved