Thymeleaf是一个Java库。它是一个XML / XHTML / HTML5模板引擎,能够将一组转换应用于模板文件,以显示应用程序生成的数据和/或文本。
它更适合在Web应用程序中提供XHTML / HTML5,但它可以处理任何XML文件,无论是在Web中还是在独立应用程序中。
Thymeleaf的主要目标是提供一种优雅且格式良好的创建模板的方法。为了实现这一点,它基于XML标签和属性,它们定义了DOM(文档对象模型)上预定义逻辑的执行,而不是在模板内显式地将该逻辑写为代码。
其架构允许快速处理模板,依赖于已解析文件的智能缓存,以便在执行期间使用尽可能少的I / O操作。
最后但并非最不重要的是,Thymeleaf从一开始就设计了XML和Web标准,如果您需要,可以创建完全验证的模板。
1.2 Thymeleaf过程可以使用哪种模板?
开箱即用,Thymeleaf允许您处理六种模板,每种模板称为模板模式:
- XML
- 有效的XML
- XHTML
- 有效的XHTML
- HTML5
- 旧版HTML5
所有这些模式都指的是格式良好的XML文件,但Legacy HTML5模式除外,它允许您处理HTML5文件,其中包含独立(非关闭)标记,没有值的标记属性或不在引号之间写入的标记属性。为了在这种特定模式下处理文件,Thymeleaf将首先执行转换,将您的文件转换为格式良好的XML文件,这些文件仍然是完全有效的HTML5(实际上是创建HTML5代码的推荐方法)1。
另请注意,验证仅适用于XML和XHTML模板。
然而,这些并不是Thymeleaf可以处理的唯一模板类型,并且用户始终能够通过指定在此模式下解析模板的方法和编写结果的方式来定义他/她自己的模式。这样,任何可以建模为DOM树(无论是否为XML)的东西都可以被Thymeleaf有效地作为模板处理。
1.3方言:标准方言
Thymeleaf是一个极易扩展的模板引擎(实际上它应该更好地称为模板引擎框架),它允许您完全定义将在模板中处理的DOM节点以及它们的处理方式。
将一些逻辑应用于DOM节点的对象称为处理器,并且一组这些处理器 - 还有一些额外的工件 - 被称为方言,其中Thymeleaf的核心库提供了一个开箱即用的称为标准方言的方言,这应该足以满足大部分用户的需求。
标准方言是本教程涵盖的方言。您将在以下页面中了解的每个属性和语法功能都由此方言定义,即使未明确提及。
当然,如果用户希望在利用库的高级功能的同时定义自己的处理逻辑,则可以创建自己的方言(甚至扩展标准方言)。模板引擎可以一次配置多种方言。
官方的thymeleaf-spring3和thymeleaf-spring4集成包都定义了一种称为“SpringStandard Dialect”的方言,大部分等同于标准方言,但是经过少量修改以更好地利用Spring Framework中的某些功能(例如,使用Spring Expression语言而不是Thymeleaf的标准OGNL)。因此,如果您是Spring MVC用户,那么您不会浪费时间,因为您在此处学习的几乎所有内容都将在Spring应用程序中使用。
Thymeleaf标准方言可以在任何模式下处理模板,但特别适用于面向Web的模板模式(XHTML和HTML5模式)。除了HTML5,它还专门支持和验证以下XHTML规范:XHTML 1.0 Transitional,XHTML 1.0 Strict,XHTML 1.0 Frameset和XHTML 1.1。
标准方言的大多数处理器都是属性处理器。这使得浏览器甚至可以在处理之前正确显示XHTML / HTML5模板文件,因为它们只会忽略其他属性。例如,虽然使用标记库的JSP可能包含不能由浏览器直接显示的代码片段,例如:
<form:inputText name="userName" value="${user.name}" />
...... Thymeleaf Standard Dialect将允许我们实现相同的功能:
<input type="text" name="userName" value="James Carrot" th:value="${user.name}" />
这不仅会被浏览器正确显示,而且还允许我们(可选)指定其中的值属性(在这种情况下为“James Carrot”),当在浏览器中静态打开原型时将显示该属性,并且将由${user.name}
在模板的Thymeleaf处理期间评估得到的值代替。
如果需要,这将允许您的设计人员和开发人员处理相同的模板文件,并减少将静态原型转换为工作模板文件所需的工作量。这样做的能力通常称为自然模板。
1.4整体架构
Thymeleaf的核心是DOM处理引擎。具体来说,它使用自己的高性能DOM实现 - 不是标准的DOM API--用于构建模板的内存树表示,稍后通过遍历节点并在其上执行处理器来操作处理器,根据当前配置和传递给模板的数据集,用于表示 - 称为上下文。
使用DOM模板表示使其非常适合Web应用程序,因为Web文档通常表示为对象树(实际上DOM树是浏览器在内存中表示网页的方式)。此外,基于大多数Web应用程序仅使用几十个模板的想法,这些模板不是大文件,并且在应用程序运行时它们通常不会更改,Thymeleaf使用内存缓存的已解析模板DOM树允许它在生产环境中快速,因为大多数模板处理操作都需要很少的I / O(如果有的话)。
如果您想要更多细节,本教程后面将有一整章专门介绍缓存以及Thymeleaf优化内存和资源使用以实现更快操作的方式。
然而,存在一个限制:与其他模板解析/处理方法相比,这种架构还需要为每个模板执行使用更大量的内存空间,这意味着您不应该使用该库来创建大数据XML文档(而不是网络文件)。作为一般的经验法则(并且总是取决于JVM的内存大小),如果您在单个模板执行中生成大小在几十兆字节的XML文件,那么您可能不应该使用Thymeleaf。
我们认为这种限制的原因仅适用于数据XML文件,而不是Web XHTML / HTML5是因为您永远不应该生成如此大的Web文档以至于用户的浏览器设置为闪亮和/或爆炸 - 请记住,这些浏览器也必须创建DOM树木为您的页面!
1.5在继续之前,你应该阅读......
Thymeleaf特别适合在Web应用程序中工作。Web应用程序基于一系列标准,每个人都应该非常清楚,但很少有人 - 即使他们已经与他们合作多年。
随着HTML5的出现,当今Web标准的最新技术比以往更加混乱...... 我们是否会从XHTML转向HTML?我们会放弃XML语法吗?为什么没有人再谈论XHTML 2.0了?
因此,在本教程中进一步讨论之前,强烈建议您阅读Thymeleaf网站上的一篇名为“从HTML到HTML(通过HTML)”的文章,您可以在以下地址找到该文章:http://www.thymeleaf.org /doc/articles/fromhtmltohtmlviahtml.html
转载:https://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf.html#what-is-thymeleaf