Tomcat 是什么?
一、一句话定义
Tomcat 是一个开源的、轻量级的 Java 应用服务器,专门用来运行 Java Servlet、JSP(JavaServer Pages)和 WebSocket 等 Java 技术开发的 Web 应用程序。
通俗地说:Tomcat 就是运行 Java Web 程序的环境,就像 PHP 需要 Apache/Nginx、Python 需要 Gunicorn 一样,Java Web 应用需要 Tomcat 才能运行。
二、核心概念
2.1 Tomcat 的本质
| 维度 | 说明 |
|---|
| 全称 | Apache Tomcat(由 Apache 软件基金会开发) |
| 类型 | Servlet 容器 / Java 应用服务器 |
| 主要功能 | 解析并执行 Java Servlet 和 JSP,处理 HTTP 请求 |
| 开发语言 | Java |
| 开源协议 | Apache License 2.0 |
| 官网 | https://tomcat.apache.org |
2.2 通俗比喻
如果你把 Java Web 应用比作一辆汽车:
- Java 代码 = 汽车的发动机(核心动力)
- Tomcat = 汽车的底盘和轮子(让发动机能跑起来)
- Nginx = 公路和交通指挥(把车引导到正确的目的地)
- 浏览器 = 乘客(最终体验的人)
三、Tomcat 能做什么?
3.1 核心功能
| 功能 | 说明 | 示例 |
|---|
| Servlet 容器 | 解析执行 Servlet 代码 | 处理表单提交、用户登录等业务逻辑 |
| JSP 引擎 | 将 JSP 页面编译成 Servlet 执行 | 动态生成 HTML 页面 |
| HTTP 服务器 | 处理 HTTP 请求和响应 | 接收浏览器请求,返回处理结果 |
| WebSocket 支持 | 支持双向通信 | 实时聊天、消息推送 |
| 类加载器 | 管理 Web 应用的类和依赖 | 每个应用有独立的类加载环境 |
| 会话管理 | 管理用户会话(Session) | 保持用户登录状态 |
3.2 典型的请求处理流程
用户请求 http://example.com/login.jsp
↓
Tomcat 接收请求(Connector 组件)
↓
解析请求,找到对应的 JSP 文件
↓
JSP 引擎将 login.jsp 编译成 Servlet 类
↓
执行 Servlet 中的 Java 代码
↓
访问数据库、处理业务逻辑
↓
生成 HTML 响应
↓
Tomcat 将 HTML 返回给浏览器
四、Tomcat 的架构组件
4.1 核心组件结构
Tomcat 服务器
├── Service(服务)
│ ├── Connector(连接器,处理网络连接)
│ │ ├── HTTP 连接器(处理 HTTP 请求)
│ │ └── AJP 连接器(与 Apache/Nginx 通信)
│ └── Engine(引擎)
│ ├── Host(虚拟主机)
│ │ ├── Context(Web 应用上下文)
│ │ │ └── Wrapper(Servlet 包装器)
│ │ └── Context(另一个 Web 应用)
│ └── Host(另一个虚拟主机)
└── Server 全局配置
4.2 各组件作用
| 组件 | 作用 | 通俗理解 |
|---|
| Server | Tomcat 实例的顶层容器 | 整个 Tomcat 本身 |
| Service | 连接器与引擎的组合 | 一个服务单元 |
| Connector | 接收客户端连接 | 接待员,负责接客 |
| Engine | 处理所有请求的核心引擎 | 总调度中心 |
| Host | 虚拟主机,对应一个域名 | 公司里的不同部门 |
| Context | 一个 Web 应用 | 部门里的具体项目 |
| Wrapper | 单个 Servlet 的包装 | 项目里的具体员工 |
五、Tomcat 与其他 Web 服务器的对比
5.1 功能定位对比
| 服务器 | 类型 | 主要用途 | 擅长领域 |
|---|
| Tomcat | Java 应用服务器 | 运行 Java Web 应用 | Servlet/JSP 动态内容 |
| Nginx | Web 服务器/反向代理 | 静态文件、负载均衡 | 高并发静态资源、反向代理 |
| Apache HTTPD | Web 服务器 | 静态文件、动态模块 | 模块丰富,.htaccess 支持 |
| IIS | Web 服务器 | Windows 平台 | .NET 应用 |
| Jetty | Java 应用服务器 | 嵌入式场景 | 轻量级,适合微服务 |
| Undertow | Java 应用服务器 | 高性能场景 | WildFly 默认,非阻塞 I/O |
5.2 性能对比
静态文件处理速度:
Nginx > Apache > Tomcat
动态内容处理(Java):
Tomcat = Jetty = Undertow(都运行 Java 代码)
并发连接能力:
Nginx > Tomcat > Apache
六、Tomcat 的核心配置文件
| 配置文件 | 位置 | 作用 |
|---|
| server.xml | conf/server.xml | 主配置文件,配置端口、连接器、主机等 |
| web.xml | conf/web.xml | 全局 Web 应用配置,默认 Servlet、MIME 类型 |
| context.xml | conf/context.xml | 全局上下文配置,数据源、JNDI 资源 |
| tomcat-users.xml | conf/tomcat-users.xml | 管理用户权限,配置 Manager 应用访问 |
| logging.properties | conf/logging.properties | 日志配置 |
6.1 server.xml 核心配置示例
<Server port="8005" shutdown="SHUTDOWN">
<Service name="Catalina">
<!-- HTTP 连接器,监听 8080 端口 -->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<!-- AJP 连接器,用于与 Nginx 通信 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<!-- 虚拟主机配置 -->
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context path="/myapp" docBase="/opt/myapp" />
</Host>
</Engine>
</Service>
</Server>
七、Tomcat 的部署方式
7.1 部署 Web 应用的几种方法
| 方式 | 操作方法 | 适用场景 |
|---|
| 直接复制 | 将 WAR 包复制到 webapps/ 目录 | 最常用,自动解压部署 |
| Manager 应用 | 通过 Tomcat Manager 上传部署 | 远程管理,无需服务器权限 |
| 配置 Context | 在 server.xml 中配置 <Context> | 指定外部目录部署 |
| 独立的 Context XML | 在 conf/Catalina/localhost/ 创建 XML | 灵活管理多个应用 |
7.2 目录结构
tomcat/
├── bin/ # 启动/关闭脚本(startup.sh, shutdown.sh)
├── conf/ # 配置文件(server.xml, web.xml)
├── lib/ # Tomcat 和应用的共享库(JAR 包)
├── logs/ # 日志文件(catalina.out, localhost.log)
├── temp/ # 临时文件
├── webapps/ # Web 应用部署目录
│ ├── ROOT/ # 默认应用
│ ├── docs/ # Tomcat 文档
│ ├── examples/ # 示例应用
│ └── manager/ # 管理应用
└── work/ # JSP 编译后的 Servlet 类文件
八、Tomcat 在 Nginx + Tomcat 架构中的角色
结合我们之前讨论的整合架构:
Nginx(反向代理/负载均衡)
↙ ↓ ↘
Tomcat1 Tomcat2 Tomcat3(Tomcat集群)
↓ ↓ ↓
Java Web 应用(业务代码)
↓ ↓ ↓
数据库(MySQL/Redis)
Tomcat 的职责:
- 运行业务代码:执行 Java Servlet/JSP,处理动态业务逻辑
- 保持会话:管理用户登录状态(可配合 Redis 共享)
- 数据库交互:连接数据库,执行 SQL 查询
- 业务计算:处理订单、用户权限等核心业务
Nginx 的职责:
- 静态资源处理:图片、CSS、JS 等
- 负载均衡:分发请求到不同 Tomcat
- SSL 终结:HTTPS 加密解密
- 安全防护:限制访问、防攻击
九、总结
| 问题 | 答案 |
|---|
| Tomcat 是什么? | Java Web 应用服务器,运行 Servlet/JSP 程序的容器 |
| 主要功能? | 解析执行 Java 动态代码,处理 HTTP 请求,返回 HTML 页面 |
| 和 Nginx 什么关系? | Nginx 做反向代理,Tomcat 做业务处理,动静分离 |
| 能单独用吗? | 可以,小项目可单独使用,但大项目建议配合 Nginx |
| 为什么需要它? | Java Web 应用必须运行在 Servlet 容器中,Tomcat 是最流行的选择 |
一句话记忆:Tomcat 是 Java Web 应用的”家”,让 Java 代码能处理浏览器发来的 HTTP 请求,并返回动态生成的网页。
发表回复