錯誤信息:在本地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/HttpServletjava.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.HttpServletorg.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文件沒有被正確地包含在應用程序的類路徑中。
這里有幾個可能的原因和解決方案:
- 缺少Servlet API jar:確保你的Web應用程序的
WEB-INF/lib
目錄中包含了Servlet API的jar文件。對于Java EE應用程序,這通常是javax.servlet-api.jar
。 - 錯誤的Servlet API版本:如果你正在使用的是Tomcat 10或更高版本,那么
javax.servlet.http.HttpServlet
這個類已經從javax.servlet
包移動到了jakarta.servlet
包。因此,如果你的應用程序是用新的jakarta.servlet
包編寫的,但你使用了舊的Servlet API jar,或者相反,就會導致這個錯誤。 - 類路徑問題:確保你的開發環境(如Eclipse、IntelliJ IDEA等)和部署環境都將Servlet API的jar文件包含在了類路徑中。
- 部署問題:如果你是在部署到服務器上時遇到這個問題,可能是因為部署過程中沒有正確地復制
WEB-INF/lib
目錄下的jar文件。 - 服務器配置問題:在某些情況下,服務器的配置可能會導致這個問題。檢查服務器的文檔,確保沒有相關的配置錯誤。
解決這個問題的步驟可能包括:
- 確認
WEB-INF/lib
目錄下是否有正確的Servlet API jar文件。 - 如果你在使用Maven或Gradle,檢查
pom.xml
或build.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