springboot+thymeleaf打包成jar後找不到靜態資源的坑及解決

問題描述

使用的springboot開發項目,在開發階段沒有任何問題,然而在打成jar包準備進行測試發佈時,出現

org.thymeleaf.exceptions.TemplateInputException:Error resolving template [login], template might not exist or might not be accessible by any of the configured Template Resolvers

首頁都進不去。

網上逛瞭一圈,大多數都是說controller在return的時候去掉前面的斜杠,即:

@Controller("/index")
public String index(){
    return "/index"; 
    //把"/index" 變成"index"
    //如 return "index"
}

先不說這樣並不可行,就算可以,上百個controller難道要一個一個改?果斷放棄這條思路。

解決思路及最終解決步驟

從錯誤信息上看,很明顯是找不到對應的html文件,先來看一下我的項目文件目錄結構:

這裡就要批評一下自己瞭,這個webapp是我自己加上的,你問我為什麼?因為之前springMvc的結構就是這樣的。。。。

這就是讀書讀一半的惡果瞭,同學們要引以為戒啊。

然後看一下yml文件的配置:

這裡主要是配置springmvc支持的,手動加上前面的webapp目錄,把靜態資源往上一放,在yml再配置一下springmvc支持,項目運行起來那是一點問題都沒有,假如後面項目打包成war包,一樣可以完美運行。然而。。。。

當我打包成jar包後,完全沒辦法運行啊。。。。

然後我用winrar打開jar包,想看看我的文件都去哪瞭。。。。

這個是jar包打開最外層,再往下找,看看boot-inf裡面有什麼

我的靜態資源文件去哪啦???

正常的目錄結構應該是這樣的(以tomcat為例):

這說明我的webapp下面的文件一個也沒有編譯進jar包裡,能找到文件才怪瞭。。。

知道瞭問題所在,那剩下來的就是如何解決掉這個問題瞭

springboot有說明:所有的靜態文件都應該放在static、templates或者resources下(我怎麼好像記得是4個???)。

個人比較喜歡resources,所以就先新建瞭一個resources文件夾,然後把所有的資源文件都放到瞭resources文件夾下面:

文件移動過來後,再重新編譯,然後再去找,終於找到瞭這些可愛的文件:

最後一步:配置springMvc的前後綴:

這裡註意一下最後的斜杠不能少。

重新編譯後,終於可以正常運行起來。

springboot+thymeleaf打jar包後500

最近一個項目的後臺框架我選用的springboot+thymeleaf,項目在windows環境下用idae運行的一點問題都沒有,可是為什麼打jar包放在linux上就訪問報錯呢?

我仔細一看,controller層返回的路徑manageLogin.html中的L我沒有大寫,果然改完就沒問題瞭,那為什麼在idae中沒問題呢?原來是idea中忽略瞭大小寫。

這麼傻的錯誤,大概隻有我會犯吧!

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: