SpringBoot學習筆記——Thymeleaf
前置知識:
- SpringBoot學習筆記——SpringBoot簡介與HelloWord
- SpringBoot學習筆記——原始碼初步解析
- SpringBoot學習筆記——配置檔案yaml學習
- SpringBoot學習筆記——JSR303資料校驗與多環境切換
- SpringBoot學習筆記——自動配置原理
- SpringBoot學習筆記——Web開發探究
Thymeleaf
模板引擎
前端交給我們的頁面,是html頁面。如果是我們以前開發,我們需要把他們轉成jsp頁面,jsp好處就是當我們查出一些資料轉發到JSP頁面以後,我們可以用jsp輕鬆實現資料的顯示,及互動等。
jsp支援非常強大的功能,包括能寫Java程式碼,但是呢,我們現在的這種情況,SpringBoot這個專案首先是以jar的方式,不是war,像第二,我們用的還是嵌入式的Tomcat,所以呢,他現在預設是不支援jsp的
那不支援jsp,如果我們直接用純靜態頁面的方式,那給我們開發會帶來非常大的麻煩,那怎麼辦呢?
SpringBoot推薦你可以來使用模板引擎:
模板引擎,我們其實大家聽到很多,其實jsp就是一個模板引擎,還有用的比較多的freemarker,包括SpringBoot給我們推薦的Thymeleaf,模板引擎有非常多,但再多的模板引擎,他們的思想都是一樣的,什麼樣一個思想呢我們來看一下這張圖:
模板引擎的作用就是我們來寫一個頁面模板,比如有些值呢,是動態的,我們寫一些表示式。而這些值,從哪來呢,就是我們在後臺封裝一些資料。然後把這個模板和這個資料交給我們模板引擎,模板引擎按照我們這個資料幫你把這表示式解析、填充到我們指定的位置,然後把這個資料最終生成一個我們想要的內容給我們寫出去,這就是我們這個模板引擎,不管是jsp還是其他模板引擎,都是這個思想。只不過呢,就是說不同模板引擎之間,他們可能這個語法有點不一樣。其他的我就不介紹了,我主要來介紹一下SpringBoot給我們推薦的Thymeleaf模板引擎,這模板引擎呢,是一個高階語言的模板引擎,他的這個語法更簡單。而且呢,功能更強大。
我們呢,就來看一下這個模板引擎,那既然要看這個模板引擎。首先,我們來看SpringBoot裡邊怎麼用。
引入Thymeleaf
怎麼引入呢,對於springboot來說,什麼事情不都是一個start的事情嘛,我們去在專案中引入一下。給大家三個網址:
Thymeleaf 官網:https://www.thymeleaf.org/
Thymeleaf 在Github 的主頁:https://github.com/thymeleaf/thymeleaf
Spring官方文件:找到我們對應的版本
https://docs.spring.io/spring-boot/docs/2.2.5.RELEASE/reference/htmlsingle/#using-boot-starter
找到對應的pom依賴:可以適當點進原始碼看下本來的包!
<!--thymeleaf-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
Maven會自動下載jar包,我們可以去看下下載的東西;
Thymeleaf分析
前面呢,我們已經引入了Thymeleaf,那這個要怎麼使用呢?
我們首先得按照SpringBoot的自動配置原理看一下我們這個Thymeleaf的自動配置規則,在按照那個規則,我們進行使用。
我們去找一下Thymeleaf的自動配置類:ThymeleafProperties
@ConfigurationProperties(
prefix = "spring.thymeleaf"
)
public class ThymeleafProperties {
private static final Charset DEFAULT_ENCODING;
public static final String DEFAULT_PREFIX = "classpath:/templates/";
public static final String DEFAULT_SUFFIX = ".html";
private boolean checkTemplate = true;
private boolean checkTemplateLocation = true;
private String prefix = "classpath:/templates/";
private String suffix = ".html";
private String mode = "HTML";
private Charset encoding;
}
我們可以在其中看到預設的字首和字尾!
我們只需要把我們的html頁面放在類路徑下的templates下,thymeleaf就可以幫我們自動渲染了。
使用thymeleaf什麼都不需要配置,只需要將他放在指定的資料夾下即可!
測試
1、編寫一個TestController
@Controller
public class TestController {
@RequestMapping("/t1")
public String test1(){
//classpath:/templates/test.html
return "test";
}
}
2、編寫一個測試頁面 test.html 放在 templates 目錄下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>測試頁面</h1>
</body>
</html>
3、啟動專案請求測試
Thymeleaf 語法學習
要學習語法,還是參考官網文件最為準確,我們找到對應的版本看一下;
Thymeleaf 官網:https://www.thymeleaf.org/ , 簡單看一下官網!我們去下載Thymeleaf的官方文件!
我們做個最簡單的練習 :我們需要查出一些資料,在頁面中展示
1、修改測試請求,增加資料傳輸;
@RequestMapping("/t1")
public String test1(Model model){
//存入資料
model.addAttribute("msg","Hello,Thymeleaf");
//classpath:/templates/test.html
return "test";
}
2、我們要使用thymeleaf,需要在html檔案中匯入名稱空間的約束,方便提示。
我們可以去官方文件的#3中看一下名稱空間拿來過來:
xmlns:th="http://www.thymeleaf.org"
3、我們去編寫下前端頁面
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>sdz</title>
</head>
<body>
<h1>測試頁面</h1>
<!--th:text就是將div中的內容設定為它指定的值,和之前學習的Vue一樣-->
<div th:text="${msg}"></div>
</body>
</html>
4、啟動測試!
OK,入門搞定,我們來認真研習一下Thymeleaf的使用語法!
1、我們可以使用任意的 th:attr 來替換Html中原生屬性的值!
2、我們能寫哪些表示式呢?
Simple expressions:(表示式語法)
Variable Expressions: ${...}:獲取變數值;OGNL;
1)、獲取物件的屬性、呼叫方法
2)、使用內建的基本物件:#18
#ctx : the context object.
#vars: the context variables.
#locale : the context locale.
#request : (only in Web Contexts) the HttpServletRequest object.
#response : (only in Web Contexts) the HttpServletResponse object.
#session : (only in Web Contexts) the HttpSession object.
#servletContext : (only in Web Contexts) the ServletContext object.
3)、內建的一些工具物件:
#execInfo : information about the template being processed.
#uris : methods for escaping parts of URLs/URIs
#conversions : methods for executing the configured conversion service (if any).
#dates : methods for java.util.Date objects: formatting, component extraction, etc.
#calendars : analogous to #dates , but for java.util.Calendar objects.
#numbers : methods for formatting numeric objects.
#strings : methods for String objects: contains, startsWith, prepending/appending, etc.
#objects : methods for objects in general.
#bools : methods for boolean evaluation.
#arrays : methods for arrays.
#lists : methods for lists.
#sets : methods for sets.
#maps : methods for maps.
#aggregates : methods for creating aggregates on arrays or collections.
==================================================================================
Selection Variable Expressions: *{...}:選擇表示式:和${}在功能上是一樣;
Message Expressions: #{...}:獲取國際化內容
Link URL Expressions: @{...}:定義URL;
Fragment Expressions: ~{...}:片段引用表示式
Literals(字面量)
Text literals: 'one text' , 'Another one!' ,…
Number literals: 0 , 34 , 3.0 , 12.3 ,…
Boolean literals: true , false
Null literal: null
Literal tokens: one , sometext , main ,…
Text operations:(文字操作)
String concatenation: +
Literal substitutions: |The name is ${name}|
Arithmetic operations:(數學運算)
Binary operators: + , - , * , / , %
Minus sign (unary operator): -
Boolean operations:(布林運算)
Binary operators: and , or
Boolean negation (unary operator): ! , not
Comparisons and equality:(比較運算)
Comparators: > , < , >= , <= ( gt , lt , ge , le )
Equality operators: == , != ( eq , ne )
Conditional operators:條件運算(三元運算子)
If-then: (if) ? (then)
If-then-else: (if) ? (then) : (else)
Default: (value) ?: (defaultvalue)
Special tokens:
No-Operation: _
練習測試
1、 我們編寫一個Controller,放一些資料
@RequestMapping("/t2")
public String test2(Map<String,Object> map){
//存入資料
map.put("msg","<h1>Hello</h1>");
map.put("users", Arrays.asList("sdz","pxl"));
//classpath:/templates/test.html
return "test";
}
2、測試頁面取出資料
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>狂神說</title>
</head>
<body>
<h1>測試頁面</h1>
<div th:text="${msg}"></div>
<!--不轉義-->
<div th:utext="${msg}"></div>
<!--遍歷資料-->
<!--th:each每次遍歷都會生成當前這個標籤:官網#9-->
<h4 th:each="user :${users}" th:text="${user}"></h4>
<h4>
<!--行內寫法:官網#12-->
<span th:each="user:${users}">[[${user}]]</span>
</h4>
</body>
</html>
3、啟動專案測試!
我們看完語法,很多樣式,我們即使現在學習了,也會忘記,所以我們在學習過程中,需要使用什麼,根據官方文件來查詢,才是最重要的,要熟練使用官方文件!