如何处理报错
大家好,我是EverdayForCode。你,今天学习了吗!
写在前面,本片博文的错误导致原因不一定和你的一样,但是解决问题的方法是通用的。
在使用servlet实现文件上传时出现了一下报错:
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException
和往常一样“面向搜索引擎编程”打开百度搜索
打开其中一个链接查看
看好好多还是没有解决问题,就像下面评论所说
其实报错千千万,就算是同一个错误也不一定是同一个原因导致,处理报错害的找到自己程序报错的原因。下面就来一起分析我的项目报错的原因
下面是报错代码提示:
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/GraduationForBBS]]
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:192)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:931)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:841)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1412)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1402)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/GraduationForBBS]]
at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198)
... 6 more
Caused by: java.lang.IllegalArgumentException: 名为 [UploadImgServlet]和 [com.graduation.controller.UploadImgController] 的servlet不能映射为一个url模式(url-pattern) [/UploadImgServlet]
at org.apache.tomcat.util.descriptor.web.WebXml.addServletMappingDecoded(WebXml.java:339)
at org.apache.tomcat.util.descriptor.web.WebXml.addServletMapping(WebXml.java:332)
at org.apache.catalina.startup.ContextConfig.processAnnotationWebServlet(ContextConfig.java:2408)
at org.apache.catalina.startup.ContextConfig.processClass(ContextConfig.java:2084)
at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:2073)
at org.apache.catalina.startup.ContextConfig.processAnnotationsWebResource(ContextConfig.java:1965)
at org.apache.catalina.startup.ContextConfig.processAnnotationsWebResource(ContextConfig.java:1959)
at org.apache.catalina.startup.ContextConfig.processAnnotationsWebResource(ContextConfig.java:1959)
at org.apache.catalina.startup.ContextConfig.processAnnotationsWebResource(ContextConfig.java:1959)
at org.apache.catalina.startup.ContextConfig.processClasses(ContextConfig.java:1227)
at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1141)
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:776)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:299)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5063)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
... 6 more
四月 12, 2020 11:49:55 上午 org.apache.catalina.core.ContainerBase startInternal
严重: 子容器启动失败
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: 子容器启动失败
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:192)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:931)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:258)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:422)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:766)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.startup.Catalina.start(Catalina.java:688)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:343)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:474)
Caused by: org.apache.catalina.LifecycleException: 子容器启动失败
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:942)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:841)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1412)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1402)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/GraduationForBBS]]
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:192)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:931)
... 8 more
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/GraduationForBBS]]
at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198)
... 6 more
Caused by: java.lang.IllegalArgumentException: 名为 [UploadImgServlet]和 [com.graduation.controller.UploadImgController] 的servlet不能映射为一个url模式(url-pattern) [/UploadImgServlet]
at org.apache.tomcat.util.descriptor.web.WebXml.addServletMappingDecoded(WebXml.java:339)
at org.apache.tomcat.util.descriptor.web.WebXml.addServletMapping(WebXml.java:332)
at org.apache.catalina.startup.ContextConfig.processAnnotationWebServlet(ContextConfig.java:2408)
at org.apache.catalina.startup.ContextConfig.processClass(ContextConfig.java:2084)
at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:2073)
at org.apache.catalina.startup.ContextConfig.processAnnotationsWebResource(ContextConfig.java:1965)
at org.apache.catalina.startup.ContextConfig.processAnnotationsWebResource(ContextConfig.java:1959)
at org.apache.catalina.startup.ContextConfig.processAnnotationsWebResource(ContextConfig.java:1959)
at org.apache.catalina.startup.ContextConfig.processAnnotationsWebResource(ContextConfig.java:1959)
at org.apache.catalina.startup.ContextConfig.processClasses(ContextConfig.java:1227)
at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1141)
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:776)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:299)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5063)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
... 6 more
四月 12, 2020 11:49:55 上午 org.apache.catalina.startup.Catalina start
严重: 所必需的服务组件启动失败,所以无法启动Tomcat
org.apache.catalina.LifecycleException: 子容器启动失败
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:942)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:258)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:422)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:766)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.startup.Catalina.start(Catalina.java:688)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:343)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:474)
Caused by: java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: 子容器启动失败
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:192)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:931)
... 13 more
Caused by: org.apache.catalina.LifecycleException: 子容器启动失败
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:942)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:841)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1412)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1402)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/GraduationForBBS]]
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:192)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:931)
... 8 more
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/GraduationForBBS]]
at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198)
... 6 more
Caused by: java.lang.IllegalArgumentException: 名为 [UploadImgServlet]和 [com.graduation.controller.UploadImgController] 的servlet不能映射为一个url模式(url-pattern) [/UploadImgServlet]
at org.apache.tomcat.util.descriptor.web.WebXml.addServletMappingDecoded(WebXml.java:339)
at org.apache.tomcat.util.descriptor.web.WebXml.addServletMapping(WebXml.java:332)
at org.apache.catalina.startup.ContextConfig.processAnnotationWebServlet(ContextConfig.java:2408)
at org.apache.catalina.startup.ContextConfig.processClass(ContextConfig.java:2084)
at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:2073)
at org.apache.catalina.startup.ContextConfig.processAnnotationsWebResource(ContextConfig.java:1965)
at org.apache.catalina.startup.ContextConfig.processAnnotationsWebResource(ContextConfig.java:1959)
at org.apache.catalina.startup.ContextConfig.processAnnotationsWebResource(ContextConfig.java:1959)
at org.apache.catalina.startup.ContextConfig.processAnnotationsWebResource(ContextConfig.java:1959)
at org.apache.catalina.startup.ContextConfig.processClasses(ContextConfig.java:1227)
at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1141)
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:776)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:299)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5063)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
... 6 more
四月 12, 2020 11:49:55 上午 org.apache.coyote.AbstractProtocol pause
信息: Pausing ProtocolHandler ["http-nio-8080"]
四月 12, 2020 11:49:55 上午 org.apache.catalina.core.StandardService stopInternal
信息: 正在停止服务[Catalina]
四月 12, 2020 11:49:55 上午 org.apache.coyote.AbstractProtocol destroy
信息: 正在摧毁协议处理器 ["http-nio-8080"]
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
四月 12, 2020 11:49:55 上午 org.apache.catalina.loader.WebappClassLoaderBase clearReferencesThreads
警告: Web应用程序[GraduationForBBS]似乎启动了一个名为[Abandoned connection cleanup thread]的线程,但未能停止它。这很可能会造成内存泄漏。线程的堆栈跟踪:[
java.lang.Object.wait(Native Method)
java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)
com.mysql.cj.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:70)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
java.lang.Thread.run(Thread.java:748)]
一直向下翻找到最后一个Caused by:
为什么要找最后一个"Caused by:",打个比方:拆线的时候,找到线头才好拆,
Caused by: java.lang.IllegalArgumentException: 名为 [UploadImgServlet]和 [com.graduation.controller.UploadImgController] 的servlet不能映射为一个url模式(url-pattern) [/UploadImgServlet]
它告诉我:servlet不能映射为一个url模式(url-pattern) [/UploadImgServlet]
下面是我的xml配置:
<!-- 头像上传 -->
<servlet>
<display-name>UploadImgServlet</display-name>
<servlet-name>UploadImgServlet</servlet-name>
<servlet-class>com.graduation.controller</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UploadImgServlet</servlet-name>
<url-pattern>/UploadImgServlet</url-pattern>
</servlet-mapping>
也就说我的 <servlet-name>
和<url-pattern>
重名了
稍稍改一下
<!-- 头像上传 -->
<servlet>
<display-name>UploadImgServlet</display-name>
<servlet-name>UploadImgServlet</servlet-name>
<servlet-class>com.graduation.controller</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UploadImgServlet</servlet-name>
<url-pattern>/Grt/UploadImgServlet</url-pattern>
</servlet-mapping>
再次启动tmocat
如果解决倒数第一Caused by,还是报错,那么就以此类推解决倒数第二个Caused by。
可怕的不是犯错,而是知错不改、再次犯同样的错误