Spring Boot 整合Thymeleaf
概要信息
- Thymeleaf 官网:https://www.thymeleaf.org/
- Thymeleaf 在Github 的主页:https://github.com/thymeleaf/thymeleaf
- Spring官方文档:https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/htmlsingle/#using-boot-starter
- Thymeleaf 在Github 的主页:https://github.com/thymeleaf/thymeleaf
- Spring官方文档:https://docs.spring.io/spring-boot/docs/2.0.3.RELEASE/reference/htmlsingle/#using-boot-starter
什么是 Thymeleaf
Thymeleaf
是一个跟 Velocity
、FreeMarker
类似的模板引擎,它可以完全替代 JSP
。相较与其他的模板引擎,它有如下三个极吸引人的特点
-
Thymeleaf
在有网络和无网络的环境下皆可运行,即它可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果。这是由于它支持html
原型,然后在html
标签里增加额外的属性来达到模板 + 数据的展示方式。浏览器解释html
时会忽略未定义的标签属性,所以thymeleaf
的模板可以静态地运行;当有数据返回到页面时,Thymeleaf
标签会动态地替换掉静态内容,使页面动态显示。 -
Thymeleaf
开箱即用的特性。它提供标准和 Spring 标准两种方言,可以直接套用模板实现JSTL
、OGNL
表达式效果,避免每天套模板、改 JSTL、改标签的困扰。同时开发人员也可以扩展和创建自定义的方言。 -
Thymeleaf
提供Spring
标准方言和一个与SpringMVC
完美集成的可选模块,可以快速的实现表单绑定、属性编辑器、国际化等功能。
为什么需要 Thymeleaf
如果希望以 Jar
形式发布模块则尽量不要使用 JSP 相关知识,这是因为 JSP 在内嵌的 Servlet 容器上运行有一些问题 (内嵌 Tomcat、 Jetty 不支持 Jar 形式运行 JSP,Undertow
不支持 JSP
)。
Spring Boot
中推荐使用 Thymeleaf
作为模板引擎,因为 Thymeleaf
提供了完美的 Spring MVC
支持,Spring Boot 提供了大量模板引擎,包括:
- FreeMarker
- Groovy
- Mustache
Thymeleaf
- Velocity
构建DEMO
在 pom
中导入 thymeleaf
的依赖
<!--thymeleaf模板-->
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring5</artifactId>
</dependency>
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-java8time</artifactId>
</dependency>
等待maven
导入完成后,我们可以在下载完的jar包
double shift
键,搜索 ThymeleafProperties.java
我们可以看到thymeleaf的源码
我们可以看到,thymeleaf
会从 classpath:/templates
也就是springboot目录下的 resources
目录下 读取以 .html
开头的文件进行渲染。
我们下面通过一个小案例,来感受一下 Thymeleaf
模板引擎
创建一个 controller
@Controller
public class HelloController {
@RequestMapping("hello")
public String Hello(Model model){
// 创建一个model,添加变量msg
model.addAttribute("msg", "hello springboot");
return "hello";
}
}
我们看到代码中的 returl "hello"
表示渲染并返回一个hello.html
的页面数据,所以我们在 teamlates
下创建一个 hello.html
文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>123123</h1>
<div th:text="${msg}"></div>
</body>
</html>
使用 thymeleaf模板语法中的 th:text
将controller 中名字为 msg
的 model变量渲染到对应的标签当中
所有的html元素都可以被thymeleaf替换接管:
th:元素名称
我们重启 springboot
项目,访问查看效果
成功将定义在 controller
中的 model
变量渲染到 html
中
常见的一些使用案例
字符串转义,识别html标签
在 model
中定义一个带有标签的变量
controller > HelloController.java
@Controller
public class HelloController {
@RequestMapping("/")
public String Hello(Model model){
// 创建一个model,添加变量msg
model.addAttribute("msg", "<h2>hello springboot</h2>");
return "hello";
}
}
到 html
模板中取值 text
为普通文本,utext
表示为转义后的文本
templates > hello.html
<body>
<h1>123123</h1>
<div th:text="${msg}"></div>
<div th:utext="${msg}"></div>
</body>
运行效果
each遍历集合
controller
添加一个 model
,并将数组转换为集合
controller > HelloController.java
model.addAttribute("users", Arrays.asList("user1", "user2"));
html
模板处使用 th:each
对集合进行遍历,并将集合中每一个项都渲染到页面
templates > hello.html
<!--遍历集合-->
<h3 th:each="user:${users}" th:text="${user}"></h3>
运行效果
- 得到一个物种所有基因的TSS(转录起始位点)区域的bed文件。
- 如何选择聚类模块数目
- 谁能告诉我,这数据测毁了么?
- 计算资源及编程-仅针对生信人员
- 从WGS测序得到的VCF文件里面提取位于外显子区域的【直播】我的基因组84
- 基因组重测序的unmapped reads assembly探究 【直播】我的基因组86
- Centos 下非 Root 安装 Microsoft R Open
- 下载TCGA所有癌症的maf文件做signature分析
- 比对NR库看看物种分布【直播】我的基因组88
- 探究某个基因的外显子覆盖度情况【直播】我的基因组87
- PHP底层的运行机制与原理
- CHROME开发者工具的小技巧
- 48条高效率的PHP优化写法
- 生信蓝领,一个不舍得分享的高通量数据分析框架
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- ElementUI使用autocomplete组件输入搜索
- Hacking with iOS: SwiftUI Edition - 愿望清单项目(三)
- 浏览器在线预览offce,vue-pdf预览pdf文件
- vivo商城前端架构升级-总览篇
- 《JSON笔记之三》---postman中传入json串
- Spring源码学习笔记(13)——JDBC
- java系列之注解
- NodeJs初入Http模块和Url模块
- Spring系列之实例化、初始化处理器
- NodeJs安装supervisor实现重载
- MyBatis系列之浅谈SQL执行流程分析
- NodeJs引入自定义模块
- NodeJs引入操作第三方插件
- RocketMQ 环境搭建
- ThreadLocal源码分析