Tomcat 出现 404 的本质与快速判断 HTTP 404 表示客户端请求的资源在服务器上未找到。在 Tomcat 中,通常由资源不存在、部署结构不正确、URL 路径或映射错误、配置问题等引起。定位时优先查看 logs/catalina.out 与 logs/localhost.<日期>.log,从日志中的请求路径、应用名、状态码与异常堆栈快速锁定范围。
常见根因分类
日志定位与排查步骤
典型场景与修复建议
| 场景 | 日志与现象 | 修复建议 |
|---|---|---|
| 文件不在正确目录 | 访问 http://host:8080/index.html 报 404;文件实际在 webapps/ROOT/ 或本机其他路径 | 将文件放入应用目录(如 webapps/myapp/),用 http://host:8080/myapp/index.html 访问;不要将零散文件直接放在 webapps 根目录 |
| 应用未解压或 WAR 损坏 | catalina.out 无应用启动日志;访问任何资源均 404 | 删除应用目录与 work/Catalina/localhost/ |
| URL 大小写或路径错误 | 访问 /App/Index 报 404,实际为 /app/index | 按实际大小写与路径访问;统一前后端与反向代理的路径规范 |
| web.xml 映射错误 | 访问 /hello 报 404;日志提示未找到对应 Servlet | 修正 servlet-mapping 的 url-pattern,确保与请求路径一致 |
| 上下文根错误 | 部署为 myapp.war,却用 /app/ 访问 | 使用 /myapp/ 访问,或在 server.xml/Host 配置正确的 Context path |
| 默认首页缺失 | 访问 / 报 404,目录存在但无 index.html | 在 web.xml 配置 welcome-file-list 或放置 index.html |
| 防火墙/安全组阻断 | 本机可访问,外部访问 404 或超时 | 临时关闭防火墙/安全组验证;放通 8080/8443 等端口 |
| Docker/代理路径不一致 | 容器日志 200,外部 404;或反向代理转发前缀错误 | 核对容器内应用 Context Path 与代理 Location/ProxyPass 一致 |