tomcat7:run ClassCastException解决

来源:互联网 发布:java多线程运用场景 编辑:程序博客网 时间:2024/05/23 14:02

idea使用maven创建的ssm工程,添加插件,使用tomcat7:run时出现如下异常

java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[/Management]]at java.util.concurrent.FutureTask.report(FutureTask.java:122)at java.util.concurrent.FutureTask.get(FutureTask.java:192)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:266)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at java.lang.Thread.run(Thread.java:748)Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[/Management]]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.ServletContainerInitializerat org.apache.catalina.startup.ContextConfig.getServletContainerInitializer(ContextConfig.java:1670)at org.apache.catalina.startup.ContextConfig.getServletContainerInitializers(ContextConfig.java:1652)at org.apache.catalina.startup.ContextConfig.processServletContainerInitializers(ContextConfig.java:1562)at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1270)at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:878)at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:376)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:5322)at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)... 6 more

其中有一个原因是:

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

 即:javax.servlet.ServletContainerInitializer不能转换成org.springframework.web.SpringServletContainerInitializer。

主要是使用tomcat7:run 是使用的包冲突了

这个时候可检查:pom.xml中与jsp与servlet相关的部分

比如

  <!-- JSP相关 -->    <dependency>      <groupId>jstl</groupId>      <artifactId>jstl</artifactId>      <version>${jstl.version}</version>    </dependency>    <dependency>      <groupId>javax.servlet</groupId>      <artifactId>javax.servlet-api</artifactId>      <version>3.0.1</version>      <scope>provided</scope>    </dependency>    <dependency>      <groupId>javax.servlet.jsp</groupId>      <artifactId>jsp-api</artifactId>      <version>2.1</version>      <scope>provided</scope>    </dependency>

如果出现了这个bug,可以检查这些节点中有没有

 <scope>provided</scope>
这一条属性

至于scope的值 可以参考http://blog.csdn.net/daihui05/article/details/7476976 ,这里不做多介绍。另外这个也有可能是引用包不对:比如当我使用验证码包:

 <!--验证码-->        <dependency>            <groupId>com.github.penggle</groupId>            <artifactId>kaptcha</artifactId>            <version>${kaptcha.version}</version>        </dependency>

它依赖的包不是:

    <dependency>      <groupId>jstl</groupId>      <artifactId>jstl</artifactId>      <version>${jstl.version}</version>    </dependency>    <dependency>      <groupId>javax.servlet</groupId>      <artifactId>javax.servlet-api</artifactId>      <version>3.0.1</version>      <!--<scope>provided</scope>-->    </dependency>    <dependency>      <groupId>javax.servlet.jsp</groupId>      <artifactId>jsp-api</artifactId>      <version>2.1</version>      <scope>provided</scope>    </dependency>

而是

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


原创粉丝点击