Springboot模板引擎——Thymeleaf集成

模板引擎的作用

主要是為了使用戶界面與業(yè)務(wù)數(shù)據(jù)分離,從而提升開(kāi)發(fā)效率。

Thymeleaf簡(jiǎn)介

1、Thymeleaf是適用于Web和獨(dú)立環(huán)境的現(xiàn)代服務(wù)器端Java模板引擎。
2、其主要目標(biāo)是為開(kāi)發(fā)工作流程提供一種優(yōu)雅、高度可維護(hù)的創(chuàng)建模板的方式 。
3、Thymeleaf擁有適用于Spring Framework的模塊,能實(shí)現(xiàn)大量工具的集成以及功能的插入,是現(xiàn)代HTML5 JVM Web開(kāi)發(fā)的理想選擇。

Thymeleaf特點(diǎn)

1、動(dòng)靜結(jié)合:Thymeleaf 在有網(wǎng)絡(luò)和無(wú)網(wǎng)絡(luò)的環(huán)境下皆可運(yùn)行,即它可以讓美工在瀏覽器查看頁(yè)面的靜態(tài)效果,也可以讓程序員在服務(wù)器查看帶數(shù)據(jù)的動(dòng)態(tài)頁(yè)面效果。這是由于它支持 html 原型,然后在 html 標(biāo)簽里增加額外的屬性來(lái)達(dá)到模板+數(shù)據(jù)的展示方式。瀏覽器解釋 html 時(shí)會(huì)忽略未定義的標(biāo)簽屬性,所以 Thymeleaf 的模板可以靜態(tài)地運(yùn)行;當(dāng)有數(shù)據(jù)返回到頁(yè)面時(shí),Thymeleaf 標(biāo)簽會(huì)動(dòng)態(tài)地替換掉靜態(tài)內(nèi)容,使頁(yè)面動(dòng)態(tài)顯示。
2、開(kāi)箱即用:它提供標(biāo)準(zhǔn)和spring標(biāo)準(zhǔn)兩種方言,可以直接套用模板實(shí)現(xiàn)JSTL(JSP標(biāo)準(zhǔn)標(biāo)簽庫(kù))、 OGNL(對(duì)象導(dǎo)航圖語(yǔ)言)表達(dá)式效果,避免每天套模板、改標(biāo)簽的困擾。同時(shí)開(kāi)發(fā)人員也可以擴(kuò)展和創(chuàng)建自定義的方言。
3、多方言支持:Thymeleaf 提供spring標(biāo)準(zhǔn)方言和一個(gè)與 SpringMVC 完美集成的可選模塊,可以快速的實(shí)現(xiàn)表單綁定、屬性編輯器、國(guó)際化等功能。
4、與Springboot完美整合,Springboot提供了Thymeleaf的默認(rèn)配置,并且為Thymeleaf設(shè)置了視圖解析器,我們可以像以前操作JSP一樣來(lái)操作Thymeleaf。代碼幾乎沒(méi)有任何區(qū)別,就是在模板語(yǔ)法上有區(qū)別。

基于Springboot的Thymeleaf 集成

步驟1:引入依賴(可在創(chuàng)建工程時(shí)在可視化向?qū)е泄催x)

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

步驟2:配置thymeleaf(在application.properties中配置)

#指定模板所在的目錄
spring.thymeleaf.classpath=/templates/
#檢查模板路徑是否存在
spring.thymeleaf.check-template-location=true
#是否緩存,開(kāi)發(fā)模式下設(shè)置為false,避免改了模板還要重啟服務(wù)器,線上設(shè)置為true,可以提高性能。
spring.thymeleaf.cache=false
#模板文件后綴名
spring.thymeleaf.suffix= .html
#編碼格式
spring.thymeleaf.encoding=UTF-8
#content-type
spring.thymeleaf.servlet.content-type=text/html
#spring.thymeleaf.mode的默認(rèn)值是HTML5,其實(shí)是一個(gè)很嚴(yán)格的檢查,改為L(zhǎng)EGACYHTML5可以得到一個(gè)可能更友好親切的格式要求。
#比如你在使用Vue.js這樣的庫(kù),然后有<div v-cloak></div>這樣的html代碼,也被thymeleaf認(rèn)為不符合要求而拋出錯(cuò)誤。
spring.thymeleaf.mode = LEGACYHTML5

步驟3:在templates目錄下新建一個(gè)HTML文件,例如:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p th:text="'用戶名:'+${username}"></p>
<p th:text="'密碼:'+${password}"></p>
</body>
</html>

步驟4:在controller層新建一個(gè)類,例如:

@Controller
public class UserController {
    /*** 采用model往request域中存值,存入2個(gè)普通的字符串*
     * @param model
     * @return
     */
    @GetMapping("/userinfo")  //訪問(wèn)的地址
    public String userInfo(Model model) {
        String username="xxx";
        String password="123456";
        model.addAttribute("username", username);
        model.addAttribute("password", password);
        return "userInfo";
    }
}

拓展

JSTL(JSP標(biāo)準(zhǔn)標(biāo)簽庫(kù))

1、簡(jiǎn)介
JSTL標(biāo)簽是基于JSP頁(yè)面的,這些標(biāo)簽可以插入在JSP代碼中,本質(zhì)上JSTL也是提前定義好的一組標(biāo)簽,這些標(biāo)簽封裝了不同的功能,在頁(yè)面上調(diào)用標(biāo)簽時(shí),就等于調(diào)用了封裝起來(lái)的功能。
2、組成
(1)核心標(biāo)簽:核心標(biāo)簽庫(kù)是整個(gè)JSTL中最常用的部分,主要由以下幾部分組成:基本輸入輸出、流程控制、迭代操作和URL操作。負(fù)責(zé)Web應(yīng)用的常見(jiàn)工作,如:循環(huán)、表達(dá)式賦值、基本輸入輸出等。
(2)I18N格式標(biāo)簽庫(kù):用來(lái)格式化顯示數(shù)據(jù)的工作如:對(duì)不同區(qū)域的日期格式化等。
(3)XML標(biāo)簽庫(kù):用來(lái)訪問(wèn)XML文件的工作,支持JSP對(duì)XML文檔的處理。
(4)數(shù)據(jù)庫(kù)標(biāo)簽庫(kù):SQL標(biāo)簽庫(kù)包括了大部分訪問(wèn)數(shù)據(jù)庫(kù)的邏輯操作,包括查詢、更新、事務(wù)處理、設(shè)置數(shù)據(jù)源等??梢宰鲈L問(wèn)數(shù)據(jù)庫(kù)的工作。
(5)函數(shù)標(biāo)簽庫(kù):用來(lái)讀取已經(jīng)定義的某個(gè)函數(shù)。
3、使用條件
(1)要在JSP頁(yè)面中使用JSTL標(biāo)簽,需使用taglib指令引用標(biāo)簽庫(kù)。

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

(2)要在JSP中使用JSTL標(biāo)簽,還需要下載安裝JSTL實(shí)現(xiàn)(Implementation)。(導(dǎo)入jstl的jar包)

OGNL(對(duì)象導(dǎo)航圖語(yǔ)言)

1、簡(jiǎn)介
是應(yīng)用于Java中的一個(gè)開(kāi)源的表達(dá)式語(yǔ)言,作用是對(duì)數(shù)據(jù)進(jìn)行訪問(wèn),它擁有類型轉(zhuǎn)換、訪問(wèn)對(duì)象方法、操作集合對(duì)象等功能。
2、用法
OGNL是通常要結(jié)合Struts 2的標(biāo)志一起使用。主要是#、%和美元符號(hào)這三個(gè)符號(hào)的使用。
(1)#的三個(gè)用途:
一、訪問(wèn)OGNL上下文和Action上下文,#相當(dāng)于ActionContext.getContext(),例如:session 包含當(dāng)前HttpSession的屬性(attribute)的Map #session.userName相當(dāng)于session.getAttribute("userName");
二、用于過(guò)濾和投影(projecting)集合,如books.{?#this.price<100};
三、構(gòu)造Map,如#{'foo1':'bar1', 'foo2':'bar2'}。
(2)%的用途:在標(biāo)志的屬性為字符串類型時(shí),計(jì)算OGNL表達(dá)式的值。
(3)$的兩個(gè)用途:
一、用于在國(guó)際化資源文件中,引用OGNL表達(dá)式。
二、在Struts 2和i18n中配置文件

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容