关键词:
layout: post
title: Spring Boot 2.x教程-Thymeleaf 原理是什么
categories: SpringBoot
description: Spring Boot 2.x教程-Thymeleaf 原理是什么
keywords: SpringBoot, Spring, Thymeleaf
---
如要要理清楚 Thymeleaf 的原理,那么就要从模板引擎的原理说起。Thymeleaf只不过是众多模板中的一员,功能是一致的。
例如 JSP 也是一种模板。
1 Thymeleaf 模板原理
模板的诞生是为了将显示与数据分离,模板技术多种多样,但其本质是将模板文件和数据通过模板引擎生成最终的 HTML 代码。Thymeleaf 亦是如此。
- 没有模板
??没有模板前,我们可以直接用后端语言输出HTML前端,并让浏览器渲染。
- 有了模板
??在有了模板后,后端语言只要输出数据(例如 XML 格式、JSON 格式),把数据交给模板引擎,模板引擎根据模板文件和数据进行渲染成HTML文档。
所谓模板引擎,需要把模板文件、数据解析到前端HTML文档流展示给用户看。
??目前 Thymeleaf 是面向 Web 和独立环境的现代服务器端 Java 模板引擎,能够处理 HTML,XML,JavaScript,CSS 设置纯文本。
2 Thymeleaf 模板引擎
Thymeleaf 可以处理 6 种类型的ember
- HTML
- XML
- TEXT
- JAVASCRIPT
- CSS
- RAW
Thymeleaf 支持HTML、JAVASCRIPT、CSS 这就意味着他完全兼容HTML代码。
目前 Thymeleaf 可对下面几种类型进行解析
- 文本
- 属性
- 循环迭代
- 条件判断
- 模板布局
- 局部变量
- 属性优先级
- 注释
- 内联
- 文本模板模式
- 其他
我们以一个简单的 Spring Boot 2.x教程-如何使用 Thymeleaf 示例来输出来看看 Thymeleaf 是怎么工作的。
2.1 Thymeleaf 的 简单示例
2.2 Thymeleaf 工作流程
我们需要提出几个问题
- 当在控制层输出对象,这些对象是怎么被引擎识别
??在 Controller 层我们输出了对象 user 和 users 两个对象。这两个对象则被模板引擎托管。
- 引擎加载模版文件的时候,如何识别需要替换的值
??模板引擎根据 Controller 中的模板路径 /demo/simple 找到相应的模板文件,模板文件中使用正则表达式查找模板标签语言,Thymeleaf 模板引擎采用 th: 开头。例如 th:value, th:text 。
- 最后引擎是如何吧控制层对象转化成 html 等前段语言输出的
??模板引擎找到了模板文件中的模板表达式,模板引擎根据模板表达式中的内容来实现一种算法,算法把 Controller 输出的对象匹配到模板表达式中。
引用
springboot学习——springboot2.x,thymeleaf自定义select标签(代码片段)
1、添加依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId></dependency>2、注册自定义标签类importjava.util.HashSet;importjava.util.Set;importorg.springframework.stereotype.Component;impor... 查看详情
《springboot免费教程》连载目录
...Star关注支持一下,随时获得更新信息!快速入门SpringBoot2.x基础教程:版本关系SpringBoot2.x基础教程:快速入门SpringBoot2.x基础教程:工程结构推荐配置详解SpringBoot2.x基础教程:配置文件详解SpringBoot2.x基础教... 查看详情
《springboot免费教程》连载目录
...Star关注支持一下,随时获得更新信息!快速入门SpringBoot2.x基础教程:版本关系SpringBoot2.x基础教程:快速入门SpringBoot2.x基础教程:工程结构推荐配置详解SpringBoot2.x基础教程:配置文件详解SpringBoot2.x基础教... 查看详情
springboot2.x整合redis
#准备工作配置application.ymlspring:thymeleaf:#thymeleafcache:falsedatasource:#datasourcedriver-class-name:com.mysql.cj.jdbc.Driverurl:jdbc:mysql://localhost:3306/mp?useUnicode=true&characterEncoding=utf 查看详情
2018最新springboot2.0教程(零基础入门)
一、零基础快速入门SpringBoot2.01、SpringBoot2.x课程全套介绍和高手系列知识点简介:介绍SpringBoot2.x课程大纲章节java基础,jdk环境,maven基础2、SpringBoot2.x依赖环境和版本新特性说明简介:讲解新版本依赖环境和springboot2新特性概述3... 查看详情
springboot2.0图文教程|集成邮件发送功能
...springboot/spring-boots-send-mail大家好,后续会间断地奉上一些SpringBoot2.x相关的博文,包括SpringBoot2.x教程和SpringBoot2.x新特性教程相关,如WebFlux等。还有自定义Starter组件的进阶教程,比如:如何封装一个自定义图 查看详情
springboot2.x基础教程:快速入门(代码片段)
如果文章对你有帮助,欢迎关注、点赞、收藏(一键三连)和订阅专栏微信号:hzy1014211086,如果你正在学习SpringBoot,可以加入我们的Spring技术交流群,共同成长序号内容1面试题专栏2Redis专栏3SpringBoot专栏3SpringBoo... 查看详情
springboot2.x开发案例之整合quartz任务管理系统
基于spring-boot2.x+quartz的CRUD任务管理系统,适用于中小项目。基于spring-boot+quartz的CRUD任务管理系统:https://gitee.com/52itstyle/spring-boot-quartz开发环境JDK1.8、Maven、Eclipse技术栈SpringBoot2.0.1、thymeleaf3.0.9、quartz2.3.0、iview、vue 查看详情
springboot2.x基础教程:快速入门(代码片段)
简介在您第1次接触和学习Spring框架的时候,是否因为其繁杂的配置而退却了?在你第n次使用Spring框架的时候,是否觉得一堆反复黏贴的配置有一些厌烦?那么您就不妨来试试使用SpringBoot来让你更易上手,更简单快捷地构建Spring... 查看详情
springboot2.x下多数据源配置
本文同样适用于2.x版本下Mybatis的多数据源配置项目中经常会遇到一个项目需要访问多个数据源的情况,多数情况下可以参考这个教程进行配置。不过该教程适合springboot1.x版本,由于2.x版本修改默认连接池为Hikari,所以该教程中... 查看详情
springboot2.x最佳实践《一》之springboot2.x初体验
SpringBoot2.X最佳实践前言本系列文章,从零基础接触 SpringBoot2.x新版本,基础入门使用,热部署,到整合各个主流框架Redis4.x,消息队列AciveMQ,RocketMQ等,搜索框架ElasticSearch5.6版本,到web-flux反应式编程,到Actuator监控应用信息... 查看详情
springboot2.x基础教程:使用集中式缓存redis
之前我们介绍了两种进程内缓存的用法,包括SpringBoot默认使用的ConcurrentMap缓存以及缓存框架EhCache。虽然EhCache已经能够适用很多应用场景,但是由于EhCache是进程内的缓存框架,在集群模式下时,各应用服务器之间的缓存都是独... 查看详情
springboot2.x基础教程:使用springdatajpa访问mysql
在数据访问这章的第一篇文章《Spring中使用JdbcTemplate访问数据库》中,我们已经介绍了如何使用SpringBoot中最基本的jdbc模块来实现关系型数据库的数据读写操作。那么结合Web开发一章的内容,我们就可以利用JDBC模块与Web模块的功... 查看详情
springboot2.x系列教程48--多数据源配置之aop动态切换数据源
SpringBoot2.x系列教程48--多数据源配置之AOP动态切换数据源作者:一一哥在上一节中,我通过分包的方式实现了多数据源的配置,接下来我通过AOP切面的方式,带领大家实现第二种多数据源配置方式,该方式是在前面案例的基础上... 查看详情
springboot2.x系列教程48--多数据源配置之aop动态切换数据源
SpringBoot2.x系列教程48--多数据源配置之AOP动态切换数据源作者:一一哥在上一节中,我通过分包的方式实现了多数据源的配置,接下来我通过AOP切面的方式,带领大家实现第二种多数据源配置方式,该方式是在前面案例的基础上... 查看详情
springboot2.x基础教程:使用@scheduled实现定时任务(代码片段)
我们在编写SpringBoot应用中经常会遇到这样的场景,比如:我需要定时地发送一些短信、邮件之类的操作,也可能会定时地检查和监控一些标志、参数等。创建定时任务在SpringBoot中编写定时任务是非常简单的事,... 查看详情
springboot2.x系列教程(七十一)springbootactuator,每一个端点都有案例
前言在微服务系统架构中,服务的监控是必不可少的。目前大多数微服务应用又是基于SpringCloud系列,也可以说是基于SpringBoot系列的。此时使用SpringBootActuator来进行微服务的监控,不仅功能全面,而且非常方便。在上篇文章《Spr... 查看详情
springboot2.x系列教程(七十一)springbootactuator,每一个端点都有案例
前言在微服务系统架构中,服务的监控是必不可少的。目前大多数微服务应用又是基于SpringCloud系列,也可以说是基于SpringBoot系列的。此时使用SpringBootActuator来进行微服务的监控,不仅功能全面,而且非常方便。在上篇文章《Spr... 查看详情