错误记录:从把项目从Tomcat8.5.37转到Tomcat10.1.7

错误信息:在本地Servlet项目里没有报错,但是浏览器跳转该servlet时报错

异常报告

消息 实例化Servlet类[com.wangdao.lx.MyServlet1]异常

描述 服务器遇到一个意外的情况,阻止它完成请求。

例外情况

jakarta.servlet.ServletException: 实例化Servlet类[com.wangdao.lx.MyServlet1]异常
	org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493)
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
	org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:676)
	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341)
	org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390)
	org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
	org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:894)
	org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)
	org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
	org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
	org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
	org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	java.base/java.lang.Thread.run(Thread.java:842)

根本原因。

java.lang.NoClassDefFoundError: javax/servlet/http/HttpServlet
	java.base/java.lang.ClassLoader.defineClass1(Native Method)
	java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1012)
	java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
	org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2487)
	org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:865)
	org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1401)
	org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1245)
	org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493)
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
	org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:676)
	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341)
	org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390)
	org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
	org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:894)
	org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)
	org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
	org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
	org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
	org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	java.base/java.lang.Thread.run(Thread.java:842)

根本原因。

java.lang.ClassNotFoundException: javax.servlet.http.HttpServlet
	org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1437)
	org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1245)
	java.base/java.lang.ClassLoader.defineClass1(Native Method)
	java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1012)
	java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
	org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2487)
	org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:865)
	org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1401)
	org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1245)
	org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493)
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
	org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:676)
	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341)
	org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390)
	org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
	org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:894)
	org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)
	org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
	org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
	org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
	org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	java.base/java.lang.Thread.run(Thread.java:842)

):注意 主要问题的全部 stack 信息可以在 server logs 里查看

错误原因:Tomcat 10或更高版本,那么javax.servlet.http.HttpServlet这个类已经从javax.servlet包移动到了jakarta.servlet包。因此,如果你的应用程序是用新的jakarta.servlet包编写的,但你使用了旧的Servlet API jar,或者相反,就会导致这个错误。

具体错误信息:这个异常报告表明在尝试实例化MyServlet1这个Servlet类时出现了问题。具体来说,服务器无法找到javax.servlet.http.HttpServlet这个类,这通常意味着Servlet API的jar文件没有被正确地包含在应用程序的类路径中。

这里有几个可能的原因和解决方案:

  1. 缺少Servlet API jar :确保你的Web应用程序的WEB-INF/lib目录中包含了Servlet API的jar文件。对于Java EE应用程序,这通常是javax.servlet-api.jar
  2. 错误的Servlet API版本 :如果你正在使用的是Tomcat 10或更高版本,那么javax.servlet.http.HttpServlet这个类已经从javax.servlet包移动到了jakarta.servlet包。因此,如果你的应用程序是用新的jakarta.servlet包编写的,但你使用了旧的Servlet API jar,或者相反,就会导致这个错误。
  3. 类路径问题:确保你的开发环境(如Eclipse、IntelliJ IDEA等)和部署环境都将Servlet API的jar文件包含在了类路径中。
  4. 部署问题 :如果你是在部署到服务器上时遇到这个问题,可能是因为部署过程中没有正确地复制WEB-INF/lib目录下的jar文件。
  5. 服务器配置问题:在某些情况下,服务器的配置可能会导致这个问题。检查服务器的文档,确保没有相关的配置错误。

解决这个问题的步骤可能包括:

  • 确认WEB-INF/lib目录下是否有正确的Servlet API jar文件。
  • 如果你在使用Maven或Gradle,检查pom.xmlbuild.gradle文件,确保依赖项是正确的。
  • 如果你的应用程序是用新的jakarta.servlet包编写的,确保你使用的是相应的Tomcat版本和Servlet API jar。
  • 清理并重新构建你的应用程序。
  • 如果问题依然存在,检查服务器日志以获取更多信息,或者在你的开发环境中查看是否有任何配置错误。

解决方法:因为我电脑上有两个版本的tomcat

所以要把项目的tomcat自带的jar包从8版本切换到10版本的jar包

具体操作:

把原来这个地方的8版本的jar包删了

最后再把servlet里的import的jar包删了,import新的jar包,具体jar包类型请看上面错误原因。

为什么不用tomcat8,而选择tomcat10,因为,html里的表单若是中文,get或post方法提交表单时,在重写servlet的方法里若控制台输出参数值,则容易出现乱码。

因此以后选择tomcat10

相关推荐
GoodStudyAndDayDayUp3 小时前
IDEA能够从mapper跳转到xml的插件
xml·java·intellij-idea
莫名其妙小饼干6 小时前
网上球鞋竞拍系统|Java|SSM|VUE| 前后端分离
java·开发语言·maven·mssql
Anna。。8 小时前
Java入门2-idea 第五章:IO流(java.io包中)
java·开发语言·intellij-idea
.生产的驴9 小时前
SpringBoot 对接第三方登录 手机号登录 手机号验证 微信小程序登录 结合Redis SaToken
java·spring boot·redis·后端·缓存·微信小程序·maven
梁萌16 小时前
Docker快速安装Tomcat
docker·容器·tomcat·镜像
总是学不会.17 小时前
【集合】Java 8 - Stream API 17种常用操作与案例详解
java·windows·spring boot·mysql·intellij-idea·java集合
Doker 多克18 小时前
IntelliJ IDEA Docker集成
spring cloud·docker·intellij-idea
smileSunshineMan1 天前
vertx idea快速使用
java·ide·intellij-idea·vertx
阿乾之铭1 天前
IntelliJ IDEA中的语言级别版本与目标字节码版本配置
java·ide·intellij-idea
秋天下着雨1 天前
idea中打补丁包
java·ide·intellij-idea