模板引擎的作用
主要是為了使用戶界面與業(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中配置文件