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. Typecho 主题更换

    Typecho 主题更换 前言 上一篇已经搭建自己的 Typecho 博客,博客搭建完成自带一个默认主题,不是很喜欢默认的主题,想换一个自己喜欢的主题,并在基础上进行修改. 本文就介绍下如何更换和自定 ...

  2. String被final修饰

    源码:

  3. python之logging 模块(下篇)

    四.日志处理流程(第二种日志使用方式) 上面简单配置的方法例子中我们了解到了logging.debug().logging.info().logging.warning().logging.error ...

  4. 【C++】《C++ Primer 》第三章

    第三章 字符串.向量和数组 一.命名空间的using声明 使用某个命名空间:例如 using std::cin表示使用命名空间std中的名字cin. 头文件的代码一般不应该使用using声明,这是因为 ...

  5. MyBatis 查询的时候属性名和字段名不一致的问题

    目录 问题 解决方案:resultMap 问题 当我们数据库中的字段和实体类中的字段不一致的时候,查询会出问题 数据库字段是 pwd id name pwd 1 张三 123456 2 李四 1234 ...

  6. kubernets之headless

    一  认识headless服务 1服务以及服务的作用相信大家都已经耳熟能详了吗,服务接受请求,并且随机的将请求转发到相关联的任一pod来处理请求,但是考虑另外一种场景, 如果有客户端需要知道这个服务关 ...

  7. Loadrunner参数化数据配置与更新方式

    之前遇到过一种情况,对脚本进行并发测试时,脚本没有报错,但是有丢失的事物,与开发配合检查确定不是代码的问题,然后检查脚本,更换参数化数据配置与更新方式,问题解决.现在对参数化数据配置和更新方式进行总结 ...

  8. Pytorch 中张量的理解

    张量是一棵树 长久以来,张量和其中维度的概念把我搞的晕头转向. 一维的张量是数组,二维的张量是矩阵,这也很有道理. 但是给一个二维张量,让我算出它每一行的和,应该用 sum(dim=0) 还是 sum ...

  9. 1、kubernetes简介

    Kubernetes简介 文档信息 中文官网:https://kubernetes.io/zh 中文社区:https://www.kubernetes.org.cn/ Kubernetes是容器集群管 ...

  10. 【Android初级】使用setContentView实现页面的转换效果(附源码)

    一提到Android中页面的切换,你是不是只想到了startActivity启动另一个Activity? 其实在Android中,可以直接利用setContentView达到类似页面转换效果的!实现思 ...