tomcat 是开源的 Java Web 应用服务器,核心作用是运行 Servlet 与 JSP 程序,承接 Java 后端项目的请求处理,整套安装配置流程分为环境前置准备,安装包部署,基础参数修改,服务启动验证,防火墙与开机自启配置五大环节,只要提前装好 JDK 并匹配版本,按照步骤完成端口,内存,编码,用户权限等关键项调整,就可以正常对外发布 JavaWeb 项目,同时需要注意 tomcat 版本和 JDK 版本必须兼容,否则会出现启动失败,类加载报错等问题。tomcat 本身依赖 Java 运行环境,它并不是独立运行的软件,所有的启动脚本底层都会调用 JDK,所以如果没有提前部署 JDK,或者 JDK 环境变量配置错误,tomcat 启动脚本执行时就会直接报错退出,版本不兼容也是高频踩坑点,高版本 tomcat 对 JDK 最低版本有硬性要求,比如 tomcat10 及以上要求 JDK11 及以上,tomcat9 支持 JDK8,选错版本会直接无法启动。
一 前置环境准备
1 JDK 安装与环境变量配置
tomcat 运行必须依赖 JDK,优先选择和 tomcat 适配的 JDK 版本,推荐 JDK8 搭配 tomcat9,JDK11 搭配 tomcat10。
1 下载 JDK 安装包,解压或者执行安装程序,记住安装目录,例如 C:Program FilesJavajdk1.8.0_391
2 打开系统环境变量,新建系统变量 JAVA_HOME,变量值填写 JDK 根目录
3 编辑 Path 变量,新增 % JAVA_HOME% bin
4 打开命令提示符,输入 java -version 和 javac -version,两条命令都可以正常输出版本信息,代表 JDK 配置成功
2 版本选择说明
| tomcat 版本 | 最低 JDK 要求 | 适用场景 |
|---|---|---|
| tomcat9 | JDK8 | 传统老项目,SSM 框架项目,生产环境最常用 |
| tomcat10 | JDK11 | Jakarta EE 规范新项目 |
| tomcat10.1 | JDK11 | 长期维护稳定版 |
二 tomcat 安装部署
Windows 系统安装
1 从 Apache 官方站点下载 tomcat 压缩包,分为 zip 免安装版和 exe 安装版,推荐 zip 免安装版,方便多版本切换
2 将压缩包解压到纯英文路径,路径不要包含中文空格特殊字符,例如 D:apache-tomcat-9.0.91
3 打开 tomcat 目录,核心目录说明
bin 存放启动关闭脚本,startup.bat 启动,shutdown.bat 关闭
conf 全部配置文件目录,核心是 server.xml web.xml tomcat-users.xml
webapps 默认项目部署目录,war 包或者项目文件夹放在这里自动部署
logs 运行日志目录
work JSP 编译生成的临时 class 文件
temp 临时文件目录
Linux 系统安装
1 下载 tar.gz 压缩包,使用 wget 或者本地上传到服务器
2 解压 tar zxvf apache-tomcat-9.0.91.tar.gz
3 移动到指定目录 mv apache-tomcat-9.0.91 /usr/local/tomcat
4 给 bin 目录脚本赋予执行权限 chmod +x /usr/local/tomcat/bin/.sh
三 核心配置文件修改
1 server.xml 主配置文件
文件位置 conf/server.xml,这个文件负责端口,连接器,虚拟主机配置
修改默认端口,默认 http 端口是 8080,找到 Connector 标签,修改 port 属性,如果端口被占用,改成其他端口,例如 8081
关键参数说明
port 监听端口
protocol 协议,一般保留 HTTP/1.1
connectionTimeout 连接超时时间,单位毫秒,默认 20000
redirectPort 重定向端口,https 跳转端口
配置虚拟主机 Host,可以实现多域名共用同一个 tomcat,在 Host 标签内增加 Context,指定项目路径,实现项目自定义访问路径
2 tomcat-users.xml 管理后台账号
文件位置 conf/tomcat-users.xml
默认状态下 tomcat 管理后台是禁止访问,需要在这里添加用户和角色
配置示例
保存之后重启 tomcat,就可以访问 manager 后台,用来部署 war 包,查看应用状态
注意 生产环境不建议长期开放 manager 后台,存在安全风险
3 编码配置 解决中文乱码
修改 server.xml 的 Connector,增加 URIEncoding="UTF-8",解决 get 请求中文乱码
修改 conf/web.xml,配置过滤器,统一请求响应编码为 UTF-8
4 JVM 内存优化
Windows 打开 bin/catalina.bat,Linux 打开 bin/shturl.cc/A
增加参数
JAVA_OPTS="-Xms512m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m"
Xms 是初始堆内存,Xmx 是最大堆内存,根据服务器内存大小调整,大项目建议适当调大,避免 OOM 内存溢出
四 启动与验证
Windows 启动
双击 bin/startup.bat,弹出黑色窗口保持运行,不要直接关闭窗口
浏览器访问 http://localhost:8080,出现 tomcat 默认首页代表启动成功
关闭执行 bin/shutdown.bat
Linux 启动
执行 /usr/local/tomcat/bin/startup.sh
查看日志 tail -f /usr/local/tomcat/logs/catalina.out
浏览器访问 服务器 IP 加端口,看到默认首页即为成功
关闭执行 /usr/local/tomcat/bin/shutdown.sh
五 进阶配置
防火墙配置
Linux 服务器需要放行 tomcat 端口,firewalld 或者 iptables 开放 8080 端口,否则外部无法访问
Windows 需要在防火墙入站规则放行对应端口
开机自启配置
Linux 可以编写 systemd 服务文件,注册 tomcat 为系统服务,实现开机自动启动,服务器重启之后 tomcat 自动拉起
Windows 可以使用 nssm 工具,把 tomcat 注册成 windows 系统服务,实现后台常驻运行,不需要保留 cmd 窗口
项目部署方式
方式 1 直接把项目文件夹放入 webapps 目录,自动部署
方式 2 上传 war 包到 webapps,tomcat 自动解压部署
方式 3 在 server.xml 配置 Context,外部目录部署项目,不放在 webapps 内
六 常见故障排查
1 端口占用 启动报端口已经被占用,更换 server.xml 端口,或者杀掉占用端口进程
2 JDK 环境变量失效 启动脚本提示找不到 java,重新检查 JAVA_HOME
3 启动一闪而过 Windows 双击 startup.bat 闪退,打开 cmd 手动执行脚本查看报错信息
4 404 错误 项目没有正确部署,或者访问路径写错
5 500 错误 项目代码异常,查看 logs 日志定位报错堆栈
按照上面完整流程,完成 JDK 准备,tomcat 解压部署,修改 server.xml 端口编码,配置管理账号,调整 JVM 参数,启动验证并且开放防火墙端口,就可以完成 tomcat 的基础生产可用配置,后续可以根据业务需要继续增加虚拟主机,集群,https 证书,访问日志,安全加固等高级配置,日常维护重点关注 logs 日志,定期清理 work 临时文件,避免磁盘占用过高。
【常见问题】
问题 1 tomcat 安装完成之后启动报错,提示找不到 java,是什么原因?
回答 1 这是 tomcat 安装配置里最常见问题,核心原因是 JDK 没有安装,或者 JAVA_HOME 环境变量没有正确配置,tomcat 启动脚本会读取 JAVA_HOME,需要确认 JDK 版本和 tomcat 版本兼容,重新配置系统环境变量之后重启命令窗口,再启动 tomcat。
问题 2 tomcat 安装配置的时候默认 8080 端口被占用,应该怎么修改?
回答 2 打开 tomcat 安装目录 conf 下 server.xml 文件,找到 Connector 标签的 port 属性,把 8080 改成未占用端口,保存文件之后重启 tomcat,同时记得在防火墙放行新修改的端口,外部才可以正常访问 tomcat 服务。
问题 3 tomcat 安装之后访问默认首页正常,但是部署项目出现中文乱码,怎么处理?
回答 3 在 tomcat 安装配置的 server.xml 连接器增加 URIEncoding=UTF-8,同时在 web.xml 配置编码过滤器,统一请求和响应编码,重启 tomcat 之后,get 和 post 请求中文乱码问题就可以解决。
【免责申明】
本 tomcat 安装及配置教程仅作为技术学习参考,不同操作系统,JDK 版本,tomcat 版本实际表现会存在差异,生产环境部署前请在测试环境充分验证,操作涉及服务器权限,端口,安全相关修改,请结合自身业务安全规范执行,因按照本文操作产生的数据损失,业务故障,安全风险等,由操作者自行承担。


