子容器在启动期间失败

在将本地集成的Tomcat替换为Maven的Tomcat插件部署项目时,遇到'A child container failed during start'错误。排除了配置文件问题和Tomcat缓存后,发现是servlet-api坐标冲突导致的。解决方法是在pom.xml中为servlet-api依赖设置正确的作用域。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


遇错:
今天遇到一个Bug:A child container failed during start

中文翻译为:子容器在启动期间失败

事情是这样的,一开始我在做案例的时候使用的tomcat是本地集成的,项目能正常运行;

后来我将tomcat的本地集成换成了Maven中的Tomcat插件来部署项项目:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <version>2.2</version>
        </plugin>
    </plugins>
</build>

使用tomcat插件启动项目:
在这里插入图片描述

控制台直接报:A child container failed during start

在这里插入图片描述

错误分析:

首先要查看一遍自己所写的各种配置文件(pom,web,springMVC ,application,mybatis-config等xml文件)中,是否存在多余的配置;

1、在这里我原先使用本地的tomcat是可以启动项目的,所以应该不是配置的问题;

2、那么是tomcat缓存的问题?

3、清理tomcat缓存之后发现还是报错,

4、查看依赖的包:发现导入的servlet-api坐标存在问题

   <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
    </dependency>

解决问题:
前面说到依赖的坐标出了问题,出来什么问题呢?

原因很简单,在我们内置的tomcat的lib目录中已经有servlet-api这个jar包,如果在生成war包的时候生效就会和Tomcat中的jar包冲突,导致报错;外置的tomcat在打包的时候不会打进来,所以就不会报错;

解决方法也很简单:给servlet-api坐标添加作用范围就可以了

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值