整合视图层(Thymeleaf的使用)

简介: Thymeleaf的意思是模板引擎,适用于Web和独立环境,能够处理HTML,XML,JavaScript,CSS甚至纯文本,类似于Velocity,FreeMaker等传统的java模板引擎,但是与传统 Java 模板引擎不同的是,Thymeleaf 支持 HTML 原型.它既可以让前端工程师在浏览器中直接打开查看样式,也可以让后端工程师结合真实数据查看显示效果,同时,SpringBoot 提供了 Thymeleaf 自动化配置解决方案,因此在 SpringBoot 中使用 Thymeleaf 非常方便。

Thymeleaf简介
Thymeleaf的意思是模板引擎,适用于Web和独立环境,能够处理HTML,XML,JavaScript,CSS甚至纯文本,类似于Velocity,FreeMaker等传统的java模板引擎,但是与传统 Java 模板引擎不同的是,Thymeleaf 支持 HTML 原型.

它既可以让前端工程师在浏览器中直接打开查看样式,也可以让后端工程师结合真实数据查看显示效果,同时,SpringBoot 提供了 Thymeleaf 自动化配置解决方案,因此在 SpringBoot 中使用 Thymeleaf 非常方便。

事实上, Thymeleaf 除了展示基本的 HTML ,进行页面渲染之外,也可以作为一个 HTML 片段进行渲染,例如我们在做邮件发送时,可以使用 Thymeleaf 作为邮件发送模板。

另外,由于 Thymeleaf 模板后缀为 .html,可以直接被浏览器打开,因此,预览时非常方便。

整合
首先进行创建项目

image.png

SpringBoot整合Thymeleaf非常容易,只需要在创建项目时加入Thymeleaf即可

创建完成后,它的pom文件如下:

image.png

当然,Thymeleaf不仅可以在SpringBoot当中使用,还可以用到其他地方,只是SpringBoot对于Thymeleaf提供了一整套的自动化配置方案, 这一套配置类的属性在org.springframework.boot.autoconfigure.thymeleaf.ThymeleafProperties中,源码如下:

image.png

 首先通过@ConfigurationProperties注解,将application.properties前缀为spring.thymeleaf的配置和这个类中的属性进行绑定

前三个static变量定义的是:默认编码格式;视图解析器前缀;后缀;

从前三行的配置中可以看出,Thymeleaf模板的默认位置是在resources/templates的目录下,默认的后缀是.html

这些配置如果自己提供,则在application.properties中以spring.thymeleaf为前缀开始进行相关配置,如果不自己提供,则使用默认的

我们刚才提到的SpringBoot为Thymeleaf提供了自动化配置类,则是org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration,源码如下:

image.png

我们可以看到在这个自动化配置类中,首先导入的是ThymeleafProperties,然后@ConditionalOnClass注解表示当前系统中存在TemplateMode和springTemplateEngine类时,当前的自动化配置类才会生效,所以只要引入了Thymeleaf相关的依赖,这个配置就会生效

这些默认的配置我们几乎不需要做任何更改就可以直接进行使用,如果开发者有特殊需求,则可以在application.properties中配置以spring.thymeleaf为前缀的属性

接下来我们创建Controller,实际上在我们引入了Thymeleaf的依赖之后,我们可以不用做任何的配置了,新建的IndexController如下:

image.png

在IndexController中返回逻辑视图名和数据,逻辑视图名为index,意思是我们需要在resources/templates目录下创建一个index.html的Thyleaf模板文件

创建Thymeleaf

image.png

在Thymeleaf中,通过th:each指令来遍历一个集合,数据的展示通过th:text的指令来实现

注意index.html最上面要引入thymeleaf名称文件

配置完成后,就可以启动项目了,访问/index接口,就能看到集合中的数据了

另外Thymeleaf支持js中直接获取Model中的变量,例如在IndexController中有一个变量username:

image.png

通过页面模板,可以直接在js中获取到这个变量

image.png

手动渲染
上面我们说返回一个Thymeleaf模板,我们也可以手动渲染Thymeleaf模板,一般在发送邮件时使用,例如我们在resources/templates目录下新建一个邮件模板mail.html,如下:

image.png

在这个模板中有几个变量,我们要将这个HTML模板渲染成一个String字符串,再把这个字符串通过邮件的方式发送出去,那么该如何进行手动渲染呢?

image.png

在渲染时,我们需要首先注入一个TemplateEngine对象,这个对象在Thymeleaf的自动化配置类中配置的(即当我们引入Thymeleaf这个依赖之后,这个实例就有了)

然后构造一个Context对象用来存放变量

调用process方法进行渲染,该方法的返回值就是渲染之后的HTML字符串,然后我们将这个字符串发送回去

以上内容就是Spring Boot整合Thymeleaf的几个关键点,希望能够帮助到大家

相关文章
|
安全 网络协议 网络安全
http https socket通讯详解?
http https socket通讯详解?
337 0
|
4月前
|
Cloud Native Java API
Java Spring框架技术栈选和最新版本及发展史详解(截至2025年8月)-优雅草卓伊凡
Java Spring框架技术栈选和最新版本及发展史详解(截至2025年8月)-优雅草卓伊凡
812 0
|
前端开发 Java API
Spring Boot之Spring MVC基于注解的控制器(RequestMapping注解类型 重定向与转发 依赖注入)
Spring Boot之Spring MVC基于注解的控制器(RequestMapping注解类型 重定向与转发 依赖注入)
307 0
|
关系型数据库 MySQL API
PyMySQL:连接Python与MySQL的桥梁
PyMySQL:连接Python与MySQL的桥梁
|
小程序 程序员
【uniapp微信小程序】自定义导航栏:非首页展示的实现方式(极为快捷方式)
【uniapp微信小程序】自定义导航栏:非首页展示的实现方式(极为快捷方式)
758 0
|
存储 索引 Python
python中的数据容器
python中的数据容器
|
SQL JSON Java
基于dataX实现多种数据源数据汇聚(一)
在数据中台项目实践过程中,经常需要获取多个部门、多个系统的数据,此时面临多种多样的数据库,如何快速稳定的获取数据,并持续归集到数据中台的数据仓库中,是每个数据中台项目必须解决的问题。本文介绍了我在项目实践过程中,基于dataX实现数据汇聚的一些使用心得,在此和大家分享,希望有所帮助。
3026 0
基于dataX实现多种数据源数据汇聚(一)
|
安全 Java 数据安全/隐私保护
java random随机数的用法
java random随机数的用法
|
搜索推荐 API
Email API Service平台有哪些?3大API接口平台对比
本文对比了三个Email API Service:AokSend、Mailgun和Postmark。AokSend提供高效邮件服务,其API适用于营销和通知邮件;Mailgun的API灵活强大,支持多种语言;Postmark专注于Transactional邮件,API设计简洁。每个平台都提供详尽的文档和支持,用户可根据需求选择。
HTTP状态 500 - 内部服务器错误,Servlet[SpringMVC]的Servlet.init()引发异常
HTTP状态 500 - 内部服务器错误,Servlet[SpringMVC]的Servlet.init()引发异常
299 0
HTTP状态 500 - 内部服务器错误,Servlet[SpringMVC]的Servlet.init()引发异常