• 错误记录:从把项目从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

  • 相关阅读:
    数据链路层
    vue pdf文件流 预览
    家电行业智慧物流体系构建:数商云供应链系统击破家电供应链数字化管理难题
    Rabbitmq- 消费者ack机制与发布者消息确认
    【牛客网题目详解】Q-前天是哪一天
    WebGL-Vue3-TS-Threejs:基础练习 / Javascript 3D library / demo
    期刊级别应该是怎样划分的呢?
    借助工业PoE交换机实现智慧停车场管理
    Docker从入门到精通,一文详解
    Java TCP服务端多线程接收RFID网络读卡器上传数据
  • 原文地址:https://blog.csdn.net/beautfullboy/article/details/139307476