Springboot:Caused by: java.lang.NoSuchMethodError...

學術袁發表於2018-08-07

當前問題,我從移動前端協助後臺開發跑專案遇到的第一個問題。本來吧,功力就不是很深厚。遇到這個問題,把身邊自詡已經工作3年5年的後臺”牛牛”請來幫忙解決下問題。結果,也是一個勁兒的網上Google、百度!可最終和我前期結果是一樣的無能為力。我想算了吧,哥們自己來!然後這裡貼出自己的解決思路就是為了讓更多朋友不要像我一樣浪費一天半時間就為解決這個不值當的小問題上。網上確實也有很多的這種問題出現並貼出在自己的部落格上,但是我覺得會有很多向我一樣剛接觸這種後臺開發的看不懂,就是看不懂。而我的目的,只為讓你瞬間解決問題,不再浪費時間,也不用去麻煩那些忙碌的大牛

問題展示:

Caused by: java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String;
    at org.apache.catalina.authenticator.AuthenticatorBase.startInternal(AuthenticatorBase.java:1122) ~[tomcat-embed-core-8.5.5.jar:8.5.5]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) [tomcat-embed-core-8.5.5.jar:8.5.5]
    ... 10 common frames omitted

圖片3d效果展示:

這裡寫圖片描述

其實真正出現問題的提示是這個:
這裡寫圖片描述

具體出現問題的專案結構請看:
這裡寫圖片描述
使用maven引入的jar包結構列表:
這裡寫圖片描述
這裡寫圖片描述

終極解決方案

根據最後解決問題的方式以及思路,其實在別人的部落格中還是能夠得出很多啟發的。比如這裡的她的部落格

其中有幾句很重要的資訊,基本已經和我的問題已經很接近了。而,我的問題就是出現在servlet-api.jar衝突導致的。其實這種問題就是這個原因。怎麼解決才是今天的主題?!簡單說就是,在安裝jdk的目錄,C:\Program Files\Java\jre1.8.0_141\lib\ext 下的如果有servlet-api.jar就刪掉,並且保證你啟動的tomcat版本Springboot專案tomcat版本與專案的有關tomcat的jar包版本基本一致。因為使用Springboot時候,專案本身就自動下載有servlet-api.jar功能的api。 所以最終就與...lib\ext下的jar導致了錯誤的結果。

解決問題的思路

正確時候,專案對應開發版本

spring-boot-starter-parente版本 Eclipse版本 Maven版本 Tomcat版本
1.4.1.RELEASE Release 4.7.0 (Oxygen) apache-maven-3.5.4 apache-tomcat-8.5.32

網上海量搜尋

這個一般都會有的,希望能夠順利些!但是即使不能完全的解決你的問題,但是能夠讓你明白你的問題出在什麼地方了,這是很重要的努力結果!

檢查你的配置環境

Tomcat環境是否正確配置

windows環境,下面是正確了。具體配置可Google。
這裡寫圖片描述
Eclipse環境,不太清楚流程也可Google。完了之後,在Eclipse上Server下使用start命令啟動一下就能判斷是否配置好了。

Maven環境是否正確配置

windows環境,下面是正確了。具體配置可Google。有兩個地方需注意要正確配置:
1,使用者配置上,這裡我自定義了本地倉庫。
這裡寫圖片描述
2,編譯環境上,maven編譯使用的是jdk不是jre。
這裡寫圖片描述
完了之後,使用maven命令test一下就能判斷是否配置好了。

解決問題

當然,我錯誤的配置時候,使用的是Tomcat7.0.8,然後又在官網下載了Tomcat8.5.32進行配置。
而在版本Tomcat7.0.8出錯的原因是,之前我把Tomcatlib包下的servlet-api.jar拷貝到了C:\Program Files\Java\jre1.8.0_141\lib\ext目錄下,而使用Springboot時候,maven又會下載Springboot配置下的jar包。由此這兩處的jar包就理所當然的衝突了!
我的解決方式,是下載了一個和專案中的Springboot下載版本相同的Tomcat並佈置到專案中,然後刪除了..lib\ext目錄下的servlet-api.jar。再次執行,就成功了。
來一起看下成功執行的結果:
這裡寫圖片描述
這裡寫圖片描述

相關文章