SpringBoot集成thymeleaf瀏覽器404的解決方案
引言
前后端不分離的古早 SpringMVC 項目通常會使用 thymeleaf 模板引擎來完成 html 頁面與后端接口之間的交互。如果要將項目架構(gòu)升級成 SpringBoot , thymeleaf 也可以照常集成。但有時候會踩到一些坑,特別是如今有了一些 AI 工具,而工具偶爾會抽風時……
相關(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,或具體的版本管理子項目中,其他的子服務在引入依賴時便無需額外再寫一行 version。
按網(wǎng)上大多數(shù)的教程,引入依賴時均沒有指定版本,我一開始也沒指定,項目也沒報錯,但是啟動后又一直無法訪問到預計的 html 文件。兜兜轉(zhuǎn)轉(zhuǎn)發(fā)現(xiàn) thymeleaf 居然沒引入成功……
這還有個小插曲,我問通義靈碼 SpringBoot 2.7.18 對應的 thymeleaf 集成的版本是多少?它給我報了 3.1.8,喜聞樂見找不到,后來在阿里云云效 maven 找了可用版本,才確認了這個 2.7.18.RELEASE 可用。
怎么判斷thymeleaf是否成功集成了? 找到thymeleafProperties.class,在里面的 setPrefix 方法打個斷點,看看能不能進去,能進去就說明正常了。
文件結(jié)構(gòu)
一個最簡單的 SpringBoot 項目,要求啟動后訪問目標端口時能訪問到自定義首頁,先不管首頁內(nèi)容是什么、長什么樣,新建一個 html 總是沒錯的。但新建在哪里呢?
哪里都可以。
考慮到 SpringBoot 項目打包后都是一個完整的 jar 包,這意味著如果不做干預的話,前端文件到時候也會被打包在 jar 中,修改起來就相當麻煩。好在它可以被配置,因此可以做到相當程度的 “偽” 前后端分離。
配置寫在 resources 下 application.yaml 文件的 spring.thymeleaf.prefix
里。
這里如果不修改的話,它默認對應的是 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 真正對應的內(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)文章
使用IDEA直接連接MySQL數(shù)據(jù)庫的方法
這篇文章主要介紹了如何使用IDEA直接連接MySQL數(shù)據(jù)庫,首先需要新建一個空項目,第一次連接 需要先下載驅(qū)動,文中給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧2024-04-04Java集合框架迭代器Iterator實現(xiàn)原理解析
這篇文章主要介紹了Java集合框架迭代器Iterator實現(xiàn)原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-08-08SpringBoot學習之Json數(shù)據(jù)交互的方法
這篇文章主要介紹了SpringBoot學習之Json數(shù)據(jù)交互的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12使用redisTemplate從redis獲取所有數(shù)據(jù)
這篇文章主要介紹了使用redisTemplate從redis獲取所有數(shù)據(jù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06手寫redis@Cacheable注解?支持過期時間設置方式
這篇文章主要介紹了手寫redis@Cacheable注解?支持過期時間設置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01