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

深入理解 Java Servlet 與 Web 容器的協作關係

     編輯:J2EE

從 CGI 到 Servlet 的演進

  • CGI (Common Gateway Interface): 每請求啟動一個**作業系統行程**,資源消耗大、併發能力低、平台相依。
  • Servlet: 運行於 Web 容器 **JVM 內部**,每請求啟動一個**執行緒**,輕量、高併發、跨平台。James Gosling 1995 年提出,後隨 Web 應用複雜化而成為標準。

Servlet 與 Web 容器:分工與共生

Servlet 實例化與映射機制

  1. 容器啟動時**不**預先建立 Servlet 實例。
  2. 2. 首次請求到達,容器根據 URL 在 web.xml (或 Servlet 3.0 註解) 找到對應 Servlet 類別。 3. 載入類別、實例化、呼叫 init(),**單一實例**服務所有後續請求。 4. 容器關閉時統一銷毀、呼叫 destroy()。

部署描述檔演進

  • Servlet < 3.0: 僅靠 web.xml 定義 <servlet>/<servlet-mapping>,大型專案 XML 極其龐大。
  • Servlet 3.0+: 支援 @WebServlet、@WebFilter、@WebListener 註解,**web.xml 成為可選**,大幅簡化配置。

JSP 與 Servlet 的關係

JSP 本質是 Servlet:容器將 JSP 編譯為繼承 HttpJspBase 的 Servlet 類別。Servlet 處理邏輯,JSP 處理視圖,兩者分工協作,奠定 MVC 架構基礎,後續框架 (Struts, Spring MVC) 均建構於此。

Web容器與Servlet協作示意圖

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
Web 容器職責Servlet 職責
管理生命週期 (載入、初始化、銷毀)實作業務邏輯 (doGet/doPost)
封裝請求為 HttpServletRequest從 Request 取參數、Session、Header
建立 HttpServletResponse 供輸出設定回應碼、Header、寫入 Body
靜態資源服務、SSL、Session 管理專注動態處理
多執行緒調度、資源池管理無執行緒安全責任 (需自行同步共享資料)