Thymeleaf是什么?
Thymeleaf是一个现代服务器端Java模板引擎,适用于Web和独立环境,能够处理HTML,XML,JavaScript,CSS甚至纯文本。
Thymeleaf的主要目标是提供一种优雅且高度可维护的模板创建方式。为实现这一目标,它以自然模板的概念为基础,将其逻辑注入模板文件,其方式不会影响模板被用作设计原型。这改善了设计沟通,缩小了设计和开发团队之间的差距。
Thymeleaf也从一开始就设计了Web标准 - 特别是HTML5 - 允许您创建完全验证的模板,如果您需要的话。
1.2 Thymeleaf过程可以使用哪种模板?
开箱即用,Thymeleaf允许您处理六种模板,每种模板称为模板模式:
HTML
XML
文本
JAVASCRIPT
CSS
生的
有两种标记模板模式(HTML和XML),三种文本模板模式(TEXT,JAVASCRIPT和CSS)和一种无操作模板模式(RAW)。
该HTML模板模式将允许任何类型的HTML的输入,包括HTML5,HTML4和XHTML。不会执行验证或格式良好检查,并且将在输出中尽可能地尊重模板代码/结构。
该XML模板模式将允许XML输入。在这种情况下,代码应该是格式良好的 - 没有未封闭的标签,没有不带引号的属性等等 - 如果发现格式错误,解析器将抛出异常。请注意,不会执行验证(针对DTD或XML架构)。
该TEXT模板模式将允许非标记性质的模板使用特殊的语法。此类模板的示例可能是文本电子邮件或模板文档。请注意,HTML或XML模板也可以被处理TEXT,在这种情况下,它们不会被解析为标记,并且每个标记,DOCTYPE,注释等都将被视为纯文本。
该JAVASCRIPT模板模式将允许在Thymeleaf应用程序的JavaScript文件的处理。这意味着能够以与HTML文件相同的方式在JavaScript文件中使用模型数据,但是使用特定于JavaScript的集成,例如专门的转义或自然脚本。该JAVASCRIPT模板模式被认为是一种文本模式,因此使用相同的特殊语法的TEXT模板模式。
该CSS模板模式将允许参与Thymeleaf应用CSS文件的处理。与JAVASCRIPT模式类似,CSS模板模式也是文本模式,并使用TEXT模板模式中的特殊处理语法。
该RAW模板模式将根本不处理模板。它用于将未经处理的资源(文件,URL响应等)插入到正在处理的模板中。例如,HTML格式的外部
1.3方言:标准方言
Thymeleaf是一个极易扩展的模板引擎(实际上它可以称为模板引擎框架),允许您定义和自定义模板处理的细节级别。
将一些逻辑应用于标记工件(标签,某些文本,注释或仅仅是占位符,如果模板不是标记)的对象称为处理器,这些处理器的集合 - 加上可能还有一些额外的工件 - 是什么一个方言通常是由。开箱即用,Thymeleaf的核心库提供了一种称为标准方言的方言,对大多数用户来说应该足够了。
请注意,方言实际上可以没有处理器,并且完全由其他类型的工件组成,但处理器绝对是最常见的用例。
本教程涵盖标准方言。您将在以下页面中了解的每个属性和语法功能都由此方言定义,即使未明确提及。
当然,如果用户希望在利用库的高级功能的同时定义自己的处理逻辑,则可以创建自己的方言(甚至扩展标准方言)。Thymeleaf也可以配置为一次使用多种方言。
官方的thymeleaf-spring3和thymeleaf-spring4集成包都定义了一种称为“SpringStandard方言”的方言,它与标准方言大致相同,但是为了更好地利用Spring框架中的某些功能(例如) ,使用Spring Expression Language或SpringEL代替OGNL)。因此,如果您是Spring MVC用户,那么您不会浪费时间,因为您在此处学习的几乎所有内容都将在Spring应用程序中使用。
标准方言的大多数处理器都是属性处理器。这使得浏览器甚至可以在处理之前正确显示HTML模板文件,因为它们只会忽略其他属性。例如,虽然使用标记库的JSP可能包含不能由浏览器直接显示的代码片段,例如:
<form:inputText name=“userName” value="${user.name}" />
Thymeleaf Standard Dialect将允许我们实现相同的功能:
这不仅可以被浏览器正确显示,而且还允许我们(可选地)在其中指定值属性(在这种情况下为“James Carrot”),当在浏览器中静态打开原型时将显示该属性,并且这将由${user.name}在处理模板期间评估得到的值代替。
这有助于您的设计人员和开发人员处理相同的模板文件,并减少将静态原型转换为工作模板文件所需的工作量。执行此操作的能力是称为自然模板的功能。
Thymeleaf优势有哪些?
如今spring boot 的火爆程度到了想避开,想不闻都不容易。几大主流IT资讯网,随便浏览下都能看到相关的资讯。还有一个特点就是某一技术、应用火爆了就铺天盖地的报道来了,各种花式赞誉。好像你不学,你不用,你就low爆了,错过了风口,错过了1个亿似的。spring boot 这么火,那就学学,练练手,做个快速开发平台(也就是个可以在线设计数据库,再通过模板生成controller,service,dao 等各层的代码)。
spring boot 推荐使用thymeleaf,支持最好。jsp配置麻烦,现在不流行用jsp做视图层了。那好我也学学thymeleaf,跟一跟时代的脚步。各种不适应、采坑也就随之而来。当然有部分原因是初次使用,了解不深。
网上对thymeleaf的优点,主要集中在:模板即原型,前后端分离。缺点:效率不是最好的,甚至算差的。采用标签属性来进行模板的定义,没有破坏基本的html文档结构,这样就可以直接在浏览器中打开查看布局效果。也为前后端的分离开发奠定基础。前端只需要掌握thymeleaf,就可以单独开发,测试。
这样的优势对我们来说没有意义,我们是前后端个人负责。都是信息化管理系统,大部分页面布局,操作相似,也不会有太复杂的需要自造轮子的页面,后端人员熟悉后,可以前后端贯通开发。
1.方面现在的页面很多是组件构成,异步从后台获取数据。在没有数据填充的情况下,就只是一个基本的框架结构,一个容器元素如:div。这样的页面即使能直接打开观看,又能看到什么效果。和实际运行的效果还是有很多差别,特别是有数据无数据情况下的交互、反馈并不能完整的体现出来。最后还是要前后端联调测试。
2.还有些是运行时的上下文数据需要用到,包括相对路径等等。直接当静态文件打开和以web服务器运行效果也不一样。这些细小的差别出现问题,很难进行排查。因为习以为常,理所当然的惯性思维,很难让我们注意到是这些细节造成的问题。
3.实际的开发体验也并不好,标签里的属性如 src,href可能要写两边,一种是普通的静态文件路径写法,一种是thymeleaf的语法。说是既可以直接打开保证了能引用到外部文件,服务器运行时会使用thymeleaf的语发写的路径,保证实际运行时也能准确引用文件。对我们意义不大,都是看实际运行结果,调整程序。不会静态的看一次,运行看一次,没必要。
4.编写模板时,要引用静态资源时,涉及到路径,一般是相对web服务器的相对路径写法:/projectName/js/xxx 等。在jsp中会在头部或者一个被包含的文件中写:
String contextPath=request.getContextPath();
在需要的地方使用el表达式输出即可。thymeleaf中如果是标签属性要引用资源,就用 th:src ,th:href等语法。问题是js中要使用后台传过来的变量,写法又不一样。包含获取contextPath还有特定的语法。开始使用时就是懵的,要一点点找语法。不适应。2.0版本,所有的html标签还必须有关闭标签,否则解析出错。3.0到是解决了这个问题,不再强制要求。
5. 还有问题就是如果js脚本里使用了<,>,& [[ ]] 等符号麻烦又来了,解析出错。把脚本里的一些符号都当成thymeleaf里的符号进行解析。这肯定出问题啊。光加上<![CDATA[ ]]>还不行,还得加注释/<![CDATA[*/ /*]]>/ 结果还不行 还得改