目錄
- Tomcat 基本簡介
- Tomcat 架構組成
- Tomcat 的目錄結構
- Tomcat 的工作原理
- Tomcat 的配置文件
- Tomcat 與其他服務器對比
- Tomcat 使用場景
- Tomcat 與 Spring Boot
- 常見問題與優化
Tomcat(全稱 Apache Tomcat)是由 Apache 軟件基金會開發和維護的一款 開源的 Web 服務器與 Servlet 容器,用于運行基于 Java 的 Web 應用程序。它廣泛應用于中小型企業和開發測試環境中,是學習和部署 Java Web 的首選服務器。
Tomcat 基本簡介
- 開發者:Apache 軟件基金會
- 編程語言:Java
- 最新版本:可參考官網 https://tomcat.apache.org
- 核心功能:
- 支持 Servlet 規范(如 Servlet 4.0)
- 支持 JSP(Java Server Pages)
- 支持 WebSocket
- 支持 HTTP/1.1、HTTP/2 等協議(版本依賴)
Tomcat 實際上是一個輕量級的 Servlet 容器(Servlet Container),它也可以當作 HTTP Web 服務器來使用,但它不是一個完整的 Java EE 應用服務器(如 GlassFish、WildFly)。
Tomcat 架構組成
Tomcat 主要由以下幾個核心組件組成:
- Server
- 表示整個服務器實例,server.xml 配置文件中最頂層的元素。
- Service
- Server 可以包含多個 Service。
- 每個 Service 由 Connector 和 Engine 兩部分組成。
- Connector(連接器)
- 負責與客戶端通信(接收 HTTP 請求,返回響應)。
- 支持協議:HTTP、AJP 等。
- 常見配置:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>
- Engine(引擎)
- 處理 Connector 傳入的請求。
- 屬于 Service 內部組件。
- 包含 Host 容器。
- Host(虛擬主機)
- 每個 Host 表示一個虛擬主機。
- 一個 Host 包含多個 Web 應用(Context)。
- Context(上下文)
- 表示一個 Web 應用,通常對應 webapps 下的一個目錄。
- 每個 Context 對應一個 web.xml 文件。
Tomcat 的目錄結構
apache-tomcat-<version>/
├── bin/ # 啟動與關閉腳本(startup.sh / shutdown.bat)
├── conf/ # 配置文件(server.xml、web.xml 等)
├── lib/ # 所有 Tomcat 運行所需的 jar 包
├── logs/ # 日志文件
├── webapps/ # 默認 Web 應用部署目錄
├── work/ # Servlet/JSP 編譯后的臨時文件
├── temp/ # 臨時文件
Tomcat 的工作原理
- 啟動 Tomcat(執行 bin/startup.sh)
- 初始化配置(加載 server.xml)
- 創建 Connector,監聽端口(如 8080)
- 接收到 HTTP 請求后交給對應 Context
- Servlet 容器處理請求:
- 查找對應 Servlet
- 調用其 service() 方法
- 返回處理結果給客戶端
Tomcat 的配置文件
conf / server.xml
Tomcat 的主配置文件,管理服務、端口、連接器等。conf / web.xml
默認 Web 應用的全局配置文件,比如 MIME 類型映射、默認歡迎頁、錯誤頁面等。conf / context.xml
所有 Web 應用的共享 Context 配置。
Tomcat 與其他服務器對比
服務器 | 類型 | 是否支持 Java EE 完整規范 | 特點 |
---|---|---|---|
Tomcat | Web服務器+Servlet容器 | 否 | 輕量、高性能、易于部署 |
Jetty | Servlet 容器 | 否 | 模塊化、嵌入式應用多 |
GlassFish | Java EE 應用服務器 | 是 | 官方 Java EE 實現,重量級 |
WildFly | Java EE 應用服務器 | 是 | 高性能企業級服務器 |
Tomcat 使用場景
- Java Web 開發與學習
- 輕量級 Web 應用部署
- 微服務架構中的 Servlet 容器嵌入
- 嵌入式服務器(可內嵌到 Spring Boot)
Tomcat 與 Spring Boot
Spring Boot 內置了 Tomcat,默認使用的是 org.apache.catalina.startup.Tomcat
啟動類,實現嵌入式部署:
@SpringBootApplication
public class App {public static void main(String[] args) {SpringApplication.run(App.class, args);}
}
可以通過配置文件指定端口:
server:port: 8081
常見問題與優化
- 啟動慢 / 內存不足
- 優化 JVM 參數(setenv.sh 或 catalina.sh)
- 分析日志查找瓶頸
- 端口占用
- 修改 server.xml 中
- Session 共享問題
- 使用 Redis / 數據庫持久化 session
- 或配置 Tomcat 集群
- JSP 編譯慢
- 預編譯 JSP 或使用更高版本的 JDK