【问题标题】:Tomcat Server Won't Start When Following Spring MVC Guide遵循 Spring MVC 指南时 Tomcat 服务器不会启动
【发布时间】:2021-11-27 21:09:33
【问题描述】:

我正在尝试创建一个 Spring MVC hello world api(没有 Spring Boot),我的任务是使用 Spring 4.4 或更高版本来完成它。我找到了一个指南,说明了如何基本上做到这一点:

https://frugalisminds.com/spring-mvc-basic-setup-hello-world/

但是,当我尝试运行 Tomcat 服务器时,它说它无法为我启动,我不知道如何修复它。

确切的错误如下:

Oct 07, 2021 2:26:12 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server version name:   Apache Tomcat/8.5.71
Oct 07, 2021 2:26:12 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server built:          Sep 9 2021 18:43:14 UTC
Oct 07, 2021 2:26:12 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server version number: 8.5.71.0
Oct 07, 2021 2:26:12 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: OS Name:               Windows 8.1
Oct 07, 2021 2:26:12 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: OS Version:            6.3
Oct 07, 2021 2:26:12 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Architecture:          amd64
Oct 07, 2021 2:26:12 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Java Home:             C:\Program Files\Java\jre1.8.0_51
Oct 07, 2021 2:26:12 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: JVM Version:           1.8.0_51-b16
Oct 07, 2021 2:26:12 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: JVM Vendor:            Oracle Corporation
Oct 07, 2021 2:26:12 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: CATALINA_BASE:         C:\Users\te549\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0
Oct 07, 2021 2:26:12 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: CATALINA_HOME:         C:\Users\te549\Documents\Tomcat\apache-tomcat-8.5.71
Oct 07, 2021 2:26:12 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dcatalina.base=C:\Users\te549\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0
Oct 07, 2021 2:26:12 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dcatalina.home=C:\Users\te549\Documents\Tomcat\apache-tomcat-8.5.71
Oct 07, 2021 2:26:12 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dwtp.deploy=C:\Users\te549\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps
Oct 07, 2021 2:26:12 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Djava.endorsed.dirs=C:\Users\te549\Documents\Tomcat\apache-tomcat-8.5.71\endorsed
Oct 07, 2021 2:26:12 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dfile.encoding=Cp1252
Oct 07, 2021 2:26:12 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Djava.net.preferIPv4Stack=true
Oct 07, 2021 2:26:12 PM org.apache.catalina.core.AprLifecycleListener lifecycleEvent
INFO: The Apache Tomcat Native library which allows using OpenSSL was not found on the java.library.path: [C:\Program Files\Java\jre1.8.0_51\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:/Program Files/Java/jre1.8.0_51/bin/server;C:/Program Files/Java/jre1.8.0_51/bin;C:/Program Files/Java/jre1.8.0_51/lib/amd64;C:\ProgramData\Oracle\Java\javapath;C:\windows\system32;C:\windows;C:\windows\System32\Wbem;C:\windows\System32\WindowsPowerShell\v1.0\;C:\windows\System32\OpenSSH\;C:\Users\Administrator\AppData\Local\Microsoft\WindowsApps;;C:\Program Files (x86)\PuTTY\;C:\Program Files (x86)\Plantronics\Spokes3G\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Users\Install\AppData\Local\Microsoft\WindowsApps;C:\Program Files (x86)\Adaptiva\AdaptivaClient\bin\x32;C:\Program Files (x86)\Adaptiva\AdaptivaClient\bin\x64;C:\Users\te549\AppData\Local\Microsoft\WindowsApps;C:\Users\te549\AppData\Local\Programs\Microsoft VS Code\bin;C:\Users\te549\AppData\Local\Programs\Git\cmd;C:\Users\te549\Documents\Eclipse_IDE\eclipse;;.]
Oct 07, 2021 2:26:12 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-nio-8080"]
Oct 07, 2021 2:26:12 PM org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
INFO: Using a shared selector for servlet write/read
Oct 07, 2021 2:26:12 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 605 ms
Oct 07, 2021 2:26:12 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service [Catalina]
Oct 07, 2021 2:26:12 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet engine: [Apache Tomcat/8.5.71]
Oct 07, 2021 2:26:12 PM org.apache.catalina.util.SessionIdGeneratorBase createSecureRandom
WARNING: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [165] milliseconds.
Oct 07, 2021 2:26:13 PM org.apache.catalina.core.ContainerBase startInternal
SEVERE: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/MVC_Attempt_0116]]
    at java.util.concurrent.FutureTask.report(Unknown Source)
    at java.util.concurrent.FutureTask.get(Unknown Source)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:942)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:833)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1427)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1417)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/MVC_Attempt_0116]]
    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: More than one fragment with the name [spring_web] was found. This is not legal with relative ordering. See section 8.2.2 2c of the Servlet specification for details. Consider using absolute ordering.
    at org.apache.tomcat.util.descriptor.web.WebXml.orderWebFragments(WebXml.java:2205)
    at org.apache.tomcat.util.descriptor.web.WebXml.orderWebFragments(WebXml.java:2164)
    at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1083)
    at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:779)
    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:5130)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    ... 6 more

Oct 07, 2021 2:26:13 PM org.apache.catalina.core.ContainerBase startInternal
SEVERE: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: A child container failed during start
    at java.util.concurrent.FutureTask.report(Unknown Source)
    at java.util.concurrent.FutureTask.get(Unknown Source)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:942)
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:263)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:421)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:763)
    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(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:476)
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:953)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:833)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1427)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1417)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/MVC_Attempt_0116]]
    at java.util.concurrent.FutureTask.report(Unknown Source)
    at java.util.concurrent.FutureTask.get(Unknown Source)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:942)
    ... 8 more
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/MVC_Attempt_0116]]
    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: More than one fragment with the name [spring_web] was found. This is not legal with relative ordering. See section 8.2.2 2c of the Servlet specification for details. Consider using absolute ordering.
    at org.apache.tomcat.util.descriptor.web.WebXml.orderWebFragments(WebXml.java:2205)
    at org.apache.tomcat.util.descriptor.web.WebXml.orderWebFragments(WebXml.java:2164)
    at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1083)
    at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:779)
    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:5130)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    ... 6 more

Oct 07, 2021 2:26:13 PM org.apache.catalina.startup.Catalina start
SEVERE: The required Server component failed to start so Tomcat is unable to start.
org.apache.catalina.LifecycleException: A child container failed during start
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:953)
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:263)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:421)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:763)
    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(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:476)
Caused by: java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: A child container failed during start
    at java.util.concurrent.FutureTask.report(Unknown Source)
    at java.util.concurrent.FutureTask.get(Unknown Source)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:942)
    ... 13 more
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:953)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:833)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1427)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1417)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/MVC_Attempt_0116]]
    at java.util.concurrent.FutureTask.report(Unknown Source)
    at java.util.concurrent.FutureTask.get(Unknown Source)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:942)
    ... 8 more
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/MVC_Attempt_0116]]
    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: More than one fragment with the name [spring_web] was found. This is not legal with relative ordering. See section 8.2.2 2c of the Servlet specification for details. Consider using absolute ordering.
    at org.apache.tomcat.util.descriptor.web.WebXml.orderWebFragments(WebXml.java:2205)
    at org.apache.tomcat.util.descriptor.web.WebXml.orderWebFragments(WebXml.java:2164)
    at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1083)
    at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:779)
    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:5130)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    ... 6 more

Oct 07, 2021 2:26:13 PM org.apache.coyote.AbstractProtocol pause
INFO: Pausing ProtocolHandler ["http-nio-8080"]
Oct 07, 2021 2:26:13 PM org.apache.catalina.core.StandardService stopInternal
INFO: Stopping service [Catalina]
Oct 07, 2021 2:26:13 PM org.apache.coyote.AbstractProtocol destroy
INFO: Destroying ProtocolHandler ["http-nio-8080"]
Picked up _JAVA_OPTIONS: -Djava.net.preferIPv4Stack=true

根据我的阅读,这似乎有一些潜在的原因,例如我的 web.xml 有错字,但问题是,我确实有一个使用 Spring 4.0 的工作版本(我遵循本指南:https://www.programming-free.com/2014/01/spring-mvc-40-restful-web-services.html)。比较这两个 web.xml 文件,它们几乎完全相同,除了欢迎文件列表以及 javaee/web-app_3_1.xsd 和 javaee/web-app_2_5.xsd 之间的区别。我还将控制器更改为简单的“Hello [name]”格式,就像我遵循的上一个指南一样,我认为这不会导致更改。

对于如何处理此错误的任何帮助将不胜感激。

【问题讨论】:

    标签: java spring tomcat


    【解决方案1】:

    如果您使用 XML,只需添加 <absolute-ordering />。 如果您使用所有 Java 配置(无 XML),则不能使用 <absolute-ordering /> 技巧。 对于所有 Java 配置,可以通过删除文件 WEB-INF/lib/spring-web-5.1.5.RELEASE-sources.jar 来解决此问题 请务必使用适合您的 Spring 发行版的版本号进行更新。

    【讨论】:

    • 删除额外的 spring_web 片段可能在所有情况下都更好:这允许 OP 使用 Spring 的 WebApplicationInitializers。
    【解决方案2】:

    您正在寻找的错误可能是这样的:

    原因:java.lang.IllegalArgumentException:找到多个名为 [spring_web] 的片段。这对于相对排序是不合法的。有关详细信息,请参阅 Servlet 规范的第 8.2.2 节 2c。考虑使用绝对排序。

    你需要:

    <absolute-ordering /> 标记添加到您的web.xml 中的<display-name> 标记下方。应该可以。

    【讨论】:

    • 是的,成功了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    • 2015-12-17
    • 2016-09-23
    • 2014-05-25
    • 2019-10-11
    • 1970-01-01
    相关资源
    最近更新 更多