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 找了可用版本,才確認(rèn)了這個 2.7.18.RELEASE 可用。
怎么判斷thymeleaf是否成功集成了? 找到thymeleafProperties.class,在里面的 setPrefix 方法打個斷點,看看能不能進(jìn)去,能進(jìn)去就說明正常了。
文件結(jié)構(gòu)
一個最簡單的 SpringBoot 項目,要求啟動后訪問目標(biāo)端口時能訪問到自定義首頁,先不管首頁內(nèi)容是什么、長什么樣,新建一個 html 總是沒錯的。但新建在哪里呢?
哪里都可以。
考慮到 SpringBoot 項目打包后都是一個完整的 jar 包,這意味著如果不做干預(yù)的話,前端文件到時候也會被打包在 jar 中,修改起來就相當(dāng)麻煩。好在它可以被配置,因此可以做到相當(dāng)程度的 “偽” 前后端分離。
配置寫在 resources 下 application.yaml 文件的 spring.thymeleaf.prefix
里。
這里如果不修改的話,它默認(rèn)對應(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 相當(dāng)簡單,通過 /user
進(jìn)入 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
路徑下的文件,于是靈機(jī)一動,才終于發(fā)現(xiàn)是我的thymeleaf從頭到尾沒引入成功(pom里面的引入配置無法用 ctrl +鼠標(biāo)左鍵跳轉(zhuǎn)進(jìn)入,而我之前看它沒紅就沒管了……)
但實際上,即使我在 resources 文件夾下新建一個 WEB-INF 再把我的 index.html 拷貝進(jìn)去,它也還是 404 。這個沒太搞明白,鑒于也不是我的目標(biāo),就沒管了,大概率配置上的問題兩相干擾,結(jié)果誰都指望不上。加了 spring-boot-starter-thymeleaf 的版本號后才正常些。
踩坑支線
通常在配置修改無效的時候,第一個懷疑的是瀏覽器或 IDEA 的緩存,瀏覽器用 ctrl + F5,有時候得進(jìn)配置里搜索 “緩存” 后手動清除(我的 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ū)動,文中給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-04-04Java集合框架迭代器Iterator實現(xiàn)原理解析
這篇文章主要介紹了Java集合框架迭代器Iterator實現(xiàn)原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-08-08SpringBoot學(xué)習(xí)之Json數(shù)據(jù)交互的方法
這篇文章主要介紹了SpringBoot學(xué)習(xí)之Json數(shù)據(jù)交互的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12使用redisTemplate從redis獲取所有數(shù)據(jù)
這篇文章主要介紹了使用redisTemplate從redis獲取所有數(shù)據(jù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06SpringBoot項目導(dǎo)入外部jar包的詳細(xì)指南
在開發(fā)SpringBoot項目時,我們經(jīng)常需要引入一些外部的jar包來增強(qiáng)項目的功能,這些jar包可能不是Maven中央倉庫中的,或者我們想要使用特定版本的jar包,本文將詳細(xì)介紹如何在SpringBoot項目中導(dǎo)入外部jar包,需要的朋友可以參考下2024-10-10手寫redis@Cacheable注解?支持過期時間設(shè)置方式
這篇文章主要介紹了手寫redis@Cacheable注解?支持過期時間設(shè)置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01