Tomcat启动失败主因是JAVA_HOME与JRE_HOME冲突,需仅保留指向JDK的JAVA_HOME;webapps部署须符合标准结构或WAR包;URI乱码需配置URIEncoding="UTF-8";IDE调试404需校准Artifact输出路径与Deployment配置。

Tomcat 启动失败:检查 JAVA_HOME 和 JRE_HOME 是否冲突
Tomcat 9+ 默认依赖 JAVA_HOME,若同时设置了 JRE_HOME,可能因 JRE 缺少 tools.jar(如编译 JSP)导致启动卡在「INFO [main] org.apache.catalina.startup.VersionLoggerListener.log」后无响应。Windows 下常见错误日志含 java.lang.NoClassDefFoundError: javax/tools/JavaCompiler。
- 只保留
JAVA_HOME,指向 JDK 根目录(如C:\Program Files\Java\jdk-17.0.2),确保包含bin/java.exe和lib/tools.jar(JDK 9+ 已移除该文件,但 Tomcat 10+ 已适配模块系统) - 删除或注释掉
set JRE_HOME=...这类行(位于bin/catalina.bat或系统环境变量中) - Linux/macOS 下检查
~/.bashrc或/etc/profile是否重复导出JRE_HOME
webapps 目录部署失败:别直接放 class 文件,要按 WAR 或标准目录结构
把 MyServlet.class 直接丢进 webapps/ROOT/ 不会生效——Tomcat 只扫描符合 Servlet 规范的结构。最简可运行结构必须含 WEB-INF/web.xml(或使用注解 + Servlet 3.0+ 容器)和正确包路径的 class 文件。
- 推荐方式:打包为
myapp.war,放入webapps/,Tomcat 自动解压并加载 - 手动展开部署时,确保路径为
webapps/myapp/WEB-INF/classes/com/example/MyServlet.class,且webapps/myapp/WEB-INF/web.xml中声明了 servlet 映射 - 若用 Maven,确认
packaging是war,且maven-war-plugin版本 ≥ 3.3.2(避免WEB-INF/lib漏依赖)
中文路径或参数乱码:重点改 server.xml 的 URIEncoding 和 JVM 启动参数
浏览器访问 http://localhost:8080/app?name=张三 后端收到 “å¼ ä¸‰”,本质是 URL 解码时编码不一致。Tomcat 默认用 ISO-8859-1 解码 URI,而现代浏览器发 UTF-8 编码字节。
- 编辑
conf/server.xml,在标签内添加属性:URIEncoding="UTF-8" - 若还涉及 POST 表单乱码,需在 Servlet 中手动调用
request.setCharacterEncoding("UTF-8")(仅对 body 生效,不影响 URI) - Windows 下双击
startup.bat启动时,控制台默认 GBK,可能导致日志中文显示为方块——在bin/catalina.bat开头加chcp 65001切换到 UTF-8
IDEA/Eclipse 调试时 404:检查 Artifact 输出路径是否与 Tomcat 配置的 Deployment Path 一致
IDE 内嵌 Tomcat 启动后访问 /myproject 返回 404,大概率是 Artifact 打包路径没对齐。IDE 把项目编译结果输出到临时目录,但 Tomcat 实际加载的是另一个路径下的内容。
立即学习“Java免费学习笔记(深入)”;
- IntelliJ IDEA:打开
Project Structure → Artifacts,确认Output Directory指向out/artifacts/myproject_war_exploded;再进Run → Edit Configurations → Deployment,检查Application context是/myproject,且Artifact下拉选中对应 war exploded - Eclipse:右键项目 →
Properties → Web Project Settings → Context root必须与服务器上部署时的路径一致(如设为myproject,则访问http://localhost:8080/myproject) - 关键验证点:启动后查看
logs/catalina.out,搜索Deploying web application directory,确认它加载的是你期望的路径
22-May-2024 10:23:45.123 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [D:\tomcat\webapps\myproject]
如果这里显示的是 ROOT 或其他名字,说明 IDE 没把 Artifact 正确挂载过去。










