Cannot cast SpringServletContainerInitializer to javax.servlet.ServletContainerInitializer

一個項目中,使用Tomcat7 啓動報錯了:java

重: Failed to detect ServletContainerInitializers for context with name [/rpd-bi]
java.io.IOException: java.lang.ClassCastException: Cannot cast org.springframework.web.SpringServletContainerInitializer to javax.servlet.ServletContainerInitializer
	at org.apache.catalina.startup.WebappServiceLoader.loadServices(WebappServiceLoader.java:206)
	at org.apache.catalina.startup.WebappServiceLoader.load(WebappServiceLoader.java:158)
	at org.apache.catalina.startup.ContextConfig.processServletContainerInitializers(ContextConfig.java:1579)
	at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1280)
	at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:888)
	at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:388)
	at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
	at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5522)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1571)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1561)
	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: java.lang.ClassCastException: Cannot cast org.springframework.web.SpringServletContainerInitializer to javax.servlet.ServletContainerInitializer
	at java.lang.Class.cast(Class.java:3369)
	at org.apache.catalina.startup.WebappServiceLoader.loadServices(WebappServiceLoader.java:198)
	... 15 more

 

可是若是換成 Tomcat8.5就沒有問題.web

 

百度的話,通常都說是 相關 servlet  jar 包衝突.spring

查看了一下maven 依賴確實有 servlet-api , 若是使用 Tomcat 啓動項目的話,通常Tomcat 裏面都自帶了 servlet-api 的。apache

排除一下。api

<dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-tools</artifactId>
            <version>2.0</version>
             <exclusions>
            	<exclusion>
            		<groupId>javax.servlet</groupId>
  					<artifactId>servlet-api</artifactId>
            	</exclusion>
            </exclusions> 
        </dependency>


再次重啓以後,仍是報錯了

再次 修改
 <!-- servlet-api -->
          <dependency>
            <groupId>org.glassfish</groupId>
            <artifactId>javax.servlet</artifactId>
            <version>3.1.1</version>
             <scope>provided</scope> 
        </dependency>  

必定要加上 provided , 同時還不能去掉。去掉仍是會報錯的。

 

參考 https://blog.csdn.net/imjcoder/article/details/79250992app

參考 https://blog.csdn.net/u013704227/article/details/46460913maven

相關文章
相關標籤/搜索