有一次啟動springboot項目的時候,報了一個非常奇怪的錯誤,說是找不到servletContext,springboot不是自帶tomcat的嗎?
在網上找了好久,說是用以下方式解決。
解決方式:
將tomcat的lib包下的servlet-api.jar 拷貝到java的jre下的lib里即可。(需要在idea中重新導入一下jdk)
mac 電腦下尋找java安裝目錄方式:在終端下執行
/usr/libexec/java_home -V
但是查看同事的java的jre包下並沒有這個jar,但是人家都能啟動起來。這個就不知到為什么了?
雖然自己解決了這個問題,卻不知所以然。。。。
后來我發現我們的項目里用的是 undertow服務器,難道是跟這個有關系嗎?
2.另一種解決方式:
今天將項目的服務器由tomcat換成undertow,發現項目在本地可以啟動成功,但是發不到服務器就啟動不成功,就報跟上面同樣的錯誤,原來是我本地的jre環境有sevlet-api,但是我不能也往服務器的jre也放同樣的吧,畢竟這樣不合理。后來就查找原因,原來是undertow的jar包中已經有了sevlet-api 3.1版本的,但是為何啟動不成功呢,原來我的另一個jar包中也有sevlet-api,而且還是2.5版本的,
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>compile</scope>
</dependency>
項目在啟動的時候優先找到了2.5版本的,而2.5版本的ServletContext類里沒有getClassLoader這個方法,所以才報的錯,解決方式是將2.5版本的排除,服務器就啟動成功了。
總結:看來maven項目的依賴還得多研究。