今天第一次遇到Failed to start component [StandardEngine[Catalina].StandardHost[localhost].錯誤,並且在錯誤提示的后半段出現了剛剛刪除的工程
因此出現這種錯誤的原因可能有:
1.tomcat存在緩存
右鍵點擊tomcat-->Clean Tomcat Work Directory.. --> Clean..
對tomcat進行清理
2.tomcat自己出現了問題
將tomcat刪除,重新添加並配置一下tomcat
3.其他情況...
Caused by: java.lang.NoClassDefFoundError: org/apache/tomcat/util/descriptor/tld/TldParser
原因還是依賴了spring boot 內部提供的tomcat的問題,將上面pom的配置改成下面這樣即可(作用域設置成依賴外部tomcat容器提供的jsp):
<dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency>
Springboot tomcat-embed-jasper依賴說明
使用過Springboot的同學都知道其已內置tomcat(spring-boot-starter-web),無需打war包,打成jar包直接運行。最近學習使用Springboot發現項目中的pom文件引入了tomcat-embed-jasper(對jsp的支持的依賴)但scope為provided。
於是不明白感覺springboot的tomcat應該自帶了tomcat-embed-jasper吧,遂將pom文件該依賴刪掉,eclipse啟動項目無報錯,訪問頁面發現所有的jsp頁面都會被下載而不能被訪問。但是又一個令我疑惑的問題是其依賴scope為provided,也就是說打包時該依賴不會被包含在lib包內,但是我的jar啟動的頁面訪問卻沒有問題。
以上說明一個問題:springboot自帶的tomcat並沒有攜帶tomcat-embed-jasper的依賴。
又做了一個實驗:將tomcat-embed-jasper的scope去掉后,打成jar包,啟動項目時報錯==>jasper的jar包沖突。
結論猜測:檢查pom文件后,猜測一定是spring-boot-maven-plugin(1.4.2.RELEASE)插件在打包時自動額外的添加tomcat-embed-jasper的支持。而我們在工具中啟動項目時並沒有打包,所以需要該依賴對我們eclipse中項目jsp的支持,為防止其打包沖突,遂設置其scope為provided。