SpringBoot使用Thymeleaf模塊訪問不了靜態頁面
最近學習SpringBoot的過程中使用了Thymeleaf模塊引擎,頁面發送請求后老是無法顯示靜態頁面,所有的步驟都是參考資料來執行,自我檢查好久都沒有找到問題的答案,哎呦,我這暴脾氣就上來了,一個小頁面就想難倒我?那我還怎么找到ONE PIECE?
下面就給大家分享一下我悲慘的心路歷程:
要使用Thymeleaf模塊引擎,我們首先在pom文件中引入相關依賴如下:
這邊我們不需要指定版本,因為SpringBoot默認會使用spring-boot-starter-parent給我們進行項目依賴版本的管理,這里我參考手冊,指定了Thymeleaf模塊引擎的版本3.0,這里我們注意一下,我自定義Thymeleaf版本同時也指定了thymeleaf-layout-dialect的版本,當使用Thymeleaf3作為主程序時,我們的thymeleaf-layout-dialect布局功能的版本要是2以上,當使用Thymeleaf2作為主程序時,我們的thymeleaf-layout-dialect布局功能的版本要是1以上。至於具體原因,我們可以在GitHub上查看thymeleaf-layout-dialect可以看到:
Thymeleaf-layout-dialect布局功能版本2以上的版本才是重寫了來支持Thymeleaf 3的。
如何使用,我參考了官方使用文檔:
自己定義了Thymeleaf模塊引擎的版本3。
接下來我寫了一個簡單的controller來驗證一下是否使用成功:
這時意外出現了:
原來是我寫的RequestMapping中指定的路徑和返回的視圖名沖突了,修改一下視圖名或者路徑就可以了,這個也不是什么高深的問題,只不過新手的話,比較容易疏忽,這一塊還是要避免的。修改后我們看下結果,果然,福無雙至,禍不單行,運行后結果如下:
黑人問號???
出現No message available這種問題,一般這種情況,可能是URL錯誤或者啟動類沒有掃描到,檢查一下路徑和啟動類,沒毛病,我還在controller里面加上了在控制台打印的話,運行后也是能接受到請求的,但是就是返回不了頁面的內容,一切都是這么合理,能想到的就是版本問題了,果然,網上也有人指出來是版本兼容問題,廢話不多說,改版本:
我把Thymeleaf的版本號改成最新的3.0.11,執行后,果然奏效:
不過問題雖然解決了,但是這個版本號是從官方手冊上看到了,於是倔強的我把Thymeleaf 3.0.2~3.0.11所有的版本都試了一遍(是個狼人??),最后發現,3.0.2~3.0.7,項目啟動正常,但是無法返回頁面,3.0.8~3.0.9,項目啟動時會報出一些提示信息:
3.0.10~3.0.11,項目正常啟動,且可以返回頁面信息。
最后找了一下官網的手冊,發現只有1.5.22版本的SpringBoot有使用版本的推薦(可惜使用下來發現不能用),2.1.7版本的手冊上並沒有寫,不過查看了一下2.1.7版本的spring-boot-starter-parent,發現SpringBoot中默認使用的Thymeleaf版本和布局功能的版本都挺新的,我們使用過程中可以不用自己制定版本,用默認的就行了:
以上就是我解決這個問題的過程,大概原因就是版本兼容問題,我們可以使用SpringBoot默認的版本配置,或者使用我如上嘗試成功地配置版本,至於深層次原因,暫時還沒有找到比較權威的資料來證明,如果有哪位巨佬了解,還望不吝賜教。