一文理清Thymeleaf前世今生


什么是Thymeleaf

  • Thymeleaf 官网是这么解释的:Thymeleaf is a modern server-side Java template engine for both web and standalone environments.
  • 译过来就是:Thymeleaf是适用于Web和独立环境的现代服务器端Java模板引擎

常见的其它模板引擎

非前后端分离模板引擎: Thymeleaf 、Velocity、Freemarker

前后端分离基本上是vue、react的天下。

Thymeleaf有什么特点

  • 动静分离: Thymeleaf选用html作为模板页,这是任何一款其他模板引擎做不到的!Thymeleaf使用html通过一些特定标签语法代表其含义,但并未破坏html结构,即使无网络、不通过后端渲染也能在浏览器成功打开,大大方便界面的测试和修改。
  • 开箱即用: Thymeleaf提供标准和Spring标准两种方言,可以直接套用模板实现JSTL、 OGNL表达式效果,避免每天套模板、改JSTL、改标签的困扰。同时开发人员也可以扩展和创建自定义的方言。
  • Springboot官方推荐: Springboot官方做了很多默认配置,开发者只需编写对应html即可,大大减轻了上手难度和配置复杂度。
  • 性能提升: 此外,Thymelaf3.0在方言、独立于Java Servlet API、重构核心API、片段表达等方面有着巨大提升和改善,具体可以参看Thymeleaf3十分钟参考指南

什么是动静分离

看一个图就明白了。

表达式语法

它还带有一些称为标准方言(称为StandardSpringStandard)的东西,它们定义了一组功能,这些功能应该足以满足大多数情况。可以识别这些标准方言在模板中的使用,因为它将包含以th前缀开头的属性,如<span th:text="...">

请注意,StandardSpringStandard方言几乎完全相同,只是SpringStandard包含了集成到Spring MVC应用程序中的特定功能(例如,使用Spring表达式语言进行表达式评估而不是OGNL)。

大多数Thymeleaf属性允许将它们的值设置为或包含表达式,由于它们使用的方言,我们将其称为标准表达式。这些表达式可以有五种类型:

  • ${...} : 变量表达式。
  • *{...} : 选择表达式。
  • #{...} : 消息 (i18n) 表达式。
  • @{...} : 链接 (URL) 表达式。
  • ~{...} : 片段表达式。

更多语法参考:Thymeleaf标准方言 - Thymeleaf教程™ (yiibai.com)

Thymeleaf 模板原理

模板的诞生是为了将显示与数据分离,模板技术多种多样,但其本质是将模板文件和数据通过模板引擎生成最终的 HTML 代码。Thymeleaf 亦是如此。

  1. 没有模板

  没有模板前,我们可以直接用后端语言输出HTML前端,并让浏览器渲染。

  1. 有了模板

  在有了模板后,后端语言只要输出数据(例如 XML 格式、JSON 格式),把数据交给模板引擎,模板引擎根据模板文件和数据进行渲染成HTML文档。

所谓模板引擎,需要把模板文件、数据解析到前端HTML文档流展示给用户看。

  目前 Thymeleaf 是面向 Web 和独立环境的现代服务器端 Java 模板引擎,能够处理 HTML,XML,JavaScript,CSS 设置纯文本。

Thymeleaf 工作流程

我们需要提出几个问题

  1. 当在控制层输出对象,这些对象是怎么被引擎识别

  在 Controller 层我们输出了对象 user 和 users 两个对象。这两个对象则被模板引擎托管。

  1. 引擎加载模版文件的时候,如何识别需要替换的值

  模板引擎根据 Controller 中的模板路径 /demo/simple 找到相应的模板文件,模板文件中使用正则表达式查找模板标签语言,Thymeleaf 模板引擎采用 th: 开头。例如 th:value, th:text 。

  1. 最后引擎是如何吧控制层对象转化成 html 等前段语言输出的

  模板引擎找到了模板文件中的模板表达式,模板引擎根据模板表达式中的内容来执行模板处理器,算法把 Controller 输出的对象匹配到模板表达式中。

thymeleaf方言和处理器简介

知识对比追踪

  • JSTL——JSP Standard Tag Library

    JSP标准标签库,是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。JSTL1.0 由四个定制标记库(core、format、xml 和 sql)和一对通用标记库验证器组成。出现在Struts、SpringMVC的框架中比较多,现在由于去JSP化、前后端分离架构基本已经被淘汰了。

  • EL——Expressiong Language

    与JSP的容器上下文结合,获取相应容器范围内的变量内容,EL表达式的格式:用美元符号($)定界,内容包括在花括号({})中;
    例如: ${loginInfoBean.suser}

  • OGNL——Object Graph Notation Language

    对象图导航语言。是一种可以方便地操作对象属性的开源表达式语言。Struts2中默认支持OGNL。OGNL有如下特点:

    • 1、支持对象方法调用,形式如:objName.methodName();
    • 2、支持类静态的方法调用和值访问,表达式的格式为@[类全名(包括包路)]@[方法名 | 值名],例如: @java.lang.String@format(‘foo %s’, ‘bar’)或@tutorial.MyConstant@APP_NAME;
    • 3、支持赋值操作和表达式串联,例如: price=100, discount=0.8, calculatePrice(),这个表达式会返回80;
    • 4、访问OGNL上下文(OGNL context)和ActionContext;
    • 5、操作集合对象。
  • 标准方言

    Thymeleaf称为Standard和SpringStandard的东西,它们定义了一组功能,这些功能应该足以满足大多数情况。可以识别这些标准方言在模板中的使用,因为它将包含以 th前缀开头的属性,如 。Standard和SpringStandard方言几乎完全相同,只是SpringStandard包含了集成到Spring MVC应用程序中的特定功能。


文章作者: KavenRan
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 KavenRan !
 上一篇
团队教练实践工作坊总结 团队教练实践工作坊总结
ICF (国际教练联合会),是一个全球性的领先的教练组织。此组织致力于促进教练技术的职业化发展,其方法包括树立高等级的道德标准,提供独立的证书,以及建立全球认证教练的网络。 欣赏式探询4D循环欣赏式探询可以用于个人或者组织, 它有四个个
2021-06-28
下一篇 
基于Jenkins、Figma插件实现原理探究web系统插件化架构 基于Jenkins、Figma插件实现原理探究web系统插件化架构
背景:对于大型web应用而言,功能极其丰富复杂,为了具备扩展性,部分项目选择插件化架构方式,开放一部分系统Hook给具备开发能力的用户,不但提升用户的体验感,还同时丰富平台功能,一举两得。如何构建具备插件化能力的平台?本文尝试通过分析je
2021-06-15
  目录