tomcat部署的網站訪問不到靜態資源
問題描述:javaweb專案,tomcat釋出,別人寫的工程部署到自己的tomcat上,訪問不到靜態資源 404錯誤,但在別人的機器上可正常使用。好久不接觸前端程式碼了,最後發現居然是路徑問題。。。。
靜態資源在/WEB-INF/resources/下,已經在springMVC中對該目錄下的檔案放開訪問許可權了,而且在他的機器上能正常訪問,說明專案配置檔案應該是沒問題的
分析:
html訪問資源的路徑有兩種:1)相對路徑:不以"/"開頭;2)絕對路徑:以"/"開頭
好了,進入正題,說下這個為什麼跟tomcat有關。首先通常前端程式碼推薦以相對路徑的方式來呼叫資源,這樣在部署的時候不會因為部署服務名稱的變化造成資源路徑不正確;但是在這個例子里居然是用的絕對路徑(可能因為涉及的路徑比較複雜,考慮到相對路徑來回切換比較麻煩吧
tomcat
<Host>
.......
<Context path="" docBase="預設工程位置"></Context>
</Host>
就是這裡了,由於他加入了預設工程所以對於工程名appname的訪問http://localhost:8080/appname/和http://localhost:8080/是一樣的
再看html檔案中路徑的寫法:src="/resources/img1.png",這樣寫成絕對路徑,訪問時就變成了http://localhost:8080/resources/img1.png
由於他那裡tomcat進行了特殊配置,所以就等效為http://localhost:8080/appname
分析完畢,那麼說說解決方案吧,簡單來說有三種,歡迎補充
方案一:對tomcat進行配置同樣加入docBase的設定,個人不建議這麼做,因為你不知道線上環境或者另一個參與者的tomcat是否也有這種設定,這樣就降低了程式的可移植性
方案二:改成相對路徑,試了一下路徑比較複雜來回跳的話要確保每一個都是正確的,還是有一定難度的
方案三:改成絕對路徑,個人也是採用的這種方式,例如對上述例子中的圖片改成src="/appname/resources/img1.png"
問題解決!!!