一、Tomcat 是什么
Apache Tomcat 是由 Apache 软件基金会维护的开源 Servlet 容器,同时也是目前使用最广泛的 Java Web 应用服务器之一。它实现了 Java EE(现 Jakarta EE)规范中的 Servlet、JSP、WebSocket 等核心组件,能够把开发者编写的 Java Web 应用以标准 HTTP 服务的形式对外提供访问。
与 WebLogic、WebSphere 等重量级商业应用服务器相比,Tomcat 体积小、启动快、配置简单,并且完全免费开源,因此成为学习 Java Web 和部署中小型项目的首选容器。
1.1 Tomcat 的核心组成
- Catalina:Servlet 容器,负责解析 HTTP 请求、管理 Servlet 生命周期并完成请求分发,是 Tomcat 的核心模块。
- Coyote:HTTP 连接器,负责监听端口、接收网络请求并转换为统一的内部请求对象。
- Jasper:JSP 引擎,负责把 JSP 页面编译成 Servlet 后交给 Catalina 执行。
- Cluster 与 Realm:分别提供集群会话复制和安全认证能力。
1.2 Tomcat 的典型应用场景
- 部署 Spring Boot、Spring MVC 等 Java Web 项目。
- 作为开发环境中的本地 Web 容器,配合 IDEA、Eclipse 调试。
- 作为 Nginx 或 Apache HTTP Server 的后端应用服务器,承担动态请求处理。
- 学习 Servlet、JSP 规范与 HTTP 协议实践。
1.3 版本与 JDK 的对应关系
选择 Tomcat 版本时,必须关注其支持的 Servlet 规范和最低 JDK 版本,否则会出现启动失败或类加载异常。
| Tomcat 版本 | Servlet 规范 | 最低 JDK 版本 | 说明 |
|---|---|---|---|
| Tomcat 8.5 | Servlet 3.1 | JDK 7 | 兼容性较好,仍被部分老项目使用 |
| Tomcat 9 | Servlet 4.0 | JDK 8 | 支持 HTTP/2,javax 命名空间 |
| Tomcat 10 | Servlet 5.0 | JDK 8 | 包名迁移为 jakarta.*,与旧项目不兼容 |
| Tomcat 11 | Servlet 6.1 | JDK 17 | 面向新版本 Jakarta EE |
提示:如果项目仍使用
javax.servlet包,请选择 Tomcat 9 及以下版本;如果项目已迁移到jakarta.servlet,则应使用 Tomcat 10 及以上版本。
二、安装前的环境准备
2.1 安装 JDK
Tomcat 本身是 Java 程序,运行前必须先安装 JDK 并正确配置 JAVA_HOME。以 JDK 17 为例,安装完成后配置环境变量:
# Linux / macOS,写入 ~/.bashrc 或 ~/.zshrc
export JAVA_HOME=/usr/local/jdk-17
export PATH=$JAVA_HOME/bin:$PATH
REM Windows 系统环境变量
setx JAVA_HOME "C:\Program Files\Java\jdk-17"
setx PATH "%JAVA_HOME%\bin;%PATH%"
配置完成后执行以下命令验证:
java -version
echo $JAVA_HOME
2.2 下载 Tomcat
前往 Apache Tomcat 官方站点下载对应版本的压缩包。Windows 推荐下载 .zip 版本,Linux 与 macOS 推荐下载 .tar.gz 版本。下载时注意选择与 JDK 版本匹配的 Tomcat 主版本。
三、Tomcat 安装与目录结构
3.1 解压安装
# Linux / macOS
tar -zxvf apache-tomcat-9.0.xx.tar.gz -C /usr/local/
mv /usr/local/apache-tomcat-9.0.xx /usr/local/tomcat
REM Windows 直接解压到指定目录,例如 D:\tomcat
3.2 目录结构说明
| 目录 | 作用 |
|---|---|
bin | 启动、停止脚本,如 startup.sh、shutdown.bat |
conf | 配置文件目录,核心为 server.xml、web.xml、context.xml |
lib | Tomcat 运行依赖的公共 JAR 包 |
logs | 运行日志,排查问题的主要依据 |
webapps | 默认的应用部署目录 |
work | JSP 编译后的临时文件,可安全清空 |
temp | 临时文件目录 |
四、启动与验证
4.1 启动 Tomcat
# Linux / macOS
cd /usr/local/tomcat/bin
./startup.sh
REM Windows
cd D:\tomcat\bin
startup.bat
启动成功后,控制台会输出类似 Server startup in [xxxx] milliseconds 的日志。若启动窗口一闪而过,通常是 JAVA_HOME 未正确配置。
4.2 访问默认页面
在浏览器中访问 http://localhost:8080,如果能看到 Tomcat 欢迎页,说明安装成功。点击页面中的 Manager App 还可以进入应用管理界面。
4.3 停止 Tomcat
# Linux / macOS
./shutdown.sh
REM Windows
shutdown.bat
五、核心配置详解
5.1 修改监听端口
默认端口 8080 常被其他程序占用,可在 conf/server.xml 中修改:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
把 port 改为 80 或其他空闲端口后重启即可生效。注意 Linux 下绑定 1024 以下端口需要 root 权限。
5.2 配置应用部署目录
在 conf/server.xml 的 <Host> 节点中,可以通过 appBase 指定应用根目录:
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
</Host>
也可以使用 conf/Catalina/localhost/ 下的独立 XML 文件配置外部目录,避免把应用直接放进 webapps。
5.3 配置虚拟主机
<Host name="www.example.com" appBase="/data/webapps"
unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/data/webapps/demo" reloadable="false" />
</Host>
配置完成后需要在 DNS 或本地 hosts 文件中把域名解析到服务器地址。
5.4 配置访问日志
在 <Host> 节点内添加 Valve,即可记录每次请求:
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="localhost_access_log"
suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
5.5 配置管理用户
如需使用 Manager App 部署应用,需要在 conf/tomcat-users.xml 中增加用户:
<role rolename="manager-gui"/>
<user username="admin" password="admin123" roles="manager-gui"/>
安全提示:生产环境务必修改默认密码,并限制 Manager 页面的访问来源 IP。
六、部署第一个 Web 应用
6.1 目录方式部署
在 webapps 下新建目录 hello,并创建 index.jsp:
<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<body>
<h1>Hello Tomcat</h1>
<p>当前时间:<%= new java.util.Date() %></p>
</body>
</html>
访问 http://localhost:8080/hello/ 即可看到页面内容。
6.2 WAR 包部署
把打包好的 demo.war 复制到 webapps 目录,Tomcat 会自动解压并部署,访问路径为 http://localhost:8080/demo/。
七、常见问题排查
- 端口被占用:使用
netstat -ano | findstr 8080(Windows)或lsof -i:8080(Linux)定位进程,修改端口或结束占用进程。 - 启动报 JAVA_HOME 未设置:检查环境变量是否生效,必要时在
bin/setenv.sh或setenv.bat中显式指定。 - 中文乱码:确认 JSP 页面
pageEncoding、请求编码和server.xml中 Connector 的URIEncoding保持一致。 - 应用部署后 404:检查
webapps下目录名与访问路径是否一致,并查看logs/catalina.out中的部署日志。 - 内存溢出:在
bin/setenv.sh中调整 JVM 参数,例如-Xms512m -Xmx1024m。
八、生产环境优化建议
- 关闭
autoDeploy与unpackWARs,改为手动部署,避免运行期意外重载。 - 删除
webapps下默认的 docs、examples、manager 等示例应用,减少攻击面。 - 使用 Nginx 做反向代理与静态资源处理,Tomcat 只负责动态请求。
- 配置 JVM 堆内存与 GC 参数,并结合监控工具观察线程数与连接数。
- 开启 HTTPS,在 Connector 中配置
SSLEnabled与证书路径。
九、总结
Tomcat 作为轻量级 Servlet 容器,安装配置流程并不复杂:准备匹配版本的 JDK、解压安装包、按需修改 server.xml 与 tomcat-users.xml、启动并验证访问即可。真正需要关注的是版本与 JDK 的兼容性、端口与部署目录的规划,以及生产环境下的安全与性能配置。掌握这些要点后,就可以把 Tomcat 稳定地用于日常开发与中小型项目部署。
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/xyouyuweizhu/article/details/170295119




