
🌸你好呀!我是断弦承露
🌟感谢陪伴~ 小白博主在线求友
🌿 跟着小白学/Java/软件设计/鸿蒙开发/芯片开发
📖专栏汇总:
《软件设计师》专栏 | 《Java》专栏 | 《 RISC-V 处理器实战》专栏 | 《Flutter鸿蒙实战》专栏 | 《React Native开发》专栏 ------|CSDN|------

文章目录
- [Tomcat 9 下载后使用全指南:解压、环境配置、启动验证与常见问题排查](#Tomcat 9 下载后使用全指南:解压、环境配置、启动验证与常见问题排查)
-
- [📂 一、解压规范与目录结构](#📂 一、解压规范与目录结构)
-
- [1.1 解压注意事项(新手第一大坑)](#1.1 解压注意事项(新手第一大坑))
- [1.2 根目录核心结构说明](#1.2 根目录核心结构说明)
- [☕ 二、前置检查:Java环境配置](#☕ 二、前置检查:Java环境配置)
-
- [2.1 验证Java运行环境](#2.1 验证Java运行环境)
- [2.2 确认JAVA_HOME环境变量](#2.2 确认JAVA_HOME环境变量)
- [🚀 三、启动Tomcat服务](#🚀 三、启动Tomcat服务)
-
- 启动流程总览
- [3.1 Windows系统启动](#3.1 Windows系统启动)
- [3.2 Linux / macOS系统启动](#3.2 Linux / macOS系统启动)
- [✅ 四、验证服务正常运行](#✅ 四、验证服务正常运行)
- [🛠️ 五、基础常用操作](#🛠️ 五、基础常用操作)
-
- [5.1 部署Web应用](#5.1 部署Web应用)
- [5.2 修改默认端口](#5.2 修改默认端口)
- [5.3 管理应用配置(manager/host-manager)](#5.3 管理应用配置(manager/host-manager))
- [5.4 停止服务](#5.4 停止服务)
- [❗ 六、新手高频启动报错排查](#❗ 六、新手高频启动报错排查)
- [💬 七、常见疑问解答](#💬 七、常见疑问解答)

Tomcat 9 下载后使用全指南:解压、环境配置、启动验证与常见问题排查
📂 一、解压规范与目录结构
1.1 解压注意事项(新手第一大坑)
解压前务必遵守路径纯英文、无空格、无特殊字符的原则。
- 错误示例:
C:\下载\Tomcat 9\、D:\程序文件\apache-tomcat\ - 推荐示例:
D:\apache-tomcat-9.0.121、/opt/apache-tomcat-9.0.121
原因说明:Tomcat 核心代码本身支持中文路径,但Windows批处理脚本对带空格、中文的路径解析容易出错,Tomcat Native原生组件、部分第三方Web应用也可能出现路径编码问题。新手阶段强烈建议规避,减少无意义的排查成本。
1.2 根目录核心结构说明

解压后根目录下的7个核心文件夹各司其职,新手先记住这几个即可:
| 目录名 | 作用说明 |
|---|---|
| bin | 存放启动、停止等可执行脚本。.bat后缀为Windows系统脚本,.sh后缀为Linux/macOS系统脚本。核心执行逻辑在catalina.bat/catalina.sh中,startup/shutdown只是入口脚本。 |
| conf | 全局配置目录,端口号、用户权限、连接池、虚拟主机等所有核心配置都在这个目录修改。 |
| lib | Tomcat运行依赖的全部Jar包,Tomcat自身的类库和Web应用共享的公共库都存放在这里。 |
| logs | 日志目录,启动日志、运行日志、错误日志、访问日志都会输出到这里,排查问题优先看这个目录。 |
| temp | 临时文件目录,Tomcat运行过程中生成的临时文件(如上传缓存、解压文件)会存放在这里。 |
| webapps | Web应用部署目录,把项目放到这个目录下,Tomcat会自动检测并加载。 |
| work | JSP编译缓存目录,JSP页面会先被Jasper引擎编译成Servlet,生成的class文件存放在这里。 |
补充:webapps目录默认自带5个文件夹:
ROOT:默认根应用,访问localhost:8080时默认加载的就是这个目录的内容docs:Tomcat官方文档的本地Web版examples:Servlet/JSP官方示例manager:应用管理后台(默认需配置用户才能访问)host-manager:虚拟主机管理后台
☕ 二、前置检查:Java环境配置
Tomcat是纯Java实现的程序,必须依赖Java运行环境。JAVA_HOME配置错误是新手启动失败的头号原因 ,注意:java命令能正常运行,不代表JAVA_HOME配置正确。
2.1 验证Java运行环境
打开系统终端(Windows用CMD/PowerShell,Linux/macOS用终端),输入命令:
java -version
能正常输出版本信息,且版本在Java 8及以上,说明系统PATH中配置了Java可执行程序。
⚠️ 重要提醒:这一步只能证明Java命令可用,不能证明Tomcat能正常启动。Tomcat的启动脚本不会只依赖PATH查找Java,而是优先读取
JAVA_HOME环境变量。
2.2 确认JAVA_HOME环境变量
Tomcat启动脚本会优先读取系统的JAVA_HOME变量,以此定位Java运行环境。变量必须指向JDK或JRE的根目录,不能指向bin目录。
检查命令:
-
Windows系统:
echo %JAVA_HOME%
-
Linux/macOS系统:
echo $JAVA_HOME
常见坑:
- Windows系统配置完JAVA_HOME后,必须关闭所有已打开的CMD窗口,重新打开新窗口,环境变量才会生效。很多新手配置完直接在旧窗口运行,一直提示找不到Java。
- 如果同时配置了
JRE_HOME,Tomcat也会识别,优先级为:JAVA_HOME>JRE_HOME> PATH中的java命令。
说明:仅运行Tomcat的话,JRE环境即可;开发场景建议配置完整JDK。
🚀 三、启动Tomcat服务
启动流程总览
#mermaid-svg-USGYvqgQytNdnHWP{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-USGYvqgQytNdnHWP .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-USGYvqgQytNdnHWP .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-USGYvqgQytNdnHWP .error-icon{fill:#552222;}#mermaid-svg-USGYvqgQytNdnHWP .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-USGYvqgQytNdnHWP .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-USGYvqgQytNdnHWP .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-USGYvqgQytNdnHWP .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-USGYvqgQytNdnHWP .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-USGYvqgQytNdnHWP .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-USGYvqgQytNdnHWP .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-USGYvqgQytNdnHWP .marker{fill:#333333;stroke:#333333;}#mermaid-svg-USGYvqgQytNdnHWP .marker.cross{stroke:#333333;}#mermaid-svg-USGYvqgQytNdnHWP svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-USGYvqgQytNdnHWP p{margin:0;}#mermaid-svg-USGYvqgQytNdnHWP .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-USGYvqgQytNdnHWP .cluster-label text{fill:#333;}#mermaid-svg-USGYvqgQytNdnHWP .cluster-label span{color:#333;}#mermaid-svg-USGYvqgQytNdnHWP .cluster-label span p{background-color:transparent;}#mermaid-svg-USGYvqgQytNdnHWP .label text,#mermaid-svg-USGYvqgQytNdnHWP span{fill:#333;color:#333;}#mermaid-svg-USGYvqgQytNdnHWP .node rect,#mermaid-svg-USGYvqgQytNdnHWP .node circle,#mermaid-svg-USGYvqgQytNdnHWP .node ellipse,#mermaid-svg-USGYvqgQytNdnHWP .node polygon,#mermaid-svg-USGYvqgQytNdnHWP .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-USGYvqgQytNdnHWP .rough-node .label text,#mermaid-svg-USGYvqgQytNdnHWP .node .label text,#mermaid-svg-USGYvqgQytNdnHWP .image-shape .label,#mermaid-svg-USGYvqgQytNdnHWP .icon-shape .label{text-anchor:middle;}#mermaid-svg-USGYvqgQytNdnHWP .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-USGYvqgQytNdnHWP .rough-node .label,#mermaid-svg-USGYvqgQytNdnHWP .node .label,#mermaid-svg-USGYvqgQytNdnHWP .image-shape .label,#mermaid-svg-USGYvqgQytNdnHWP .icon-shape .label{text-align:center;}#mermaid-svg-USGYvqgQytNdnHWP .node.clickable{cursor:pointer;}#mermaid-svg-USGYvqgQytNdnHWP .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-USGYvqgQytNdnHWP .arrowheadPath{fill:#333333;}#mermaid-svg-USGYvqgQytNdnHWP .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-USGYvqgQytNdnHWP .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-USGYvqgQytNdnHWP .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-USGYvqgQytNdnHWP .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-USGYvqgQytNdnHWP .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-USGYvqgQytNdnHWP .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-USGYvqgQytNdnHWP .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-USGYvqgQytNdnHWP .cluster text{fill:#333;}#mermaid-svg-USGYvqgQytNdnHWP .cluster span{color:#333;}#mermaid-svg-USGYvqgQytNdnHWP div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-USGYvqgQytNdnHWP .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-USGYvqgQytNdnHWP rect.text{fill:none;stroke-width:0;}#mermaid-svg-USGYvqgQytNdnHWP .icon-shape,#mermaid-svg-USGYvqgQytNdnHWP .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-USGYvqgQytNdnHWP .icon-shape p,#mermaid-svg-USGYvqgQytNdnHWP .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-USGYvqgQytNdnHWP .icon-shape .label rect,#mermaid-svg-USGYvqgQytNdnHWP .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-USGYvqgQytNdnHWP .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-USGYvqgQytNdnHWP .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-USGYvqgQytNdnHWP :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 异常
正常
报错
无报错
解压到纯英文无空格路径
检查JAVA_HOME配置
Java环境是否正常
修复环境变量 重启终端
进入bin目录执行启动脚本
控制台是否报错
对照报错表排查
浏览器访问8080端口验证
服务启动成功
3.1 Windows系统启动
- 进入Tomcat根目录下的
bin文件夹; - 双击
startup.bat脚本,会弹出独立的控制台窗口; - 控制台或
logs/catalina.out日志中出现Server startup in [xxx] ms,代表启动成功。
💡 提示:不要直接点击控制台右上角的叉号关闭窗口,这会直接终止Tomcat进程。正常停止请使用同目录下的
shutdown.bat脚本,它会通过8005端口发送正常关闭指令。
Tomcat 9 默认的控制台日志编码是 UTF-8,而 Windows 系统的 CMD 命令提示符默认编码是 GBK(代码页 936),两种编码不匹配,中文就会显示成乱码方块。
Windows 系统下 Tomcat 控制台中文乱码 问题,属于非常经典的新手坑,不影响 Tomcat 本身的正常运行 ,只是日志里的中文显示成了乱码方块
很快解决 :打开 Tomcat 根目录下的 conf 文件夹,找到 logging.properties 文件,用记事本 / VS Code 打开;
找到控制台处理器的编码配置行:
java.util.logging.ConsoleHandler.encoding = UTF-8把 UTF-8 修改为 GBK,修改后:
java.util.logging.ConsoleHandler.encoding = GBK保存文件,关闭当前乱码的控制台窗口,重新双击 startup.bat 启动,中文日志就会正常显示。
3.2 Linux / macOS系统启动
-
终端进入Tomcat的bin目录;
-
如果出现权限不足的提示,给所有脚本赋予执行权限(官方tar.gz包默认自带权限,跨系统拷贝、传输文件后可能丢失):
chmod +x *.sh
-
执行启动脚本:
./startup.sh
-
终端或
logs/catalina.out中出现Server startup in [xxx] ms即启动成功。
✅ 四、验证服务正常运行
打开浏览器,访问默认地址:
[http://localhost:8080](http://localhost:8080)
如果页面加载出Apache Tomcat的官方欢迎页(带有Tomcat小猫图标),说明服务已经正常运行。
🌐 服务器部署提醒:
- 把
localhost换成服务器公网IP;- 不仅要开放系统防火墙的8080端口,云服务器还要在控制台配置安全组规则,放行8080端口的入站流量。
🛠️ 五、基础常用操作
5.1 部署Web应用
把打包好的.war格式项目文件,直接放到webapps目录下,Tomcat默认开启自动部署(autoDeploy),会自动检测并热加载应用。
- 访问路径格式:
[http://localhost:8080/](http://localhost:8080/)你的war包名称/ webapps/ROOT是默认根应用,访问localhost:8080时默认加载的就是这个目录的内容。
5.2 修改默认端口
Tomcat默认使用8080作为HTTP服务端口,被占用或者需要更换时:
-
打开
conf目录下的server.xml文件; -
找到HTTP服务连接器(默认是NIO实现,protocol为HTTP/1.1),标签大概在文件中部:
-
将
port="8080"修改为目标端口,保存文件后重启Tomcat生效。
说明:
connectionTimeout是连接超时时间,单位毫秒,默认20000即20秒;redirectPort是HTTPS重定向端口,默认8443。
5.3 管理应用配置(manager/host-manager)
Tomcat自带了应用管理和虚拟主机管理后台,默认没有配置用户,直接访问会返回401无权限错误。配置方法:
-
打开
conf/tomcat-users.xml文件; -
在
<tomcat-users>标签内添加用户配置,示例: -
重启Tomcat后,访问
[http://localhost:8080/manager/html](http://localhost:8080/manager/html),输入用户名密码即可进入管理后台。
5.4 停止服务
- Windows:双击bin目录下的
shutdown.bat - Linux/macOS:执行bin目录下的
./shutdown.sh - 紧急情况可以在启动控制台按
Ctrl + C终止,但不推荐常规使用,可能导致资源未正常释放、会话数据丢失。
❗ 六、新手高频启动报错排查
| 报错现象 | 核心原因 | 解决方案 |
|---|---|---|
| 双击startup.bat一闪而过,控制台直接消失 | 未配置JAVA_HOME,或路径配置错误;或CMD窗口未重启 | 先检查JAVA_HOME环境变量;编辑startup.bat,在末尾加一行pause保存后再启动,就能看到具体报错信息;配置完变量务必重启CMD。 |
控制台报错Address already in use: bind |
8080端口被其他程序占用 | 方案1:关闭占用8080端口的程序;方案2:按5.2节修改Tomcat的HTTP端口。 |
| 控制台中文乱码、日志显示方块 | Tomcat默认控制台编码为UTF-8,Windows控制台默认编码为GBK,编码不匹配 | 打开conf/logging.properties,将java.util.logging.ConsoleHandler.encoding改为GBK。 注意:这只是控制台显示问题,日志文件本身还是UTF-8编码,不影响功能。 |
| 页面中文显示乱码 | 和控制台乱码是不同问题,通常是项目编码、Tomcat URI编码、页面编码不统一 | 项目文件统一用UTF-8;可在server.xml的Connector中添加URIEncoding="UTF-8"解决URL参数乱码。 |
Linux执行脚本提示Permission denied |
脚本没有执行权限(常见于跨系统传输后) | bin目录下执行chmod +x *.sh赋予所有脚本执行权限。 |
| 浏览器访问8080显示无法访问 | 启动失败、端口错误、防火墙/安全组拦截 | 先看控制台有无报错;确认访问端口和配置一致;服务器部署需同时放行系统防火墙和云安全组。 |
| 启动报类找不到、路径异常错误 | 解压路径含中文/空格/特殊字符 | 将Tomcat整体移动到纯英文、无空格的路径下重新启动。 |
| 访问manager页面返回401 | 默认未配置管理用户 | 按5.3节在tomcat-users.xml中配置用户和角色。 |
| 执行shutdown.bat关不掉服务 | 8005关闭端口被占用,或服务异常假死 | 先查看8005端口占用情况;紧急情况直接在控制台Ctrl+C终止,或任务管理器结束java进程。 |
💬 七、常见疑问解答
Q1:必须配置CATALINA_HOME吗?
不是必须。Tomcat启动脚本会自动根据脚本所在路径推算出根目录(即CATALINA_HOME)。只有单台机器部署多个Tomcat实例、或者需要全局调用Tomcat脚本时,才需要手动配置CATALINA_HOME环境变量。
Q2:下载的zip包需要安装吗?
Core二进制包是绿色免安装版本,解压即可使用,卸载直接删除整个文件夹即可,不会写入系统注册表。只有Windows Service Installer版本才是安装版,会注册成系统服务。
Q3:怎么设置开机自启动?
- Windows系统:使用Service Installer安装包,安装时勾选系统服务选项;或在系统服务管理中将Tomcat服务设为自动启动。
- Linux系统:编写systemd服务配置文件,将Tomcat启动脚本注册为系统服务,配置开机自启。
Q4:work和temp目录可以删除吗?
可以删除。运行时会自动重新生成。work目录删除后,所有JSP页面会重新编译;temp目录删除会清空临时文件。一般清理缓存时可以删除,但运行过程中不要删。
Q5:Tomcat默认有哪些端口?
- 8080:HTTP服务默认端口
- 8005:服务关闭监听端口(shutdown脚本通过这个端口发指令)
- 8009:AJP协议端口(用于和Apache HTTPD等Web服务器集成)
- 8443:HTTPS重定向默认端口
如果本文对你有帮助,欢迎点赞👍、收藏⭐、评论💬、关注➕!
个人领域:C++/java/Al/软件开发/芯片开发个人主页:「一名热衷协作的开发者,在构建中学习,期待与你交流技术、共同成长。」
座右铭:「与其完美地观望,不如踉跄地启程」
Tomcat 9 默认的控制台日志编码是 UTF-8,而 Windows 系统的 CMD 命令提示符默认编码是 GBK(代码页 936),两种编码不匹配,中文就会显示成乱码方块。
