tomcat7启动报错Failed to start component [StandardEngine[Tomcat].StandardHost[localhost]

项目报错详细信息如下,因为项目以前成功启动过,所以再次启动报错了有点奇怪(其实报错信息基本看第一行就够了,这里贴出来只是让大家看起来直观一点)

严重: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component 
[StandardEngine[Tomcat].StandardHost[localhost].StandardContext[/ebookshop]]
	at java.util.concurrent.FutureTask.report(FutureTask.java:122)
	at java.util.concurrent.FutureTask.get(FutureTask.java:188)
	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1123)
	at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:800)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
	at java.util.concurrent.FutureTask.run(FutureTask.java:262)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.catalina.LifecycleException: Failed to start component 
[StandardEngine[Tomcat].StandardHost[localhost].StandardContext[/ebookshop]]
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
	... 6 more
Caused by: java.lang.LinkageError: loader constraint violation: loader 
(instance of org/apache/catalina/loader/WebappClassLoader) previously initiated loading for a different type with
 name "javax/servlet/ServletContext"
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
	at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
	at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1191)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1669)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)
	at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.
java:167)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5423)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	... 6 more


1、排查是否是jar包的问题

 启动的jar是否都包含在lib里


2、引入servlet依赖,并把其scope设置为provided,具体设置如下(这里给出我的配置仅供参考,具体的在pom.xml文件的对应节点下将scope设置为provided即可)

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

    <!-- java ee jar 包 -->
    <dependency>
      <groupId>javax</groupId>
      <artifactId>javaee-api</artifactId>
      <version>6.0</version>
      <scope>provided</scope>
    </dependency>

    <!-- JSP相关 -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.0</version>
      <scope>provided</scope>
    </dependency>


3、其它检查

(1)以上两点都排查了没有问题之后项目仍然启动报错,由于IDE使用的是Intell J,我又尝试了右键->maven->Reimport,仍然不行

(2)百思不得其解之后我想到了一种情况,上次为了尝试jetty,在pom.xml文件中同时配置了jetty和tomcat,很奇怪的是jetty能够启动但是tomcat无法启动,我将jetty相关的配置注释掉之后再次启动tomcat,启动正常


4、总结

写代码的时候碰到问题是很正常的事情,如果控制台有报错信息的话最好了,根据报错信息去网上找找前辈们是怎么解决的,但别人遇到的问题也不一定具有普适性,还是要结合别人的解决方法思考自己可能出错的地方,对问题进行排查并将它解决吐舌头


猜你喜欢

转载自blog.csdn.net/mxw968/article/details/76873376