thymeleaf第一篇:什么是-->为什么要使用-->有啥好处这玩意
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第一篇:什么是-->为什么要使用-->有啥好处这玩意的更多相关文章
- 从.Net到Java学习第一篇——开篇
以前我常说,公司用什么技术我就学什么.可是对于java,我曾经一度以为“学java是不可能的,这辈子不可能学java的.”结果,一遇到公司转java,我就不得不跑路了,于是乎,回头一看N家公司交过社保 ...
- 从0开始搭建SQL Server AlwaysOn 第一篇(配置域控)
从0开始搭建SQL Server AlwaysOn 第一篇(配置域控) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www.cnb ...
- Python爬虫小白入门(四)PhatomJS+Selenium第一篇
一.前言 在上一篇博文中,我们的爬虫面临着一个问题,在爬取Unsplash网站的时候,由于网站是下拉刷新,并没有分页.所以不能够通过页码获取页面的url来分别发送网络请求.我也尝试了其他方式,比如下拉 ...
- Three.js 第一篇:绘制一个静态的3D球体
第一篇就画一个球体吧 首先我们知道Three.js其实是一个3D的JS引擎,其中的强大之处就在于这个JS框架并不是依托于JQUERY来写的.那么,我们在写这一篇绘制3D球体的文章的时候,应该注意哪些地 ...
- 深入学习jQuery选择器系列第一篇——基础选择器和层级选择器
× 目录 [1]id选择器 [2]元素选择器 [3]类选择器[4]通配选择器[5]群组选择器[6]后代选择器[7]兄弟选择器 前面的话 选择器是jQuery的根基,在jQuery中,对事件处理.遍历D ...
- 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- Android基础学习第一篇—Project目录结构
写在前面的话: 1. 最近在自学Android,也是边看书边写一些Demo,由于知识点越来越多,脑子越来越记不清楚,所以打算写成读书笔记,供以后查看,也算是把自己学到所理解的东西写出来,献丑,如有不对 ...
- 深入理解ajax系列第一篇——XHR对象
× 目录 [1]创建对象 [2]发送请求 [3]接收响应[4]异步处理[5]实例演示 前面的话 ajax是asynchronous javascript and XML的简写,中文翻译是异步的java ...
- 深入理解javascript对象系列第一篇——初识对象
× 目录 [1]定义 [2]创建 [3]组成[4]引用[5]方法 前面的话 javascript中的难点是函数.对象和继承,前面已经介绍过函数系列.从本系列开始介绍对象部分,本文是该系列的第一篇——初 ...
随机推荐
- vue中Echarts的使用-自选效果
由于项目要求使用数据图,于是我选择了我们的Echarts用来实现效果 一:全局安装Echarts npm install echarts --save(这个安装的是最新的版本有时候回报init未定义) ...
- 技术面试没过,居然是没有用pytest测试框架
1.引言 我有一个朋友是做Python自动化测试的.前几天他告诉我去参加一个大厂面试被刷了. 我问他是有没有总结被刷下来的原因.他说面试官问了一些 pytest 单元测试框架相关的知识,包括什么插件系 ...
- scala模式匹配 case a @ b语法
class caseTest { def main(args: Array[String]): Unit = { val c = Person(Student(1),"a") c ...
- vue踩坑记,持续更新中......
1.运行项目报错 you may use special comments to disable some waring. use //eslint-disable-next-line.....吧啦吧 ...
- 阿里面试:MySQL如何设计索引更高效?
有情怀,有干货,微信搜索[三太子敖丙]关注这个不一样的程序员. 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点.资料以及我的系列文章. ...
- 安卓mbn文件丢失,无法搜索移动信号,工程模式mbn乱改,不用QPST烧录怎样恢复?超简单!
没有root,工程模式乱改mbn配置选项,导致mbn配置丢失,无法搜索移动网络. 重启若干次改配置都无效,清空网络设置无效,恢复出厂无效,recovery三清无效, 不太想拆机root麻烦,QPST配 ...
- Linux服务器下安装Composer 并使用Composer安装Thinkphp5.0
Composer官方文档:https://docs.phpcomposer.com/00-intro.htmlComposer是一个php的包管理器.要求php版本在5.3以上. 一.安装Compos ...
- [日常填坑系列]CAP食用指南-版本引用问题
一.前言 最近,由于好久没升级底层框架,一直用着netcore2.2版本,导致有些包没能更新到最新的版本,例如:CAP. 然而,在最近升级到CAP:3.1.2版本的时候,发现有点小坑,只能退回到CAP ...
- Java API 操作HBase Shell
HBase Shell API 操作 创建工程 本实验的环境实在ubuntu18.04下完成,首先在改虚拟机中安装开发工具eclipse. 然后创建Java项目名字叫hbase-test 配置运行环境 ...
- select 里面带的值居然是估算的?
mysql> set profiling=1;Query OK, 0 rows affected, 1 warning (0.07 sec) mysql> select count(1) ...