今天在學習用springboot打war包,將打好的war包部署到tomcat中,然后啟動訪問頁面的時候,tomcat窗口報了以下的錯誤:
溫馨提示:關於如何在spring boot打war包,可以參考這個視頻:https://www.bilibili.com/video/BV1PZ4y1j7QK?p=68
看到這個錯誤感到很奇怪,不知道原因是什么。首先呢,在打war包之前,我在idea上訪問過我的地址,確實是能夠正常訪問的,說明我的代碼應該是沒有語法錯誤的。當然了,如果代碼有錯誤也就不會報上面的錯誤了。我復制這個錯誤去網上找了一圈,很多人都說應該是缺少編譯jsp對應的jar包,但是想不明白的是,解析jsp頁面的依賴我在pom文件中都導入了的,而且在打war包之前也測試過頁面時可以正常訪問的,為什么打war包之后運行就報JSP的錯誤了呢?
我推測:如果程序沒問題的話,那大概率是服務器版本的問題。我部署war包的tomcat的版本是:9.0.30的,我去看下我在pom文件中導入的解析jsp頁面的版本是否對得上,如下圖所示:
進入后發現,這個父工程還有父工程依賴,繼續按住ctrl鍵進入,如下圖所示:
進入后發現,這個pom文件就是最終管理的我們依賴引入的版本的一個文件,如下圖所示,很多依賴的版本:
按住ctrl+f鍵,可以搜索一下導入的解析jsp頁面的依賴的版本,如下圖所示:
可以看到這里引用的是跟tomcat版本一致的依賴,那么這個依賴是多少呢?可以再在搜索框中輸入進行查詢,如下圖所示:
可以看到定義的tomcat的版本是:9.0.41。而我在上文說過,我部署war包的tomcat的版本是9.0.30,這就難怪了,應該是我的服務器版本過低導致的編譯不了jsp頁面導致的報錯。在這里呢,解決的方法有兩種,第一:下載跟jsp依賴對應的tomcat的版本進行部署;第二種:我們手動將上面的 tomcat.version的版本號改成我們對應的部署服務器的版本號。在這里,我兩種方法都演示一遍,不為什么,只是我很有時間,我閑的胃疼。
首先去apache官網下載對應版本的tomcat如下圖所示,因為我使用的spring boot的版本是當前最新的,對應的tomcat最新的版本也是9.0.41,如下圖所示:
下載完畢后,直接解壓在當前的文件夾中,然后在idea中重新打war包,將war包部署到webapp目錄下,然后進入tomcat的bin目錄,開始啟動tomcat,奇怪的是,我一點擊啟動文件:shutdown.bat 窗口一閃而過,這是怎么回事呢?我去網上搜了一下,參考了別人博文的做法:https://blog.csdn.net/qq904069486/article/details/80909780 決定在shutdown.bat文件的末尾加入pause命令,看下具體的原因,如下圖所示:
再次啟動,命令行的信息如下圖所示:
這回算是明白了,原來是我的環境變量沒有配置為當前的tomcat的文件位置,而我又把之前舊的tomcat的文件刪除了,另外需要注意的是,如果你配置了tomcat的環境變量,就算你不刪除原來的,在你啟動其他版本的tomcat的時候記得也要修改環境變量為對應的部署的tomcat的環境變量,否則啟動的服務器還是原來的tomcat而不是你當前部署的這個tomcat。舉個簡單的例子,我原來配置的環境變量為:9.0.30,而我下載了一個9.0.41的,我在9.0.41的bin目錄中雙擊啟動文件,沒有重新修改環境變量為9.0.41的目錄的話,那么啟動的還是9.0.30這個服務器的。因為你在環境變量中配置的就是9.0.30這個服務器嘛。
所以接上面所說的,我啟動tomca一閃而過的原因就是我環境變量沒有配對,我需要改成下圖的環境變量:
然后保存配置,重新啟動tomcat,這次窗口就不會一閃而過了,能夠正常啟動,再次訪問jsp的url地址,是可以成功訪問到的。第一種方法圓滿結束!
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
第一種訪問有點麻煩啊,還有重新下載tomcat,如果我配置了tomcat環境變量的話我還要重新修改環境變量,當然了,其實不用配置tomcat環境變量的,這是我初學tomcat的時候配置的環境變量。如果你配置了tomcat環境變量,那么無論你在哪里點擊的啟動文件,就算你在9.0.41中點擊的啟動文件,只要環境變量中配置的是9.0.30的,那么啟動的服務器還是9.0.30的。
第二種方法就比較簡單了,直接在pom文件中更改對應的部署的tomcat的版本即可,如下圖所示:
注意:修改后,及時按ctrl+s鍵進行保存更改,然后對pom文件重新report一下,確保更改生效了再導包。按照這種方法,重新打完war包,部署到9.0.30的服務器時,也是可以訪問到jsp頁面的。如此,問題就得到解決了!
其實還有更加簡潔的方法,就是直接在當前的pom文件里面修改即可,這樣會覆蓋父文件的版本號設置,一樣能達到目的,如下圖所示: