Tomcat部署Java Servlet发起GET请求出现类实例化错误求助
你遇到的Servlet实例化失败问题主要有两个核心原因:
- Servlet包名和Tomcat版本不兼容
Tomcat 10.x版本采用Jakarta EE规范,Servlet相关API的包名为jakarta.servlet.*;而Tomcat 8.5.x属于旧的Java EE规范,仅支持javax.servlet.*包名的Servlet API。你当前代码中使用的是jakarta.servlet开头的导入,直接放到Tomcat 8.5中运行时,会找不到HttpServlet父类,导致类加载失败无法实例化。 - 编译文件存放路径错误
需要确认你编译后的.class文件存放路径正确:AddServer.class、Class2.class必须放在项目的WEB-INF/classes/com/sintin/目录下,如果仅存放了.java源文件、或者编译后的文件路径不对,Tomcat无法加载对应类,也会触发实例化失败报错。
对应解决方法:
- 若使用Tomcat 10运行:
保持现有代码的jakarta包导入不变,确认编译后的class文件存放路径正确,检查web.xml中配置的类名和实际类名一致即可。 - 若使用Tomcat 8.5运行:
将代码中所有jakarta.servlet开头的导入语句全部替换为javax.servlet,重新编译后再部署即可。 - 额外检查项:如果使用构建工具(Maven/Gradle),确保引入的Servlet API依赖和你使用的Tomcat版本匹配,且依赖scope设置为
provided,避免将Servlet API打包到部署包中和Tomcat自带的API产生冲突。
内容的提问来源于stack exchange,提问作者tinku kalluri
相关产品推荐
相关产品推荐

