首次运行Servlet报HTTP 500错误提示com.demo.AddServlet类未找到如何解决
问题原因
核心原因为Tomcat加载Servlet时预期的类名与项目中实际存在的类名不匹配,触发ClassNotFoundException异常,常见场景如下:
- 文件名和public类名不符合Java规范:当前文件名为
AddServlet.java,但代码中定义的public类为AddDemo,Java要求public类的文件名必须与类名完全一致,否则编译生成的class文件名和预期不符,会导致配置匹配失败。 - web.xml配置错误:若项目
WEB-INF目录下的web.xml文件中配置了Servlet映射,其中<servlet-class>节点填写的全类名为com.demo.AddServlet,和实际类的全类名com.demo.AddDemo不匹配。 - 旧配置缓存未清理:修改类名前的编译产物、Tomcat工作缓存未清理,导致服务器仍按照旧的类名加载。
排查解决步骤
- 第一步:统一文件名和类名
二选一修改即可:- 将代码中的类名从
AddDemo改为AddServlet,对应构造方法名也同步修改,保持和文件名AddServlet.java一致 - 将文件名从
AddServlet.java改为AddDemo.java,保持和代码中的类名一致
- 将代码中的类名从
- 第二步:核对Servlet配置
如果你使用web.xml进行配置,找到对应Servlet的配置段,确认<servlet-class>的值为实际的类全类名:
若你已经使用<servlet> <servlet-name>AddDemo</servlet-name> <servlet-class>com.demo.AddDemo</servlet-class> </servlet> <servlet-mapping> <servlet-name>AddDemo</servlet-name> <url-pattern>/AddDemo</url-pattern> </servlet-mapping>@WebServlet("/AddDemo")注解配置,可以删除web.xml中对应的旧Servlet配置,避免配置冲突。 - 第三步:清理缓存重新部署
- 删除项目的编译输出目录(如IDEA的target目录、Eclipse的build目录)
- 删除Tomcat安装目录下
work/Catalina文件夹内的所有缓存内容 - 重新编译项目,将新的编译产物部署到Tomcat,重启服务后测试
- 第四步:核对访问路径
配置生效后,访问路径为http://[服务器地址]:[端口]/[项目上下文路径]/AddDemo即可触发该Servlet的逻辑。
内容的提问来源于stack exchange,提问作者Sourav Ganguly
相关产品推荐
相关产品推荐

