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。
推薦閱讀:
- SpringBoot如何返回頁面的實現方法
- springboot配置templates直接訪問的實現
- springboot訪問template下的html頁面的實現配置
- SpringBoot項目中如何訪問HTML頁面
- SpringBoot整合Thymeleaf與FreeMarker視圖層技術