1.thymeleaf是什么

Thymeleaf是一个适用于Web和独立环境的现代服务器端Java模板引擎,能够处理HTML、XML、JavaScript、CSS甚至纯文本。

Thymeleaf的主要目标是提供一种优雅且高度维护的模板创建方式。为了实现这一目标,它以自然模板的概念为基础,以不影响模板用作设计原型的方式将其逻辑注入模板文件中。

2.Thymeleaf可以处理什么样的模板?

开箱即用的Thymeleaf允许您处理六种模板,HTML,XML,TEXT,JAVASCRIPT,CSS,RAW

3.哪里可以查看thymeleaf文档

https://www.thymeleaf.org/doc/tutorials/3.1/usingthymeleaf.html

005集成thymeleaf_thymeleaf

4.集成thymeleaf

4.1. 编写第一个thymeleaf程序

4.2.1. 引入相关依赖

<!-- SpringBoot集成thymeleaf模板 -->
<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

4.2.2. 编写controller

在com.zhuhuo.demo.controller包下创建一个名为DemoController类并实现helloThymeleaf方法

@Controller
public class DemoController {

   @GetMapping(value = "/hello")
   public String helloThymeleaf(ModelMap modelMap) {
       modelMap.put("test", "test");
       return "index";
  }

}

4.2.3. 编写Thymeleaf页面

在resource文件夹下创建templates文件夹

在templates文件夹下创建index.html

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>Title</title>
</head>
<body>
 <span th:text="${test}">测试</span>
</body>
</html>

4.2.4. 程序验证

005集成thymeleaf_模版_02

4.2. Thymeleaf配置介绍

springboot在集成thymeleaf的时候默认为我们提供了很多配置信息ThymeleafProperties,如果默认配置信息不能满足我们的业务需求,可以自行调整修改,一起看下默认给我们提供了哪些配置

@ConfigurationProperties(prefix = "spring.thymeleaf")
public class ThymeleafProperties {

 //默认编码格式
private static final Charset DEFAULT_ENCODING = StandardCharsets.UTF_8;

 //默认前缀,文件存储的前缀
public static final String DEFAULT_PREFIX = "classpath:/templates/";

 //默认文件后缀格式
public static final String DEFAULT_SUFFIX = ".html";

 //在渲染模板之前检查模板是否存在 默认为true 检查
private boolean checkTemplate = true;

//检查模板位置是否存在 默认为true 检查
private boolean checkTemplateLocation = true;

 //在构建URL时,为查看名称而预先添加的前缀
private String prefix = DEFAULT_PREFIX;
 
 //生成URL时附加到视图名称的后缀
private String suffix = DEFAULT_SUFFIX;

 //要应用于模板的模板模式 
private String mode = "HTML";

 // 模版文件编码格式
private Charset encoding = DEFAULT_ENCODING;

 // 是否启用模版缓存 一般在开发阶段我们是禁用缓存已保障程序的最新的可以及时查看,在生产环境开启缓存
 // 减小服务端压力提升客户体验度
private boolean cache = true;

/**
 * 链中模板解析程序的顺序。默认情况下,模板解析程序位于链中的第一个。订单从1开始,只有在定义了其他 
  * TemplateResolver bean的情况下才应进行设置
 */
private Integer templateResolverOrder;

//可以解析的视图名称(允许使用模式)的逗号分隔列表
private String[] viewNames;

//应从解析中排除的视图名称(允许模式)的逗号分隔列表。
private String[] excludedViewNames;

//在SpringEL表达式中启用SpringEL编译器
private boolean enableSpringElCompiler;

/**
 * 是否应在checkbox元素本身之前呈现充当复选框标记的隐藏表单输入 默认为false
 */
private boolean renderHiddenMarkersBeforeCheckboxes = false;

 //是否为Web框架启用Thymelaf视图解析 默认为true
private boolean enabled = true;

private final Servlet servlet = new Servlet();

private final Reactive reactive = new Reactive();


public static class Servlet {
   //写入HTTP响应的内容类型值
private MimeType contentType = MimeType.valueOf("text/html");

   //Thymelaf是否应该尽快开始写入部分输出,或者缓冲直到模板处理完成
private boolean producePartialOutputWhileProcessing = true;
}

public static class Reactive {

   //用于写入响应的数据缓冲区的最大大小。如果设置了此选项,则默认情况下模板将在CHUNKED模式下执行
private DataSize maxChunkSize = DataSize.ofBytes(0);

   //视图技术支持的媒体类型
private List<MediaType> mediaTypes;
private String[] fullModeViewNames;
private String[] chunkedModeViewNames;
}

}

配置调整测试,以文件存放地址为案例,修改配置信息,创建testview文件夹,把index文件复制到testview下

spring:
thymeleaf:
  prefix: classpath:/testview/

修改控制层

@GetMapping(value = "/hello")
public String hello(ModelMap map){
   map.put("test","test view");
   return "index";
}


005集成thymeleaf_html_03

4.3. Thymeleaf常用标签

序号

描述

属性

1

片段

th:insert th:replace

2

迭代

th:each

3

条件判断

th:if th:unless th:switch th:case

4

局部变量

th:object th:with

5

一般属性修改

th:attr th:attrprepend th:attrappend

6

特定属性修改

th:value th:href th:src ... 适应html所有的标签都可以修改

7

文本

th:text th:utext

8

片段规范

th:fragment

9

片段移除

th:remove

5.总结

以上是对thymeleaf的一个简单的集成,在本章节不对thymeleaf做太深入的讲解,后面会专门提出一个专题来讲解thymeleaf相关内容,例如对国际化的支持,模版布局,模版解析器等等.