Thymeleaf3.0版本官方地址

1 Introducing Thymeleaf

Thymeleaf 是一个跟 Velocity、FreeMarker 类似的模板引擎,它可以完全替代 JSP 。

1.1what is thymeleaf

我觉得没有比官方解释更好的了,原汁原味:

Thymeleaf is a modern server-side Java template engine for both web and standalone environments,
capable of processing HTML, XML, JavaScript, CSS and even plain text. The main goal of Thymeleaf is to provide an elegant and highly-maintainable way of creating
templates. To achieve this, it builds on the concept of Natural Templates to inject its logic
into template files in a way that doesn’t affect the template from being used as a design prototype.
This improves communication of design and bridges the gap between design and development teams. Thymeleaf has also been designed from the beginning with Web Standards in mind – especially
HTML5 – allowing you to create fully validating templates if that is a need for you.

1.2 What kind of templates can Thymeleaf process?

开箱即用,Thymeleaf 允许您处理六种模板,每种模板被称为模板模式:

  • HTML
  • XML
  • TEXT
  • JAVASCRIPT
  • CSS
  • RAW

有两种标记模板模式(HTML和XML)、三种文本模板模式(TEXT、JAVASCRIPT和CSS)和无操作模板模式(RAW)。

HTML模板模式将允许任何类型的HTML输入,包括HTML5、HTML 4和XHTML。不会进行验证或格式正确性检查,并且模板代码/结构将在输出中得到最大程度的尊重。

XML模板模式将允许XML输入。在这种情况下,代码应该是格式良好的— —没有未关闭的标记、没有未引用的属性等— —如果发现格式良好的违规,解析器将抛出异常。请注意,将不执行验证(针对DTD或XML模式)。

TEXT模板模式允许对非标记性质的模板使用特殊语法。此类模板的示例可以是文本电子邮件或模板文档。请注意,HTML或XML模板也可以作为TEXT处理,在这种情况下,它们不会作为标记进行解析,并且每个标签、DOCTYPE、注释等都将被视为纯文本。

JAVASCRIPT模板模式允许在Thymeleaf应用程序中处理JavaScript文件。这意味着能够像在HTML文件中那样使用模型数据,但是可以使用特定于JavaScript的集成,如专门的转义或自然脚本。JAVASCRIPT模板模式被认为是文本模式,因此使用与TEXT模板模式相同的特殊语法。

CSS模板模式将允许处理Thymeleaf应用程序中涉及的CSS文件。CSS模板模式与JAVASCRIPT模式类似,也是文本模式,使用TEXT模板模式的特殊处理语法。

RAW模板模式根本不会处理模板。它用来将未被触及的资源(文件、URL响应等)插入到正在处理的模板中。例如,HTML格式的外部不受控制的资源可以包含在应用程序模板中,因为可以安全地知道这些资源可能包含的任何Thymeleaf代码将不会被执行。

1.3 Dialects: The Standard Dialect

Thymeleaf是一个极易扩展的模板引擎(事实上,它可以称为模板引擎框架),它允许您定义和自定义模板处理细节的方式。

对某个文本(标记、一些文本、注释,或者仅仅是占位符)进行标记的一些逻辑称为处理器,而一系列的这些处理器的集合(也许还有一些额外的工件)组成了方言,开箱即用,Thymeleaf的核心库提供了一个方言称为标准方言,这应该足够大多数用户使用。

注意,方言实际上可以没有处理器,完全由其他类型的工件组成,但处理器绝对是最常用的用例。

本教程涵盖标准方言。您在以下几页中将了解的每个属性和语法特性都由这种方言定义,即使没有明确提到这一点。

当然,如果用户想在使用本此教程的高级功能的同时定义自己的处理逻辑,也可以创建自己的方言(甚至扩展标准方言)。Thymeleaf也可以配置为一次使用几种方言。



标准方言的大部分处理程序都是属性处理程序。这允许浏览器在处理HTML模板文件之前正确显示,因为它们会忽略附加属性。例如,虽然使用标记库的JSP可能包含不能由浏览器直接显示的代码片段,例如:

<form:inputText name="userName" value="${user.name}" />

…the Thymeleaf Standard Dialect would allow us to achieve the same functionality with:

<input type="text" name="userName" value="James Carrot" th:value="${user.name}" />

这不仅能被浏览器正确显示,而且还允许我们(可选地)在浏览器中指定一个值属性(此处为James Carrot),当原型在浏览器中静态打开时,该属性将显示。模板处理时,用${user.name}的计算值代替。

温馨提示:Thymeleaf 最为显著的特征是增强属性,任何属性都可以通过th:xx 来完成交互,例如th:value最终会覆盖value属性。

这有助于设计器和开发人员处理相同的模板文件,并减少将静态原型转换为工作模板文件所需的工作量。这个能力可以称它为自然模板的功能。

以上就是我从官网上学到的,有的地方由于翻译出来反而没有英文原文好理解,故部分片段未进行翻译总结为自己的话语,接下来再分析。

总结

相较与其他的模板引擎,它有如下三个极吸引人的特点:

第一,Thymeleaf 在有网络和无网络的环境下皆可运行,即它可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果。

这是由于它支持 html 原型,然后在 html 标签里增加额外的属性来达到模板+数据的展示方式。浏览器解释 html 时会忽略未定义的标签属性,所以 thymeleaf 的模板可以静态地运行;当有数据返回到页面时,Thymeleaf 标签会动态地替换掉静态内容,使页面动态显示。

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

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

和以前其它技术对比

Thymeleaf基本可以完全替代JSP。

JSP作为网页开发老技术,负责开发动态网页功能,实现MVC的视图View功能。

但是在开发过程中,jsp的缺点是什么呢?

<% %>等等jsp标签,java代码块与html静态文件元素来回穿插,导致页面可读性差。

另外,jsp在使用后台传输的对象的时候,需要用到jstl技术,例如,value="${user.username}",这个还好。

如果在使用each迭代时,更是要使用到c标签库

<c:forEach var="user" items="${user}"> <c:forEach>

而thymeleaf则使用th:each="user:${user}",不需要像jsp一样引入很多标签库

但是!thymeleaf既然具有强大的功能,既然也有其不好的地方,就是过于严格,在jsp中
标签不加
也不会报错,但是thymeleaf必须严格遵守对称规则,必须要加上结束标签。

好了,今天就先大概了解下它的好处和原理,后面再学习它的方言和规则,可能不会太详细,大家可以用到的时候查它的官网文档,写的很好的。

可以参考此文章很好的写的:

SpringBoot Thymeleaf使用教程(实用版)

thymeleaf第一篇:什么是-->为什么要使用-->有啥好处这玩意的更多相关文章

  1. 从.Net到Java学习第一篇——开篇

    以前我常说,公司用什么技术我就学什么.可是对于java,我曾经一度以为“学java是不可能的,这辈子不可能学java的.”结果,一遇到公司转java,我就不得不跑路了,于是乎,回头一看N家公司交过社保 ...

  2. 从0开始搭建SQL Server AlwaysOn 第一篇(配置域控)

    从0开始搭建SQL Server AlwaysOn 第一篇(配置域控) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www.cnb ...

  3. Python爬虫小白入门(四)PhatomJS+Selenium第一篇

    一.前言 在上一篇博文中,我们的爬虫面临着一个问题,在爬取Unsplash网站的时候,由于网站是下拉刷新,并没有分页.所以不能够通过页码获取页面的url来分别发送网络请求.我也尝试了其他方式,比如下拉 ...

  4. Three.js 第一篇:绘制一个静态的3D球体

    第一篇就画一个球体吧 首先我们知道Three.js其实是一个3D的JS引擎,其中的强大之处就在于这个JS框架并不是依托于JQUERY来写的.那么,我们在写这一篇绘制3D球体的文章的时候,应该注意哪些地 ...

  5. 深入学习jQuery选择器系列第一篇——基础选择器和层级选择器

    × 目录 [1]id选择器 [2]元素选择器 [3]类选择器[4]通配选择器[5]群组选择器[6]后代选择器[7]兄弟选择器 前面的话 选择器是jQuery的根基,在jQuery中,对事件处理.遍历D ...

  6. 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  7. Android基础学习第一篇—Project目录结构

    写在前面的话: 1. 最近在自学Android,也是边看书边写一些Demo,由于知识点越来越多,脑子越来越记不清楚,所以打算写成读书笔记,供以后查看,也算是把自己学到所理解的东西写出来,献丑,如有不对 ...

  8. 深入理解ajax系列第一篇——XHR对象

    × 目录 [1]创建对象 [2]发送请求 [3]接收响应[4]异步处理[5]实例演示 前面的话 ajax是asynchronous javascript and XML的简写,中文翻译是异步的java ...

  9. 深入理解javascript对象系列第一篇——初识对象

    × 目录 [1]定义 [2]创建 [3]组成[4]引用[5]方法 前面的话 javascript中的难点是函数.对象和继承,前面已经介绍过函数系列.从本系列开始介绍对象部分,本文是该系列的第一篇——初 ...

随机推荐

  1. jdbc-创建statement-数量过多导致游标超限

    在循环中重复创建  java.sql.Connection.prepareStatement(sql)  , 导致游标超限

  2. 软件工程UML第一次作业

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzzcxy/2018SE1/ 这个作业要求在哪里 https://edu.cnblogs.com/campus/f ...

  3. RewriteCond 和RewriteRule规则说明 (转)

    Apache的Mod_rewrite学习 (RewriteCond重写规则的条件)收藏RewriteCond Syntax: RewriteCond TestString CondPattern [f ...

  4. NAT模式/路由模式/全路由模式 (转)

    route全路由NAT NAT模式.此模式下,由局域网向广域网发送的数据包默认经过NAT转换,但路由器对所有源地址与局域网接口不在同一网段的数据包均不进行处理.例如,路由器LAN口IP设置为192.1 ...

  5. unity 卡牌聚拢算法

    unity 卡牌聚拢算法 前言 代码 前言 笔者在做项目时遇到了一个要聚拢手牌,像三国杀里的手牌聚拢的效果 大概效果图: 代码 public Dictionary<int, int> le ...

  6. linux安装ftp步骤

    1,查看是否安装了FTP:rpm -qa |grep vsftpd 2,如果没有安装,可以使用如下命令直接安装 yum -y install vsftpd 默认安装目录:/etc/vsftpd 3,添 ...

  7. QPainter 绘制图像接口

    阅读本文大概需要 3 分钟 我们在开发软件的过程中,绘制图像功能必不可少,使用 Qt 绘制图像时非常简单,只需要传递几个参数就可以实现功能,在 Qt 中绘制图像的 api有好几个 void drawI ...

  8. 【Linux】使用cryptsetup加密磁盘 策略为LUKS

    LUKS(Linux Unified Key Setup)为Linux硬盘分区加密提供了一种标准,它不仅能通用于不同的Linux发行版本,还支持多用户/口令.因为它的加密密钥独立于口令,所以如果口令失 ...

  9. 【Jboss】一台服务器上如何部署多个jboss

    一台服务器上如何部署多个jboss呢?直接把整个部署环境copy一份到相应的目录下? 这样只是前提,但是启动复制后的jboss就会发现,有很多端口被占用 3873,8080,8009,8443,808 ...

  10. Objects as Points:预测目标中心,无需NMS等后处理操作 | CVPR 2019

    论文基于关键点预测网络提出CenterNet算法,将检测目标视为关键点,先找到目标的中心点,然后回归其尺寸.对比上一篇同名的CenterNet算法,本文的算法更简洁且性能足够强大,不需要NMS等后处理 ...