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中的难点是函数.对象和继承,前面已经介绍过函数系列.从本系列开始介绍对象部分,本文是该系列的第一篇——初 ...
随机推荐
- CentOS-8.3.2011-x86_64 配置网络环境的几个方案以及问题处理方法
1. 在安装前的环境配置中配置网络 可以通过 NETWORK & HOST NAME 进行网络配置, 推介通过这里便捷设置. 如果在安装的 CentOS 之前的配置选项中没有进行用户和网络的配 ...
- Goland 设置代码格式化
前言 之前一直喜欢 VsCode 的代码自动格式化和其他的一些功能 今天了解到原来 Goland 也有这些功能, 想想也对, 毕竟这么大 正文 Goland设置代码格式化 进入设置,按需选择要使用的, ...
- Laya Ts 简易对象池
ts版本的简易对象池 ,目前主要支持3D的物体,也可以将其改成其他类型 要使用首先调用InitPool 方法 `/* 使用说明: 使用必须先调用 InitPool 方法将对象池初始化 然后 Deque ...
- node解决跨域和服务器代理详解代码
node中有很多解决服务器代理的插件,这里简介一个:express-http-proxy 之前网上查的使用node解决跨域的插件,有很多,例如,cors,koa2,这里解决跨域问题我拿原生解决的,ex ...
- 【项目实践】手把手带你搞定SSM
以项目驱动学习,以实践检验真知 前言 现在使用Java后端开发使用的技术栈基本上比较统一:Spring + SpringMVC + Mybatis,即大家常说的SSM.虽然现在流行的做法是使用Spri ...
- 【Java】一个简单的Java应用程序
简单记录,Java 核心技术卷I 基础知识(原书第10 版) 一个简单的Java应用程序"Hello, World!" Hello, World! Goodbye,World! 一 ...
- 【Linux】ethtool 用法
ethtool命令用于获取以太网卡的配置信息,或者修改这些配置.这个命令比较复杂,功能特别多. 语法 ethtool [ -a | -c | -g | -i | -d | -k | -r | -S | ...
- XSS类型,防御及常见payload构造总结
什么是XSS? XSS全称是Cross Site Scripting即跨站脚本,当目标网站目标用户浏览器渲染HTML文档的过程中,出现了不被预期的脚本指令并执行时,XSS就发生了. 最直接的例子:&l ...
- RSA共模攻击
在安恒月赛中碰到一道密码学方向的ctf题 附上源码 from flag import flag from Crypto.Util.number import * p=getPrime(1024) q= ...
- 使用line_profiler对python代码性能进行评估优化
性能测试的意义 在做完一个python项目之后,我们经常要考虑对软件的性能进行优化.那么我们需要一个软件优化的思路,首先我们需要明确软件本身代码以及函数的瓶颈,最理想的情况就是有这样一个工具,能够将一 ...