SpringBoot集成thymeleaf瀏覽器404的解決方案
引言
前后端不分離的古早 SpringMVC 項目通常會使用 thymeleaf 模板引擎來完成 html 頁面與后端接口之間的交互。如果要將項目架構(gòu)升級成 SpringBoot , thymeleaf 也可以照常集成。但有時候會踩到一些坑,特別是如今有了一些 AI 工具,而工具偶爾會抽風(fēng)時……
相關(guān)依賴
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.7.18</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<version>2.1.8.RELEASE</version>
</dependency>
</dependencies>
如果整體項目架構(gòu)采用的是 SpringCloud ,那么版本號完全可以寫在父項目的 pom,或具體的版本管理子項目中,其他的子服務(wù)在引入依賴時便無需額外再寫一行 version。
按網(wǎng)上大多數(shù)的教程,引入依賴時均沒有指定版本,我一開始也沒指定,項目也沒報錯,但是啟動后又一直無法訪問到預(yù)計的 html 文件。兜兜轉(zhuǎn)轉(zhuǎn)發(fā)現(xiàn) thymeleaf 居然沒引入成功……
這還有個小插曲,我問通義靈碼 SpringBoot 2.7.18 對應(yīng)的 thymeleaf 集成的版本是多少?它給我報了 3.1.8,喜聞樂見找不到,后來在阿里云云效 maven 找了可用版本,才確認了這個 2.7.18.RELEASE 可用。
怎么判斷thymeleaf是否成功集成了? 找到thymeleafProperties.class,在里面的 setPrefix 方法打個斷點,看看能不能進去,能進去就說明正常了。

文件結(jié)構(gòu)
一個最簡單的 SpringBoot 項目,要求啟動后訪問目標端口時能訪問到自定義首頁,先不管首頁內(nèi)容是什么、長什么樣,新建一個 html 總是沒錯的。但新建在哪里呢?
哪里都可以。
考慮到 SpringBoot 項目打包后都是一個完整的 jar 包,這意味著如果不做干預(yù)的話,前端文件到時候也會被打包在 jar 中,修改起來就相當麻煩。好在它可以被配置,因此可以做到相當程度的 “偽” 前后端分離。
配置寫在 resources 下 application.yaml 文件的 spring.thymeleaf.prefix 里。

這里如果不修改的話,它默認對應(yīng)的是 classpath:/templates/

spring:
thymeleaf:
prefix: file:xxxx/my-cloud2/ui/templates/
suffix: .html
cache: false
mode: HTML
encoding: UTF-8
踩坑之路
一開始沒引入成功時,項目啟動是完全正常的,控制臺也沒有報錯,只有瀏覽器一直在 404 。

不得已,多配置了幾行日志處理的參數(shù)。
logging:
level:
org:
springframework:
web:
servlet:
DispatcherServlet: DEBUG
thymeleaf: DEBUG
才在控制臺看到 404 真正對應(yīng)的內(nèi)容。

雖然看起來也沒什么用。
我一開始的 controller 相當簡單,通過 /user 進入 index 視圖:
@RequestMapping("user")
@Controller
public class UserController {
@GetMapping("/")
public String init(){
return "index";
}
}
404 后我又把 return 的字符串改成/index index.html /templates/index,但全部無效,心灰意冷地把 /templates/index 發(fā)給 AI,它說這種寫法通常是WEB-INF路徑下的文件,于是靈機一動,才終于發(fā)現(xiàn)是我的thymeleaf從頭到尾沒引入成功(pom里面的引入配置無法用 ctrl +鼠標左鍵跳轉(zhuǎn)進入,而我之前看它沒紅就沒管了……)
但實際上,即使我在 resources 文件夾下新建一個 WEB-INF 再把我的 index.html 拷貝進去,它也還是 404 。這個沒太搞明白,鑒于也不是我的目標,就沒管了,大概率配置上的問題兩相干擾,結(jié)果誰都指望不上。加了 spring-boot-starter-thymeleaf 的版本號后才正常些。
踩坑支線
通常在配置修改無效的時候,第一個懷疑的是瀏覽器或 IDEA 的緩存,瀏覽器用 ctrl + F5,有時候得進配置里搜索 “緩存” 后手動清除(我的 Chrome 有時候得這樣),IDEA的緩存就 File->Invalidate Caches / Restart ,再不行就 mvn clean 。
其實還有個地方,即便原先配置沒錯,只是重新選擇一下,有時候都挺能解決問題的(原理可能也是緩存?)
它就是:File->Project Settings->Modules->各個項目->Dependencies->Module SDK

打掃干凈后,再啟動就正常了。
到此這篇關(guān)于SpringBoot集成thymeleaf瀏覽器404的解決方案的文章就介紹到這了,更多相關(guān)SpringBoot集成thymeleaf 404內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何用Java實現(xiàn).env文件讀取敏感數(shù)據(jù)
這篇文章主要介紹了如何用Java實現(xiàn).env文件讀取敏感數(shù)據(jù),并提供了一個自動配置類EnvAutoConfiguration,common-env-starter-demo模塊展示了如何配置和啟動一個簡單的Spring Boot應(yīng)用程序,需要的朋友可以參考下2025-02-02
springboot應(yīng)用訪問zookeeper的流程
這篇文章主要介紹了springboot應(yīng)用訪問zookeeper的流程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01
Scheduled如何會在上次任務(wù)執(zhí)行完才會執(zhí)行下次任務(wù)
這篇文章主要介紹了Scheduled如何會在上次任務(wù)執(zhí)行完才會執(zhí)行下次任務(wù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08
Java實現(xiàn)WGS84/GCJ02/BD09的坐標互轉(zhuǎn)終極方案
這篇文章主要為大家詳細介紹了Java如何利用Geotools實現(xiàn)WGS84/GCJ02/BD09的坐標互轉(zhuǎn),文中的示例代碼講解詳細,需要的小伙伴可以了解下2025-09-09

