此博客用于个人学习,来源于网上,对知识点进行一个整理。
1. Thymeleaf :
SpringBoot 并不推荐使用 jsp,但是支持一些模板引擎技术:
- Freemarker
- Thymeleaf
- Mustache
本项目用到的是 Thymeleaf 技术。
1.1 Thymeleaf 的优势:
Thymeleaf 是一个跟 Velocity、FreeMarker 类似的模板引擎,它可以完全替代 JSP,其本身的特点有:
- 动静结合:Thymeleaf 在有网络和无网络的环境下皆可运行,即它可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果。这是由于它支持 html 原型,然后在 html 标签里增加额外的属性来达到模板+数据的展示方式。浏览器解释 html 时会忽略未定义的标签属性,所以 thymeleaf 的模板可以静态地运行;当有数据返回到页面时,Thymeleaf 标签会动态地替换掉静态内容,使页面动态显示。
- 开箱即用:它提供标准和 spring 标准两种方言,可以直接套用模板实现 JSTL、 OGNL 表达式效果,避免每天套模板、改 jstl、改标签的困扰,同时开发人员也可以扩展和创建自定义的方言。
- 多方言支持:Thymeleaf 提供 spring 标准方言和一个与 SpringMVC 完美集成的可选模块,可以快速的实现表单绑定、属性编辑器、国际化等功能。
- 与 SpringBoot 完美整合,SpringBoot 提供了 Thymeleaf 的默认配置,并且为 Thymeleaf 设置了视图解析器,可以像操作 jsp 一样来操作 Thymeleaf。代码几乎没有任何区别,就是在模板语法上有区别。
1.2 提供数据:
编写一个 controller 方法,返回一些用户数据,放入模型中,将来在页面渲染。
@GetMapping("/all")
public String all(ModelMap model) {
// 查询用户
List<User> users = this.userService.queryAll();
// 放入模型
model.addAttribute("users", users);
// 返回模板名称(就是classpath:/templates/目录下的html文件名)
return "users";
}
1.3 引入启动器:
通过 maven 引入依赖,SpringBoot 会自动为 Thymeleaf 注册一个视图解析器:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
Thymeleaf 也会根据前缀和后缀来确定模板文件的位置:
- 默认前缀:classpath:/templates/
- 默认后缀:.html
所以如果我们返回视图:users,会指向到 classpath:/templates/users.html 。
1.4 静态页面:
模板默认放在 classpath 下的 templates 文件夹,我们新建一个 html 文件放入其中,渲染模型中的数据。把 html 的名称空间,改成:xmlns:th=“http://www.thymeleaf.org” 会有语法提示。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>首页</title>
<style type="text/css">
table {
border-collapse: collapse; font-size: 14px; width: 80%; margin: auto}
table, th, td {
border: 1px solid darkslategray;padding: 10px}
</style>