org.springframework.web.SpringServletContainerInitializer cannot be cast to javax.servlet.ServletCon

来源:互联网 发布:酒瓶设计软件 编辑:程序博客网 时间:2024/05/24 05:02

搭建SSM架构的时候,有时启动的时候会抛出以上的异常,这个异常一般都是web.xml文件的内容有错,或者pom.xml有问题(jar包冲突),而且后者的可能性会大一点。
下面是这个异常的全部内容:

严重: A child container failed during startjava.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[]]    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: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(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[Tomcat].StandardHost[localhost].StandardContext[]]    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)    ... 6 moreCaused by: java.lang.ClassCastException: org.springframework.web.SpringServletContainerInitializer cannot be cast to javax.servlet.ServletContainerInitializer    at org.apache.catalina.startup.ContextConfig.getServletContainerInitializer(ContextConfig.java:1661)    at org.apache.catalina.startup.ContextConfig.processServletContainerInitializers(ContextConfig.java:1569)    at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1277)    at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:878)    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:369)    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5179)    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)    ... 6 more

根据org.springframework.web.SpringServletContainerInitializer cannot be cast to javax.servlet.ServletContainerInitializer我们可以发现可能和javax的jar包有关。检查pom文件,发现确实引入了相关的jar包,推断可能和tomcat的内置的相关jar包冲突了,解决方案很简单,我们只需要在引入jar包的时候,添加:

<scope>provided</scope>

让tomcat容器使用这个jar包,而不要使用自己lib里的该jar包。
scope一共有5个值,它们的作用如下:

* compile,缺省值,适用于所有阶段,会随着项目一起发布。 * provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。 * runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。 * test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。 * system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。
阅读全文
0 0