java 模板引擎_极简 Spring Boot 整合 Thymeleaf 页面模板
关注后,后台回复 java ,领取松哥为你精心准备的技术干货!
虽然现在慢慢在流行前后端分离开发,但是据松哥所了解到的,还是有一些公司在做前后端不分的开发,而在前后端不分的开发中,我们就会需要后端页面模板(实际上,即使前后端分离,也会在一些场景下需要使用页面模板,例如邮件发送模板)。
早期的 Spring Boot 中还支持使用 Velocity 作为页面模板,现在的 Spring Boot 中已经不支持 Velocity 了,页面模板主要支持 Thymeleaf 和 Freemarker ,当然,作为 Java 最最基本的页面模板 Jsp ,Spring Boot 也是支持的,只是使用比较麻烦。
松哥打算用三篇文章分别向大家介绍一下这三种页面模板技术。
今天我们主要来看看 Thymeleaf 在 Spring Boot 中的整合!
Thymeleaf 简介
Thymeleaf 是新一代 Java 模板引擎,它类似于 Velocity、FreeMarker 等传统 Java 模板引擎,但是与传统 Java 模板引擎不同的是,Thymeleaf 支持 HTML 原型。
它既可以让前端工程师在浏览器中直接打开查看样式,也可以让后端工程师结合真实数据查看显示效果,同时,SpringBoot 提供了 Thymeleaf 自动化配置解决方案,因此在 SpringBoot 中使用 Thymeleaf 非常方便。
事实上, Thymeleaf 除了展示基本的 HTML ,进行页面渲染之外,也可以作为一个 HTML 片段进行渲染,例如我们在做邮件发送时,可以使用 Thymeleaf 作为邮件发送模板。
另外,由于 Thymeleaf 模板后缀为 .html
,可以直接被浏览器打开,因此,预览时非常方便。
整合
创建项目
Spring Boot 中整合 Thymeleaf 非常容易,只需要创建项目时添加 Thymeleaf 即可:
创建完成后,pom.xml 依赖如下:
org.springframework.boot
spring-boot-starter-thymeleaf
org.springframework.boot
spring-boot-starter-web
当然,Thymeleaf 不仅仅能在 Spring Boot 中使用,也可以使用在其他地方,只不过 Spring Boot 针对 Thymeleaf 提供了一整套的自动化配置方案,这一套配置类的属性在 org.springframework.boot.autoconfigure.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";
private boolean checkTemplate = true;
private boolean checkTemplateLocation = true;
private String prefix = DEFAULT_PREFIX;
private String suffix = DEFAULT_SUFFIX;
private String mode = "HTML";
private Charset encoding = DEFAULT_ENCODING;
private boolean cache = true;
//...
}
首先通过
@ConfigurationProperties
注解,将application.properties
前缀为spring.thymeleaf
的配置和这个类中的属性绑定。前三个
static
变量定义了默认的编码格式、视图解析器的前缀、后缀等。从前三行配置中,可以看出来,
Thymeleaf
模板的默认位置在resources/templates
目录下,默认的后缀是html
。这些配置,如果开发者不自己提供,则使用 默认的,如果自己提供,则在
application.properties
中以spring.thymeleaf
开始相关的配置。
而我们刚刚提到的,Spring Boot 为 Thymeleaf 提供的自动化配置类,则是 org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration
,部分源码如下:
@Configuration
@EnableConfigurationProperties(ThymeleafProperties.class)
@ConditionalOnClass({ TemplateMode.class, SpringTemplateEngine.class })
@AutoConfigureAfter({ WebMvcAutoConfiguration.class, WebFluxAutoConfiguration.class })
public class ThymeleafAutoConfiguration {
}
可以看到,在这个自动化配置类中,首先导入 ThymeleafProperties
,然后 @ConditionalOnClass
注解表示当当前系统中存在 TemplateMode
和 SpringTemplateEngine
类时,当前的自动化配置类才会生效,即只要项目中引入了 Thymeleaf
相关的依赖,这个配置就会生效。
这些默认的配置我们几乎不需要做任何更改就可以直接使用了。如果开发者有特殊需求,则可以在 application.properties 中配置以 spring.thymeleaf 开头的属性即可。
创建 Controller
接下来我们就可以创建 Controller 了,实际上引入 Thymeleaf 依赖之后,我们可以不做任何配置。新建的 IndexController 如下:
@Controller
public class IndexController {
@GetMapping("/index")
public String index(Model model) {
List<User> users = new ArrayList<>();
for (int i = 0; i < 10; i++) {
User u = new User();
u.setId((long) i);
u.setName("javaboy:" + i);
u.setAddress("深圳:" + i);
users.add(u);
}
model.addAttribute("users", users);
return "index";
}
}
public class User {
private Long id;
private String name;
private String address;
//省略 getter/setter
}
在 IndexController
中返回逻辑视图名+数据,逻辑视图名为 index
,意思我们需要在 resources/templates
目录下提供一个名为 index.html
的 Thymeleaf
模板文件。
创建 Thymeleaf
lang="en" xmlns:th="http://www.thymeleaf.org">
charset="UTF-8">
Title
border="1">
编号
用户名
地址
th:each="user : ${users}">
th:text="${user.id}">
th:text="${user.name}">
th:text="${user.address}">
在 Thymeleaf
中,通过 th:each
指令来遍历一个集合,数据的展示通过 th:text
指令来实现,
注意 index.html
最上面要引入 thymeleaf
名称空间。
配置完成后,就可以启动项目了,访问 /index 接口,就能看到集合中的数据了:
另外, Thymeleaf
支持在 js
中直接获取 Model
中的变量。例如,在 IndexController
中有一个变量 username
:
@Controller
public class IndexController {
@GetMapping("/index")
public String index(Model model) {
model.addAttribute("username", "李四");
return "index";
}
}
在页面模板中,可以直接在 js 中获取到这个变量:
<script th:inline="javascript">
var username = [[${username}]];
console.log(username)
script>
这个功能算是 Thymeleaf 的特色之一吧。
手动渲染
前面我们说的是返回一个 Thymeleaf 模板,我们也可以手动渲染 Thymeleaf 模板,这个一般在邮件发送时候有用,例如我在 resources/templates 目录下新建一个邮件模板,如下:
lang="en" xmlns:th="http://www.thymeleaf.org">
charset="UTF-8">
Title
hello 欢迎 th:text="${username}">加入 XXX 集团,您的入职信息如下:
border="1">
职位
th:text="${position}">
薪水
th:text="${salary}">
src="http://www.javaboy.org/images/sb/javaboy.jpg" alt="">
这一个 HTML 模板中,有几个变量,我们要将这个 HTML 模板渲染成一个 String 字符串,再把这个字符串通过邮件发送出去,那么如何手动渲染呢?
@Autowired
TemplateEngine templateEngine;
@Test
public void test1() throws MessagingException {
Context context = new Context();
context.setVariable("username", "javaboy");
context.setVariable("position", "Java工程师");
context.setVariable("salary", 99999);
String mail = templateEngine.process("mail", context);
//省略邮件发送
}
渲染时,我们需要首先注入一个 TemplateEngine 对象,这个对象就是在 Thymeleaf 的自动化配置类中配置的(即当我们引入 Thymeleaf 的依赖之后,这个实例就有了)。
然后构造一个 Context 对象用来存放变量。
调用 process 方法进行渲染,该方法的返回值就是渲染后的 HTML 字符串,然后我们将这个字符串发送出去。
这是 Spring Boot 整合 Thymeleaf 的几个关键点,关于 Thymeleaf 这个页面模板本身更多的用法,大家可以参考 Thymeleaf 的文档:https://www.thymeleaf.org。
总结
本文主要向大家简单介绍了 Spring Boot 和 Thymeleaf 整合时的几个问题,还是比较简单的,大家可以阅读 Thymeleaf 官方文档学习 Thymeleaf 的更多用法。本文案例我已上传到 GitHub ,欢迎大家 star :https://github.com/lenve/javaboy-code-samples
关于本文,有问题欢迎留言讨论。
●另一种缓存,Spring Boot 整合 Ehcache
●Spring Boot 整合 Shiro ,两种方式全总结!
●Docker 入门及安装[Docker 系列-1]
●Spring Boot 中 10 行代码构建 RESTful 风格应用
●Nginx 极简入门教程!
●Spring Boot 一个依赖搞定 session 共享,没有比这更简单的方案了!
●Spring Boot 操作 Redis,三种方案全解析!
●面试干货 | Java 能否自定义一个类叫 java.lang.System?
●这一次,我连 web.xml 都不要了,纯 Java 搭建 SSM 环境
●没有一条路是容易的,特别是转行计算机这条路
你点的每个赞,我都认真当成了喜欢
java 模板引擎_极简 Spring Boot 整合 Thymeleaf 页面模板相关推荐
- Spring Boot整合Thymeleaf模板引擎
转载自 Spring Boot整合Thymeleaf模板引擎 什么是Thymeleaf Thymeleaf是一款用于渲染XML.XHTML.HTML5内容的模板引擎.类似Velocity,FreeMa ...
- spring boot整合Thymeleaf简单运用与入坑水贴
1.1 Thymeleaf是什么 Thymeleaf是面向Web和独立环境的现代服务器端Java模板引擎,能够处理HTML,XML,JavaScript,CSS甚至纯文本. 1.2 Thymeleaf ...
- springboot java获取版本号_深入实践Spring Boot 实战篇,大佬整理出的PDF文档
如何使用Spring Boot 本文章将会详细介绍如何使用Spring Boot.它覆盖了构建系统,自动配置和运行/部署选项等主题.我们也覆盖了一些Spring Boot最佳实践.尽管Spring B ...
- java option请求_如何在Spring Boot中处理HTTP OPTIONS请求?
选项1:Spring Boot属性(仅限Spring Boot 1.3.0) 从Spring Boot 1.3.0开始,可以使用以下属性配置此行为: spring.mvc.dispatch-optio ...
- java 数据源调用_实战分享: Spring boot 调用之间实现动态数据源
需求: 根据项目部署在不同的域名,在同一套系统下,分别访问不同的数据库 (当然在看别人帖子的时候,也发现了不同接口访问不同数据源问题,就是分库动态数据源需求了,其实实现都一样) 业务描述: 部署的时候 ...
- Spring Boot整合thymeleaf
转载自面皮大师的简书 https://www.jianshu.com/p/8d2cc7207fb2
- Spring Boot整合thymeleaf异常 —— 无法通过th:text=“${xxx}“取到值的解决方法
问题 前端页面 index.html ${msg}处爆红,无法取到值. <!doctype html><!--注意:引入thymeleaf的名称空间--> <html l ...
- java 模板引擎_Spring Boot 如何快熟整合Thymeleaf模板引擎
前面介绍了Spring Boot的优点,然后介绍了如何快速创建Spring Boot 项目.不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhong/ ...
- freemarker ftl模板_Spring Boot2 系列教程(十)Spring Boot 整合 Freemarker
今天来聊聊 Spring Boot 整合 Freemarker. Freemarker 简介 这是一个相当老牌的开源的免费的模版引擎.通过 Freemarker 模版,我们可以将数据渲染成 HTML ...
最新文章
- UVa563 - Crimewave
- php必须掌握的库,PHP初學者必須掌握的10個知識點
- Linux系统编程(七)消息队列
- 关于VB.NET 菜单栏ToolStripMenu 下拉菜单单选功能的实现
- 配置Nginx不同域名访问不同项目
- Laravel关联模型中过滤结果为空的结果集(has和with区别)
- 2019.04.07 电商12 登录界面的验证
- c#读取文本文件出现乱码
- oracle row number (),Oracle 分析函数 ROW_NUMBER() 使用
- java爆炸图片切换,jQuery实现图片爆炸效果
- 投屏索尼电视显示访问服务器,索尼电视投屏如何设置 苹果手机投屏索尼电视...
- 浅谈SSD,eMMC,UFS
- 燕山大学软件测试,工程技术研究期刊版面费_软件测试期刊_燕山大学学报版面费...
- playframework 笔记——搭建自己的paly工程
- 马尔代夫的华为“新4军”
- 热闹之后,香港是否会成为Web3的“应许之地”?
- 04741计算机网络原理2018年版-第八章 网络安全基础 知识要点
- 如何更改Code::Blocks背景颜色(懒人版)
- 【历史上的今天】9 月 2 日:互联网的“诞生日”;三星逐步跌落神坛;世界上第一个ATM自动取款机
- Thinkpad X200 换屏记
热门文章
- c语言 线程a每隔10秒执行一次,线程b每隔100秒执行一次,线程池执行时多线程每隔100ms执行一次线程任务 求解答...
- centos llvm安装_在CentOS上编译安装llvm-3.8.1详细教程
- java 部分正确性_深入理解java快速排序的正确性
- c语言 结构数组读取,有关文件读写到结构体数组问题;
- sftp shell 批量上传文件_shell脚本进行sftp、ftp文件批量上传与下载
- scala与python混合调用实验
- 可疑文件_Windows 10 Defender误删除了我的文件,用这个方法,轻松恢复
- 先考一键还是先学java_是先考C还是先考JAVA
- mysql router手册_mysql router
- java数组 序列化_程序猿的日常——Java基础之clone、序列化、字符串、数组