直接在命令行运行startup.bat是最快速验证方式,常见报错包括java_home未定义、java_home与jre_home均无效、catalina_home未设置或路径错误;需确认变量值为无空格、不含bin的绝对路径,并注意windows下路径含空格时应重装至无空格目录。

直接在命令行运行 startup.bat 是否报错
这是最快速、最贴近真实使用场景的验证方式。不是看变量有没有“设上”,而是看 Tomcat 脚本能不能真正执行起来。
常见错误现象包括:
-
The JAVA_HOME environment variable is not defined:说明JAVA_HOME没设,或路径含空格未加引号,或指向了bin目录而非 JDK 根目录 -
Neither the JAVA_HOME nor the JRE_HOME environment variable is defined:Tomcat 启动脚本没找到任一 Java 环境,JAVA_HOME和JRE_HOME都为空或无效 -
CATALINA_HOME is not set:CATALINA_HOME未定义,或值为空,或路径末尾多了反斜杠(如C:\tomcat\)导致解析失败
实操建议:
- 打开新命令行窗口再试——环境变量修改后旧窗口不会自动刷新
- 运行前先执行
echo %JAVA_HOME%和echo %CATALINA_HOME%,确认输出是完整、无空格、不含bin的绝对路径(如C:\apache-tomcat-9.0.87,不是C:\apache-tomcat-9.0.87\bin) - 若路径含空格(如
Program Files),务必确保JAVA_HOME和CATALINA_HOME的值用英文双引号包裹(但 Windows 环境变量本身不支持引号,所以更稳妥的做法是重装到无空格路径,如C:\tomcat)
浏览器访问 http://localhost:8080 显示首页
这个动作验证的是 Tomcat 进程是否真正启动并监听端口,它绕过了“变量设对了但服务没起来”的中间态。
注意点:
- 必须等命令行窗口中出现类似
Server startup in [xxx] ms才算启动完成,此时再刷浏览器 - 如果页面打不开,先检查端口是否被占用:
netstat -ano | findstr :8080,查出 PID 后用任务管理器结束对应进程 - Tomcat 10+ 默认使用
jakarta.servlet包,老项目部署时首页能开不代表应用能跑,但首页能开至少说明容器本身是活的
用 service.bat install 注册 Windows 服务失败时查什么
注册服务本质是调用 tomcatXw.exe,它对环境变量更敏感,且会读取 conf\tomcat-users.xml 和 conf\server.xml 中的配置。
典型卡点:
-
Failed to install service: Cannot find executable:说明%CATALINA_HOME%\bin\tomcatXw.exe不存在,常见于解压不完整、或下载了 zip 包却误以为是安装包 - 注册成功但服务无法启动:检查
logs\catalina.out或 Windows 事件查看器中的 Application 日志,往往暴露的是JAVA_HOME指向 JRE 而非 JDK,或 JDK 版本低于 Tomcat 最低要求(如 Tomcat 11 需 JDK 17) - 注册时提示“Access is denied”:必须以管理员身份运行命令行
Linux/macOS 下执行 ./startup.sh 报权限拒绝
这不是环境变量问题,而是文件权限缺失。Windows 的 .bat 文件默认可执行,但 Linux 的 .sh 脚本需要显式授权。
解决方法很简单:
- 进入
$CATALINA_HOME/bin目录,运行:chmod +x *.sh - 之后再执行:
./startup.sh(注意前面的./,不能只写startup.sh) - 如果仍报
JAVA_HOME not found,检查~/.bashrc或/etc/profile中的export JAVA_HOME=...是否写错路径,且确认已执行source ~/.bashrc
复杂点在于:Windows 用户容易忽略路径空格和反斜杠,Linux 用户则常忘记 chmod 和 source —— 这两个动作不完成,变量设得再准也没用。











