为什么在Tomcat中部署servlet后访问出现404/500错误
Servlet访问404/500问题排查方案
基础环境验证
- 首先确认Tomcat服务启动正常,访问
http://localhost:8080可以打开Tomcat默认欢迎页面,排除端口占用、服务启动失败的问题 - 核对目录结构正确性:实际部署时要保证以下层级完全匹配,不要出现目录名拼写错误、大小写错误、多余空格:
Tomcat └── webapps └── Servlet └── WEB-INF ├── web.xml └── classes ├── HelloWorld.class └── HelloWorld.java
注意WEB-INF必须全大写,不能少写横线或者写错大小写,否则Tomcat不会识别该目录下的配置。
代码与编译校验
- 确认HelloWorld.class编译正常:编译时需要将Tomcat lib目录下的servlet-api.jar加入编译依赖,否则编译出的类会存在依赖缺失,触发500错误。编译参考命令:
- Windows环境:
javac -cp %CATALINA_HOME%\lib\servlet-api.jar HelloWorld.java - Linux/macOS环境:
javac -cp $CATALINA_HOME/lib/servlet-api.jar HelloWorld.java
- Windows环境:
- 如果你使用的是Tomcat 10及以上版本,原有代码里的
javax.servlet相关包已经被替换为jakarta.servlet,需要把代码里的导入语句全部替换为jakarta前缀,否则会报类找不到的500错误。
配置文件校验
你提供的web.xml存在明显错误,开头多了一个多余的横杠-<web-app,这个符号会直接导致XML解析失败,删除多余横杠即可。其余配置逻辑是正确的:servlet-name上下匹配、url-pattern和访问路径匹配、无包名的类直接写类名即可,无需额外调整。
部署缓存校验
- 所有配置、代码修改后必须重启Tomcat服务才会生效,如果开启了热部署也要确认热部署配置正常
- 清理Tomcat缓存:删除Tomcat根目录下
work/Catalina/localhost/Servlet文件夹后再重启服务,避免旧缓存影响访问
访问路径校验
你当前访问的路径是http://localhost:8080/Servlet/Hello,要保证webapps下的项目文件夹名就是Servlet,大小写完全匹配,Linux环境对路径大小写敏感,大小写不一致会直接返回404。
内容的提问来源于stack exchange,提问作者Matteo Pagliarello
相关产品推荐
相关产品推荐

