Thymeleaf快速入门

SpringBoot并不推荐使用jsp,但是支持一些模板引擎技术:

以前大家用的比较多的是Freemarker,但是我们今天的主角是Thymeleaf!

为什么是Thymeleaf?

简单说, Thymeleaf 是一个跟 Velocity、FreeMarker 类似的模板引擎,它可以完全替代 JSP 。相较于其他的模板引擎,它有如下四个极吸引人的特点:

  • 动静结合:Thymeleaf 在有网络和无网络的环境下皆可运行,即它可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果。这是由于它支持 html 原型,然后在 html 标签里增加额外的属性来达到模板+数据的展示方式。浏览器解释 html 时会忽略未定义的标签属性,所以 thymeleaf 的模板可以静态地运行;当有数据返回到页面时,Thymeleaf 标签会动态地替换掉静态内容,使页面动态显示。

  • 开箱即用:它提供标准和spring标准两种方言,可以直接套用模板实现JSTL、 OGNL表达式效果,避免每天套模板、改jstl、改标签的困扰。同时开发人员也可以扩展和创建自定义的方言。

  • 多方言支持:Thymeleaf 提供spring标准方言和一个与 SpringMVC 完美集成的可选模块,可以快速的实现表单绑定、属性编辑器、国际化等功能。

  • 与SpringBoot完美整合,SpringBoot提供了Thymeleaf的默认配置,并且为Thymeleaf设置了视图解析器,我们可以像以前操作jsp一样来操作Thymeleaf。代码几乎没有任何区别,就是在模板语法上有区别。

接下来,我们就通过入门案例来体会Thymeleaf的魅力:

提供数据

编写一个controller方法,返回一些用户数据,放入模型中,将来在页面渲染

@GetMapping("/all")
public String all(ModelMap model) {// 查询用户List<User> users = this.userService.queryAll();// 放入模型model.addAttribute("users", users);// 返回模板名称(就是classpath:/templates/目录下的html文件名)return "users";
}

引入启动器

直接引入启动器:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

SpringBoot会自动为Thymeleaf注册一个视图解析器:

与解析JSP的InternalViewResolver类似,Thymeleaf也会根据前缀和后缀来确定模板文件的位置:

  • 默认前缀:classpath:/templates/

  • 默认后缀:.html

所以如果我们返回视图:users,会指向到 classpath:/templates/users.html

一般我们无需进行修改,默认即可。

静态页面

根据上面的文档介绍,模板默认放在classpath下的templates文件夹,我们新建一个html文件放入其中:

编写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>
</head>
<body>
<div style="text-align: center"><span style="color: darkslategray; font-size: 30px">欢迎光临!</span><hr/><table class="list"><tr><th>id</th><th>姓名</th><th>用户名</th><th>年龄</th><th>性别</th><th>生日</th></tr><tr th:each="user : ${users}"><td th:text="${user.id}">1</td><td th:text="${user.name}">张三</td><td th:text="${user.userName}">zhangsan</td><td th:text="${user.age}">20</td><td th:text="${user.sex}">男</td><td th:text="${user.birthday}">1980-02-30</td></tr></table>
</div>
</body>
</html>

我们看到这里使用了以下语法:

  • ${} :这个类似与el表达式,但其实是ognl的语法,比el表达式更加强大

  • th-指令:th-是利用了Html5中的自定义属性来实现的。如果不支持H5,可以用data-th-来代替

    • th:each:类似于c:foreach 遍历集合,但是语法更加简洁

    • th:text:声明标签中的文本

      • 例如<td th-text='${user.id}'>1</td>,如果user.id有值,会覆盖默认的1

      • 如果没有值,则会显示td中默认的1。这正是thymeleaf能够动静结合的原因,模板解析失败不影响页面的显示效果,因为会显示默认值!

模板缓存

Thymeleaf会在第一次对模板解析之后进行缓存,极大的提高了并发处理能力。但是这给我们开发带来了不便,修改页面后并不会立刻看到效果,我们开发阶段可以关掉缓存使用:

# 开发阶段关闭thymeleaf的模板缓存
spring.thymeleaf.cache=false

注意

在Idea中,我们需要在修改页面后按快捷键:`Ctrl + Shift + F9` 对项目进行rebuild才可以。eclipse中没有测试过。

我们可以修改页面,测试一下。

thymeleaf体验相关推荐

  1. Day5-SpringBoot-Controller层注解及thymeleaf初体验

    Day5-SpringBoot-Controller层注解 @PathVariable.@RequestHeader.@ModelAttribute.@RequestParam.@MatrixVari ...

  2. thymeleaf随机数_SpringBoot2.0实现静态资源版本控制

    写在最前面 犹记毕业第一年时,公司每次发布完成后,都会在一个群里通知[版本更新,各部门清理缓存,有问题及时反馈]之类的话.归根结底就是资源缓存的问题,浏览器会将请求到的静态资源,如JS.CSS等文件缓 ...

  3. thymeleaf html模块化,SpringBoot中使用Thymeleaf模板开发的后台管理框架

    系统简介 JavaWeb专业版,企业级开发框架SpringBoot+Layui+Thymeleaf+MybatisPlus开发权限(RBAC)及内容管理框架,框架中集成了权限管理.模块管理,数据库管理 ...

  4. SpringMVC+Thymeleaf +HTML的简单框架

    SpringMVC+Thymeleaf +HTML的简单框架 一.问题 项目中需要公众号开发,移动端使用的是H5,但是如果不用前端框架的话,只能考虑JS前端用ajax解析JSON字符串了.今天我们就简 ...

  5. pycharm项目中如何安装包_如何将Thymeleaf技术集成到SpringBoot项目中

    给天气预报一个"面子" 截至目前,不仅有了天气预报的API接口,也有了数据的缓存方案.现在,就要进行天气预报服务的实现,也就是说,这里需要一个面向用户的应用.这个应用应该拥有友好的 ...

  6. SpringBoot 使用 Thymeleaf 如何发送带模板的Email邮件

    SpringBoot+Thymeleaf发送模板邮件 如何在Spring Boot 应用中发送邮件以及使用简单强大的Thymeleaf模板引擎来制作邮件内容. 一.授权码 常用的电子协议有POP3,S ...

  7. thymeleaf模板引擎的优势何在?

    如今spring boot 的火爆程度到了想避开,想不闻都不容易.几大主流IT资讯网,随便浏览下都能看到相关的资讯.还有一个特点就是某一技术.应用火爆了就铺天盖地的报道来了,各种花式赞誉.好像你不学, ...

  8. vue-element-admin--使用体验

    原文网址:vue-element-admin--使用体验_IT利刃出鞘的博客-CSDN博客 简介 说明 本文用示例介绍vue-element-admin的用法. vue-element-admin 是 ...

  9. java毕设项目开源啦,springboot+Thymeleaf的仿豆瓣电影论坛系统

    一.项目介绍 1.1 项目简介 摘 要 随着日益增长的生活水平,越来越多的人们喜欢上了看电影.听音乐和阅读,并且在看电影.听音乐和阅读后,也会根据此时此景来"吟诗一首",因此开发了 ...

最新文章

  1. [你必须知道的css系列]第一回:丰富的利器2:CSS选择符之子选择符、相邻选择符...
  2. OpenTsdb官方文档-----理解指标和时间序列
  3. Spring(3)bean 注入-构造方法注入 那么又为什么需要依赖注入呢?
  4. java set中元素是数组_将HashSet中的元素转换为Java中的数组
  5. task文件服务器无法输入,Win10系统无法启动task scheduler服务的解决方法
  6. h264 I帧的判断
  7. 理解transformer
  8. 【kafka】kafka docker jmx 远程连接 跨容器
  9. 2017-09-16
  10. 批处理处理当前文件路径的写法
  11. 《PHP基础教程》pdf
  12. cdc2016年cypher资源_CDC最新Cypher!Ty.简直叼爆
  13. 模拟抖音推荐算法检测视频原创度
  14. 使用M0 DesignStart 的样例SoC(example system) - 1 SoC组件
  15. SpringBoot线上服务假死解决,CPU内存正常
  16. 《科学》最新研究:给“薛定谔猫”第二个盒子会发生什么?
  17. 推荐10个易上手好用的H5网页编辑工具
  18. 吃白菜一样用micropython玩esp32(三)—— 触摸按键、ADC
  19. vr全景怎么拍摄和制作,3dvr全景制作教程
  20. a标签中herf的用法

热门文章

  1. HashMap是如何实现快速存取的
  2. 视图view的生命周期的一点见解
  3. sql 查看某用户的连接数 以及 如何删除该用户的会话
  4. POJ 1273 (基础最大流) Drainage Ditches
  5. jsTree通过json数据初始化时,如何控制每个选项的图标(icon)显示
  6. 【struts2】struts2工作流程
  7. XML电子口岸自动报关项目 真实百万级项目下载
  8. 将SQL Server查询导出本地excel(mail发送)
  9. kinmall分析百度亮剑区块链能否险中求胜?
  10. CENTOS7 Python3.7安装pip模块以及pip使用