当前位置: 首页 > 知识库问答 >
问题:

Tomcat 8 Embedded-WebServlet-“启动期间子容器失败”

欧阳衡
2023-03-14

在读取web.xml之前,我就会出现以下错误(我从strace-ff中知道这一点)。

org.apache.catalina.LifecycleException: Failed to start component [StandardServer[-1]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
    at org.apache.catalina.startup.Tomcat.start(Tomcat.java:367)
    at app.http.TomcatServer.startTomcat(TomcatServer.java:87)
    at app.main.MainTools.startServer(MainTools.java:277)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardService[Tomcat]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:793)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 4 more
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:422)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 6 more
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:947)
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 8 more

貌似是这句台词引起的:

ctx.setResources(resources);

这是使@WebServlet工作所需的,如本文所述(实际上,WebServlet在任何项目中没有setresources就无法工作。我和其他人有一些使用setresources的工作项目)。

META-INF/services/java.nio.channels.spi.SelectorProvider
META-INF/services/javax.xml.parsers.SAXParserFactory
META-INF/services/org.apache.juli.logging.Log

虽然我没有这些文件,但我也有一个工作项目没有这些文件,所以它们显然不是必需的。我试着创建那个日志文件,因为它看起来像是Juli想告诉我什么。唉,它打开了org.apache.juli.logging.log,但没有向其中写入任何内容。

strace还显示,在打印异常之前,主Tomcat线程(成功地)stat使用了以下文件:

org/apache/catalina/core/ContainerBase$StartChild.class

尽管有这些活动,但它并不是stating或以任何方式查看WEB-INF内部!事实上,对任何名为web.xmlpom.xml的文件都没有访问权限。

虽然其他人已经看到了LifecycleException,但这似乎是一个新的上下文。例如,其他人看到了一种不同形式的异常,它有一个更有帮助的异常。还有一些人在独立的Tomcat中看到了类似的错误,但他们拥有$catalina日志。但是我还没有发现其他的问题/解决方案涉及到上面的,在嵌入式Tomcat中非常模糊的异常形式。

另外,我将Java日志级别设置为level.all,结果有很多输出,但没有明显有用的信息。如果grepinfosevere,则会得到:

2018.02.26 10:25:39.226 INFO: Initializing ProtocolHandler ["http-nio-8081"]
2018.02.26 10:25:39.241 INFO: Using a shared selector for servlet write/read
2018.02.26 10:25:39.249 INFO: Starting service [Tomcat]
2018.02.26 10:25:39.250 INFO: Starting Servlet Engine: Apache Tomcat/8.5.24
2018.02.26 10:25:39.309 SEVERE: A child container failed during start
2018.02.26 10:25:39.309 SEVERE: A child container failed during start
2018.02.26 10:25:39.312 SEVERE: Failed to start component [StandardServer[-1]]
2018.02.26 10:25:43.485 INFO: Starting shutdown.
2018.02.26 10:25:43.486 INFO: Starting shutdown.

有没有什么方法可以让我实现更好的日志记录,或者调用Tomcat中的一些东西,让它告诉我所有这些.jar等搜索它正在尝试做的事情?

共有1个答案

张丰
2023-03-14

您需要结合两种解决方案:

首先,验证MVN dependency:tree,这可以列出与这个特定的jarservlet-api:jar相关联的所有依赖项。

如果您发现某些依赖关系正在产生冲突,您可以通过两种方式工作:

    null

注意:请确保您使用的是mvn dependency:tree中列出的依赖项的正确版本和Id。

`<dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.0.1</version>
        <scope>provided</scope>
</dependency>`

MVN dependency:tree应生成:

`+- javax.servlet:javax.servlet-api:jar:3.0.1:provided (scope not updated to 
compile)`

这只有一种异常会在容器内部产生jar冲突,在本例中为servlet-api.jar

 类似资料:
  • 问题内容: 我有一个嵌入式Tomcat服务器,可以 很好地提供静态文件。 但是,当我添加开始工作所需的buildPath代码时,它在我的一个项目中不起作用(项目之间存在很多差异……价值约5万行)。 在读取之前,我收到以下错误(我从中知道)。 似乎是由以下行引起的: 这是需要做的工作,如所描述这里(实际上,WebServlet确实没有不工作,在任何项目中,我和其他人使用的一些工作项目)。 显示Tom

  • 问题内容: 我遇到错误了; 问题答案: 错误是 看来您有一个指的是您尚未声明的。 您需要具有以下声明

  • 我有一个Ubuntu Xenial容器,在我的Arch Linux计算机上安装了amd64体系结构。容器工作正常。但是,当我第二次尝试启动容器时,出现以下错误: 容器启动失败。 要获得更多详细信息,请在前台模式下运行容器。 其他信息可以通过设置--logfile和--log优先级选项获得。 是什么原因造成的? 在使用-F、-logfile和--logpriority选项运行后得到了这个。 lxc开

  • 我试图在Tomcat9中加载maven项目,显示启动期间一个子容器失败 这是我的pom。XMLI包括数据库jdbc和mysql依赖项以及HibernateSpring详细信息 我也用Spring来配置 这是我的maven Spring配置xml,包括db详细信息,db连接正常工作 当我添加连接tomcat的所有相关细节时,它正在停止并出错

  • 我正在开发一个多模块的maven项目,我想在Tomcat7中运行我的web项目,但我出现了这样的错误:“启动期间一个子容器失败”。 我继续操作:(右键单击web项目)->运行为->运行配置->goal:tomcat7:run,我有以下日志: 这是我的web.xml: 拜托,我需要你的帮助。

  • 我在我的eclipse中安装了Apache tomcat 7。我创建了一个服务器并启动它,它工作正常。当我尝试运行任何项目时,即使是一个简单的JSP hello world文件,也会发生以下错误。 例如:我用一个“index.jsp”创建了一个web动态项目,但是这个问题出现了,我不知道如何解决它。 严重:在启动java.util.concurrent期间,子容器失败。ExecutionExcep