spring boot使用thymeleaf模板的方法詳解
前言
Thymeleaf 是一個(gè)跟 Velocity、FreeMarker 類似的模板引擎,它可以完全替代 JSP 。相較與其他的模板引擎,它有如下三個(gè)極吸引人的特點(diǎn):
1.Thymeleaf 在有網(wǎng)絡(luò)和無網(wǎng)絡(luò)的環(huán)境下皆可運(yùn)行,即它可以讓美工在瀏覽器查看頁面的靜態(tài)效果,也可以讓程序員在服務(wù)器查看帶數(shù)據(jù)的動態(tài)頁面效果。這是由于它支持 html 原型,然后在 html 標(biāo)簽里增加額外的屬性來達(dá)到模板+數(shù)據(jù)的展示方式。瀏覽器解釋 html 時(shí)會忽略未定義的標(biāo)簽屬性,所以 thymeleaf 的模板可以靜態(tài)地運(yùn)行;當(dāng)有數(shù)據(jù)返回到頁面時(shí),Thymeleaf 標(biāo)簽會動態(tài)地替換掉靜態(tài)內(nèi)容,使頁面動態(tài)顯示。
2.Thymeleaf 開箱即用的特性。它提供標(biāo)準(zhǔn)和spring標(biāo)準(zhǔn)兩種方言,可以直接套用模板實(shí)現(xiàn)JSTL、 OGNL表達(dá)式效果,避免每天套模板、該jstl、改標(biāo)簽的困擾。同時(shí)開發(fā)人員也可以擴(kuò)展和創(chuàng)建自定義的方言。
3.Thymeleaf 提供spring標(biāo)準(zhǔn)方言和一個(gè)與 SpringMVC 完美集成的可選模塊,可以快速的實(shí)現(xiàn)表單綁定、屬性編輯器、國際化等功能。
下面這篇文章將給
整體步驟:
(1) 在pom.xml中引入thymeleaf;
(2) 如何關(guān)閉thymeleaf緩存
(3) 編寫模板文件.html
spring Boot默認(rèn)就是使用thymeleaf模板引擎的,所以只需要在pom.xml加入依賴即可:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
Thymeleaf緩存在開發(fā)過程中,肯定是不行的,那么就要在開發(fā)的時(shí)候把緩存關(guān)閉,只需要在application.properties進(jìn)行配置即可:
######################################################## ###THYMELEAF (ThymeleafAutoConfiguration) ######################################################## #spring.thymeleaf.prefix=classpath:/templates/ #spring.thymeleaf.suffix=.html #spring.thymeleaf.mode=HTML5 #spring.thymeleaf.encoding=UTF-8 # ;charset=<encoding> is added #spring.thymeleaf.content-type=text/html # set to false for hot refresh spring.thymeleaf.cache=false
編寫模板文件src/main/resouces/templates/helloHtml.html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"
xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
<head>
<title>Hello World!</title>
</head>
<body>
<h1 th:inline="text">Hello.v.2</h1>
<p th:text="${hello}"></p>
</body>
</html>
編寫訪問路徑(com.kfit.test.web.TemplateController):
package com.kfit.test.web;
import java.util.Map;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* 模板測試.
* @author Administrator
*
*/
@Controller
publicclass TemplateController {
/**
* 返回html模板.
*/
@RequestMapping("/helloHtml")
public String helloHtml(Map<String,Object> map){
map.put("hello","from TemplateController.helloHtml");
return"/helloHtml";
}
}
啟動應(yīng)用,輸入地址:http://127.0.0.1:8080/helloHtml 會輸出:
Hello.v.2
from TemplateController.helloHtml
使用freemarker
使用freemarker也很簡單,
在pom.xml加入freemarker的依賴:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency>
剩下的編碼部分都是一樣的,說下application.properties文件:
######################################################## ###FREEMARKER (FreeMarkerAutoConfiguration) ######################################################## spring.freemarker.allow-request-override=false spring.freemarker.cache=true spring.freemarker.check-template-location=true spring.freemarker.charset=UTF-8 spring.freemarker.content-type=text/html spring.freemarker.expose-request-attributes=false spring.freemarker.expose-session-attributes=false spring.freemarker.expose-spring-macro-helpers=false #spring.freemarker.prefix= #spring.freemarker.request-context-attribute= #spring.freemarker.settings.*= #spring.freemarker.suffix=.ftl #spring.freemarker.template-loader-path=classpath:/templates/#comma-separatedlist #spring.freemarker.view-names= #whitelistofviewnamesthatcanberesolved
com.kfit.test.web.TemplateController:
/**
* 返回html模板.
*/
@RequestMapping("/helloFtl")
public String helloFtl(Map<String,Object> map){
map.put("hello","from TemplateController.helloFtl");
return"/helloFtl";
}
訪問地址:http://127.0.0.1:8080/helloFtl
Hello.v.2
from TemplateController.helloFtl
thymeleaf和freemarker是可以共存的。
------------------------------------------------------------------------------------------------------------------------------------------------
本文記錄一下幾點(diǎn):
一、資源文件的約定目錄結(jié)構(gòu)
二、Maven配置
三、開發(fā)時(shí)修改thymeleaf模板自動重新加載配置
四、thymeleaf常用基礎(chǔ)知識點(diǎn)
一、資源文件的約定目錄結(jié)構(gòu)
Maven的資源文件目錄:/src/Java/resources
spring-boot項(xiàng)目靜態(tài)文件目錄:/src/java/resources/static
spring-boot項(xiàng)目模板文件目錄:/src/java/resources/templates
spring-boot靜態(tài)首頁的支持,即index.html放在以下目錄結(jié)構(gòu)會直接映射到應(yīng)用的根目錄下:
classpath:/META-INF/resources/index.html classpath:/resources/index.html classpath:/static/index.html calsspath:/public/index.html
由于使用thymeleaf的HTML5模板,所以我將index.html模板文件直接放到了/src/java/resources/templates目錄下。然而這個(gè)目錄并不是首頁文件的默認(rèn)目錄,所以我們需要手動將應(yīng)用根路徑映射到/src/java/resources/templates/index.html下。這個(gè)在spring-mvc的Controller下映射一下就可以了。
@RequestMapping("/")
public String index(){
return "index";
}
在spring-boot下,默認(rèn)約定了Controller試圖跳轉(zhuǎn)中thymeleaf模板文件的的前綴prefix是”classpath:/templates/”,后綴suffix是”.html”
這個(gè)在application.properties配置文件中是可以修改的。
如下配置可以修改試圖跳轉(zhuǎn)的前綴和后綴
spring.thymeleaf.prefix: /templates/ spring.thymeleaf.suffix: .html
更過有關(guān)thymeleaf中的默認(rèn)這是可以查看org.springframework.boot.autoconfigure.thymeleaf.ThymeleafProperties這個(gè)類的屬性
二、Maven配置
在pom.xml中加入如下依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
原來關(guān)于spring-boot-starter-web等的依賴就可以去掉了,因?yàn)閟pring-boot-starter-thymeleaf是包含這些依賴的。而關(guān)于jsp的依賴也可以去掉了,因?yàn)槲覀円呀?jīng)完全拋棄jsp了。
三、開發(fā)時(shí)修改thymeleaf模板自動重新加載配置
Spring-boot使用thymeleaf時(shí)默認(rèn)是有緩存的,即你把一個(gè)頁面代碼改了不會刷新頁面的效果,你必須重新運(yùn)行spring-boot的main()方法才能看到頁面更改的效果。我們可以把thymeleaf的緩存關(guān)掉,用于支持頁面修改后重新發(fā)布到spring-boot內(nèi)嵌的tomcat中去。在application.properties配置文件中加入以下配置。
# Allow Thymeleaf templates to be reloaded at dev time spring.thymeleaf.cache: false server.tomcat.access_log_enabled: true server.tomcat.basedir: target/tomcat
四、thymeleaf常用基礎(chǔ)知識點(diǎn)
1、在html頁面中引入thymeleaf命名空間,即<html xmlns:th=http://www.thymeleaf.org></html> ,此時(shí)在html模板文件中動態(tài)的屬性使用th:命名空間修飾
2、引用靜態(tài)資源文件,比如CSS和JS文件,語法格式為“@{}”,如@{/js/blog/blog.js}會引入/static目錄下的/js/blog/blog.js文件
3、訪問spring-mvc中model的屬性,語法格式為“${}”,如${user.id}可以獲取model里的user對象的id屬性
4、循環(huán),在html的標(biāo)簽中,加入th:each=“value:${list}”形式的屬性,如<span th:each=”user:${users}”></span>可以迭代users的數(shù)據(jù)
5、判斷,在html標(biāo)簽中,加入th:if=”表達(dá)式”可以根據(jù)條件顯示html元素
<span th:if="${not #lists.isEmpty(blog.publishTime)}">
<span id="publishtime" th:text="${#dates.format(blog.publishTime, 'yyyy-MM-dd HH:mm:ss')}"></span>
</span>
以上代碼表示若blog.publishTime時(shí)間不為空,則顯示時(shí)間
6、時(shí)間的格式化,
${#dates.format(blog.publishTime,'yyyy-MM-dd HH:mm:ss')}
表示將時(shí)間格式化為”yyyy-MM-dd HH:mm:ss”格式化寫法與Java格式化Date的寫法是一致的。
7、字符串拼接,有兩種形式
比如拼接這樣一個(gè)URL:/blog/delete/{blogId}
第一種:th:href="'/blog/delete/' + ${blog.id }" rel="external nofollow"
第二種:th:href="${'/blog/delete/' + blog.id }" rel="external nofollow"
總結(jié)
以上就是這篇文章的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
- Springboot使用thymeleaf動態(tài)模板實(shí)現(xiàn)刷新
- Spring Boot集成Thymeleaf模板引擎的完整步驟
- springboot如何使用thymeleaf模板訪問html頁面
- Spring boot搭建web應(yīng)用集成thymeleaf模板實(shí)現(xiàn)登陸
- 詳解SpringBoot+Thymeleaf 基于HTML5的現(xiàn)代模板引擎
- springboot用thymeleaf模板的paginate分頁完整代碼
- springboot中thymeleaf模板使用詳解
- Springboot Thymeleaf模板文件調(diào)用Java類靜態(tài)方法
- Spring Boot thymeleaf模板引擎的使用詳解
相關(guān)文章
Java經(jīng)典排序算法之快速排序代碼實(shí)例
這篇文章主要介紹了Java經(jīng)典排序算法之快速排序代碼實(shí)例,快速排序?qū)崿F(xiàn)的思想是指通過一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨(dú)立的兩部分,其中一部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)都要小,然后再按此方法對這兩部分?jǐn)?shù)據(jù)分別進(jìn)行快速排序,需要的朋友可以參考下2023-10-10
動態(tài)上傳jar包熱部署的實(shí)戰(zhàn)詳解
開發(fā)系統(tǒng)過程中遇到的一個(gè)需求,系統(tǒng)給定一個(gè)接口,用戶可以自定義開發(fā)該接口的實(shí)現(xiàn),并將實(shí)現(xiàn)打成jar包,上傳到系統(tǒng)中。系統(tǒng)完成熱部署,并切換該接口的實(shí)現(xiàn)。本文詳細(xì)介紹了實(shí)現(xiàn)方法,需要的可以參考一下2022-10-10
kafka啟動報(bào)錯(Cluster ID)不匹配問題以及解決
這篇文章主要介紹了kafka啟動報(bào)錯(Cluster ID)不匹配問題以及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12
MyBatis全局映射文件實(shí)現(xiàn)原理解析
這篇文章主要介紹了MyBatis全局映射文件實(shí)現(xiàn)原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
OpenFeign超時(shí)時(shí)間設(shè)置不生效問題排查記錄
文章主要講述了在升級Spring Boot 3后,發(fā)現(xiàn)配置文件中的OpenFeign超時(shí)時(shí)間設(shè)置不生效的問題,通過查看FeignClientFactoryBean類和FeignClientProperties類的源碼,發(fā)現(xiàn)配置讀取的方式發(fā)生了變化,從而導(dǎo)致超時(shí)時(shí)間設(shè)置不生效2024-11-11
MyBatis Plus實(shí)現(xiàn)一對多的查詢場景的三種方法
MyBatis Plus提供了多種簡便的方式來進(jìn)行一對多子查詢,本文主要介紹了MyBatis Plus實(shí)現(xiàn)一對多的查詢場景的三種方法,具有一定的參考價(jià)值,感興趣的可以了解一下2024-07-07
Spring實(shí)戰(zhàn)之緩存使用condition操作示例
這篇文章主要介紹了Spring實(shí)戰(zhàn)之緩存使用condition操作,結(jié)合實(shí)例形式分析了Spring緩存使用condition具體配置、屬性、領(lǐng)域模型等相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2020-01-01
基于springMvc+hibernate的web application的構(gòu)建
下面小編就為大家?guī)硪黄趕pringMvc+hibernate的web application的構(gòu)建。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-10-10

