部署springboot的war包到tomcat,靜態資源以及bootstrap等的url,以及controller的mapping映射等無法使用的問題

最近在部署一個springboot的war文件到tomcat的時候,出現了一大堆的404,找不到的問題,在eclipse調試中不曾出現。
後來仔細覈實發現,原來確實是路徑有問題。
在瀏覽器可以看見他的後臺訪問路徑如下:

XHR POST http://127.0.0.1:8080/home/welcome                    //這是一個mapping映射,到controller的
XHR POST http://127.0.0.1:8080/home/getTree     //這是一個對靜態資源的訪問

這個路徑沒毛病哈,跟我在eclipse中調試的時候的路徑一模一樣哈,可是就是報了404的錯誤。
原因就在於,怎麼能一模一樣呢?當然是錯的。
其實在網上任何一篇比較完整可靠的,教你怎麼生成war包的教程,的最後面,都會有這麼一句話,
http://localhost:[端口號]/[打項目名]/
因爲war包在tomcat中運行,不是直接運行的war包,第一步其實是tomcat會自動把這個war包解壓成一個war包的同名文件夾,你所有的class文件,以及各種靜態文件都在裏面。
因此,在通過網頁登錄的時候,理所當然,應該是要加上你的這個項目名,即你的這個文件夾的名字。
我在登錄我的主頁的時候,我是注意到了的,是加了項目名稱的,但是後面訪問目錄的時候,我看到一片飄紅,我想當然了,疏忽了,一下子沒想到。
訪問所有該文件夾下的內容,包括靜態文件以及怎麼mapping映射等各種涉及到路徑的文件,都是需要加上這個文件夾名稱的!
因此,他正確的訪問目錄應該是:

XHR POST http://127.0.0.1:8080/myproject/home/welcome                    //這是一個mapping映射,到controller的
XHR POST http://127.0.0.1:8080/myproject/home/getTree     //這是一個對靜態資源的訪問

解決這一問題,我參考了幾種方法,
1、把我的靜態文件都用了thymeleaf的th:src="@{XXXXX}"的方式引用。
2、把我部署的項目文件夾下的內容,全部複製到tomcat的webapps下的ROOT文件夾下,注意,不帶項目文件夾,是該文件夾根目錄下的所有內容。
3、在配置文件中,配置server.servlet.context-path=/myproject,這個會給所有的controller中的mapping,以及靜態文件的添加統一前綴,但是,要注意的是,這個不會自動爲html中的訪問mapping或者引用的路徑的請求路徑添加前綴,還是需要自行修改。比較方便的是,在你的映射路徑前面加上…,比如我的映射路徑位/net/loadData,修改成…/net/loadData,相對來說一勞永逸。
4、事實上,不需要配置server.servlet.context-path=/myproject,只需要在路徑位置上加上…/,如…/net/loadData,就不會出現這個bug了。當然配上了也沒什麼問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章