1. 背景
Apache Tomcat 是一个开源的 Java Servlet 容器,由 Apache 软件基金会(ASF) 开发和维护,最初由 Sun Microsystems 的软件架构师 James Duncan Davidson 设计,并贡献给 Apache 基金会。
Tomcat 主要用于运行 Java Web 应用程序,支持 Servlet、JSP(JavaServer Pages)、WebSocket 等技术,并提供了 HTTP/1.1 和 HTTP/2 协议支持。它既可以作为 独立的 Web 服务器,也可以与 Apache HTTP Server 等搭配使用,形成 动静分离 的架构(Apache 处理静态内容,Tomcat 处理动态 Java 内容)。
Tomcat 的 Logo 是一只公猫(Tomcat),寓意其独立、自主的特性,就像公猫一样不需要依赖其他大型服务器也能运行。
2. Tomcat 的优势
(1)轻量级 & 易部署
- 相比 商业应用服务器(如 WebLogic、WebSphere、JBoss),Tomcat 更轻量、更简单,适合 中小型项目 和 开发测试环境。
- 无需复杂的配置,解压即用,支持 热部署(WAR 文件无需重启即可更新)。
(2)开源免费
- 完全免费,遵循 Apache 2.0 许可证,可以自由用于 商业或个人项目。
- 社区活跃,遇到问题容易找到解决方案,官方文档完善。
(3)支持标准 Java Web 技术
- Servlet & JSP:Tomcat 是 Servlet 容器,专门优化了 Java Web 应用的运行环境。
- WebSocket:支持 实时通信(如聊天应用、股票行情推送)。
- HTTP/1.1 & HTTP/2:提供 高性能的 Web 通信。
(4)可扩展 & 可嵌入
- 支持嵌入式模式,可以 不依赖独立服务器,直接在 Java 应用中运行(如 Spring Boot 内嵌 Tomcat)。
- 支持 Valve(阀门)机制,可以 自定义请求处理逻辑(如日志、安全过滤)。
(5)高可用 & 集群支持
- 支持 集群部署,可以实现 负载均衡 和 会话复制(Session Replication)。
- 适用于 生产环境,能够处理 高并发请求。
3. Tomcat 的目录结构
Tomcat 解压后包含多个重要目录,每个目录都有特定用途(参考 材料1、5、9、12):
目录 | 说明 |
---|---|
bin | 命令中心,存放启动/关闭脚本(startup.sh 、shutdown.sh 、catalina.sh ),以及 JVM 内存配置(如 setenv.sh )。Windows: .bat 文件;Linux:.sh 文件。 |
conf | 配置中心,存放 Tomcat 的核心配置文件: - server.xml (核心配置,定义端口、连接器、虚拟主机等)- web.xml (全局 Web 应用配置,如 MIME 类型)- context.xml (应用上下文配置,如数据源)- tomcat-users.xml (用户权限管理,用于 Tomcat Manager) |
lib | Tomcat 的库文件,存放 Tomcat 运行所需的 JAR 包(如 Servlet API)。 注意:如果放在这里,所有 Web 应用都能访问这些 JAR。 |
logs | 日志文件,记录 Tomcat 运行日志: - catalina.out (Linux 控制台日志)- catalina.xxxx-xx-xx.log (Windows 控制台日志)- localhost.xxxx-xx-xx.log (应用日志) |
temp | 临时文件,存放 Tomcat 运行时生成的临时文件(如 JSP 编译缓存),可安全删除。 |
webapps | Web 应用部署目录,存放 WAR 包、文件夹或 JAR 包,Tomcat 启动时会自动加载。 - 直接放入 .war 文件会自动解压部署。- ROOT 是默认项目(访问 http://localhost:8080 即可看到)。 |
work | JSP 编译后的 Class 文件,存放 Tomcat 运行时生成的 编译缓存(如 JSP → Servlet)。 清空 work 目录可清除 JSP 缓存。 |
关键文件详解(参考材料5、9):
-
server.xml
:定义 Connector(连接器,如 8080 端口)、Engine(引擎)、Host(虚拟主机)。 -
web.xml
:定义 Servlet、Filter、Listener 等 Web 组件。 -
tomcat-users.xml
:配置 Tomcat Manager 用户(用于管理应用部署)。
4. Tomcat 的版本介绍
Tomcat 版本随着 Java EE / Jakarta EE 规范 的演进而更新(参考 材料2、6、10):
版本 | 发布时间 | 支持的 Java EE / Jakarta EE 规范 | 主要特性 | 现状 |
---|---|---|---|---|
Tomcat 6 | 2007 | Java EE 5(Servlet 2.5, JSP 2.1) | 稳定但老旧,官方已停止支持 | 仅遗留系统使用 |
Tomcat 7 | 2010 | Java EE 6(Servlet 3.0, JSP 2.2) | 支持 异步 Servlet、注解 | 部分企业仍在使用 |
Tomcat 8 | 2014 | Java EE 7(Servlet 3.1, JSP 2.3) | 支持 WebSocket、HTTP/1.1 优化 | 广泛使用 |
Tomcat 9 | 2018 | Jakarta EE 8(Servlet 4.0, JSP 2.3) | 支持 HTTP/2 | 稳定推荐版本 |
Tomcat 10 | 2020 | Jakarta EE 9+(包名从 javax.* 改为 jakarta.* ) |
Servlet 5.0, JSP 3.0, WebSocket 2.0 | 最新版本,但需兼容性调整 |
版本选择建议:
- 新手/学习:推荐 Tomcat 9 或 10(长期支持 LTS)。
- 企业生产:Tomcat 8.5+ 或 9(稳定、兼容性好)。
- 最新技术:Tomcat 10(但需注意
javax
→jakarta
包名变更)。
5. Tomcat 的市场占比
- 全球超过 60% 的 Java Web 应用部署在 Tomcat 上(参考 材料2、7)。
- 在 网站排名前 1,000,000 的网站中,56.6% 使用 Apache HTTP Server,但许多搭配 Tomcat 运行 Java 应用(参考 材料7)。
- Spring Boot 默认内嵌 Tomcat,进一步推动其市场份额(参考 材料3、11)。
对比其他 Java 服务器(参考材料2):
服务器 | 定位 | 体积 | 启动速度 | 适用场景 |
---|---|---|---|---|
Tomcat | 轻量级 Servlet 容器 | ~100MB | 较快 | 中小型 Java Web 应用 |
Jetty | 嵌入式轻量级 | ~20MB | 极快 | 微服务、嵌入式 |
WildFly/JBoss | 全功能 Java EE | ~1GB | 较慢 | 复杂企业级应用 |
WebLogic | 商业级 Java EE | ~2GB | 慢 | 大型商业系统 |
6. 未来展望
- HTTP/3 支持(降低延迟,提升高并发性能)。
- 云原生 & Kubernetes 优化(如 Operator 自动化部署)。
- 更强的安全机制(TLS 1.3、WAF 集成)。
- GraalVM 原生镜像支持(提升启动速度)。
7. 总结
方面 | Tomcat 的特点 |
---|---|
定位 | 轻量级 Java Web 服务器 & Servlet 容器 |
优势 | 开源免费、易部署、支持 Servlet/JSP/WebSocket、可嵌入 |
目录结构 | bin (命令)、conf (配置)、webapps (应用)、logs (日志)、work (缓存) |
版本 | Tomcat 9/10 最主流,Tomcat 10 采用 jakarta.* 包名 |
市场占比 | 全球 60%+ Java Web 应用使用 Tomcat |
未来 | HTTP/3、云原生、安全增强 |