【SpringBoot】SpringBoot基础教程(6)
前言:
本文内容:Thymeleaf模板引擎、Thymeleaf语法、MVC配置原理
推荐免费SpringBoot基础教程视频:【狂神说Java】SpringBoot最新教程通俗易懂_哔哩哔哩_bilibili
Thymeleaf模板引擎
前端交给我们的页面,是html页面。如果是我们以前开发,需要把它们转为jsp页面,jsp好处就是当我们把查询的数据转发到JSP页面,可以用jsp轻松实现数据的显示,及交互等。jsp支持非常强大的功能,包括写Java代码,但是,SpringBoot项目是以jar的方式,不是war;SpringBoot嵌入Tomcat服务器,默认不支持jsp。
那不支持jsp,我们使用纯静态页面的方式,对开发来说比较麻烦,那怎么办呢,SpringBoot推荐你可以使用模板引擎。
那什么是模板引擎,其实jsp就是一个模板引擎,还有之前使用的freemarker,包括SpringBoot给我们推荐的Thymeleaf。
模板引擎的作用就是将获取的数据按照我们所写的表达式进行解析,最后输出到页面。
Thymeleaf
github:Thymeleaf (github.com)
引入spring-boot-starter-thymeleaf
1 | <dependency> |
分析源码
1 |
|
简单测试
-
在
resources/templates
下编写test.html
1
2
3
4
5
6
7
8
9
10
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>模板测试</h1>
</body>
</html> -
在
HelloController
里编写代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17package com.jokerdig.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* @author Joker大雄
* @data 2022/7/15 - 10:39
**/
public class HelloController {
public String test(){
return "test";
}
} -
运行测试
1
模板测试
-
小结
使用thymeleaf只需要为项目导入对应的依赖,将html页面文件放在template文件夹下即可。
Thymeleaf语法
使用前需要在对应的html中引入约束
1 | <html lang="en" xmlns:th="http://www.thymeleaf.org"> |
标准表达式语法
Thymeleaf 模板引擎支持多种表达式:
- 变量表达式:${…}
- 选择变量表达式:*{…}
- 链接表达式:@{…}
- 国际化表达式:#{…}
- 片段引用表达式:~{…}
文字和操作
有很多类型的文字和操作可用,它们分别如下:
- 文字
- 文本文字,例如:
'one text'
,'Another one!'
,…
- 数字文字,例如:
0
,10
,314
,31.01
,112.83
,…
- 布尔文字,例如:
true
,false
- Null文字,例如:
Null
- 文字标记,例如:
one
,sometext
,main
,…
- 文本文字,例如:
- 文本操作:
- 字符串连接:
+
- 文字替换:
|The name is ${name}|
- 字符串连接:
- 算术运算:
- 二进制操作:
+
,-
,*
,/
,%
- 减号(一元运算符):
-
- 二进制操作:
- 布尔运算:
- 二进制运算符,
and
,or
- 布尔否定(一元运算符):
!
,not
- 二进制运算符,
- 比较和相等:
- 比较运算符:
>
,<
,>=
,<=
(gt
,lt
,ge
,le
) - 相等运算符:
==
,!=
(eq
,ne
)
- 比较运算符:
- 条件操作符:
- If-then:
(if) ? (then)
- If-then-else:
(if) ? (then) : (else)
- Default:
(value) ?: (defaultvalue)
- If-then:
th 属性
Thymeleaf 还提供了大量的 th 属性,这些属性可以直接在 HTML 标签中使用,其中常用 th 属性及其示例如下表。
属性 | 描述 |
---|---|
th:id | 替换 HTML 的 id 属性 |
th:text | 文本替换,转义特殊字符 |
th:utext | 文本替换,不转义特殊字符 |
th:object | 在父标签选择对象,子标签使用 *{…} 选择表达式选取值。 没有选择对象,那子标签使用选择表达式和 ${…} 变量表达式是一样的效果。 同时即使选择了对象,子标签仍然可以使用变量表达式。 |
th:value | 替换 value 属性 |
th:with | 局部变量赋值运算 |
th:style | 设置样式 |
th:onclick | 点击事件 |
th:each | 遍历,支持 Iterable、Map、数组等。 |
th:if | 根据条件判断是否需要展示此标签 |
th:unless | 和 th:if 判断相反,满足条件时不显示 |
th:switch | 与 Java 的 switch case语句类似 通常与 th:case 配合使用,根据不同的条件展示不同的内容 |
th:fragment | 模板布局,类似 JSP 的 tag,用来定义一段被引用或包含的模板片段 |
th:insert | 布局标签; 将使用 th:fragment 属性指定的模板片段(包含标签)插入到当前标签中。 |
th:replace | 布局标签; 使用 th:fragment 属性指定的模板片段(包含标签)替换当前整个标签。 |
th:selected | select 选择框选中 |
th:src | 替换 HTML 中的 src 属性 |
th:inline | 内联属性; 该属性有 text、none、javascript 三种取值, 在 <script> 标签中使用时,js 代码中可以获取到后台传递页面的对象。 |
th:action | 替换表单提交地址 |
简单测试
-
编写
HelloController
为页面传值1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23package com.jokerdig.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.Arrays;
/**
* @author Joker大雄
* @data 2022/7/15 - 10:39
**/
public class HelloController {
public String test(Model model){
model.addAttribute("msg","<h1>Hello SpringBoot</h1>");
// 集合
model.addAttribute("users", Arrays.asList("Jokerdig","JokerDaxiong"));
return "test";
}
} -
编写test.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!--未转义-->
<div th:text="${msg}"></div>
<!--被转义-->
<div th:utext="${msg}"></div>
<!--遍历集合th:each-->
<div th:each="user:${users}" th:text="${user}"></div>
<!--写法2-->
<!--<div th:each="user:${users}">[[${user}]]</div>-->
</body>
</html> -
运行测试
1
2
3<h1>Hello SpringBoot</h1>
Hello SpringBoot
MVC配置原理
我们还需要知道SpringBoot对SpringMVC还做了哪些配置,包括如何扩展,如何定制等。
文档翻译
1 | Spring MVC Auto-configuration |
自定义视图解析器
新建com.jokerdig.config
包,并创建MyMVCConfig.java
1 | package com.jokerdig.config; |
通过Debug打断点测试,发现我们定义的视图解析器也被加载了。