大家好,我是IT修真院,一枚正直纯洁善良的如刚入门的Java程序员,今天跟大家分享一下修真院官网JAVA任务十,深度思考中的知识点————
1.知识背景
Thymeleaf是一款用于渲染XML/XHTML/HTML5内容的模板引擎。类似JSP,Velocity,FreeMaker等, 它也可以轻易的与Spring MVC等Web框架进行集成作为Web应用的模板引擎。与其它模板引擎相比, Thymeleaf最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个Web应用。
thymeLea支持Spring Expression Language语言作为方言,也就是SpEL,在学习JSP时我们对EL表达式都有一定的认识了,SpEL是可以用于Spring中的一种EL表达式。
简而言之,与我们使用过的JSP不同,thymeLeaf是使用html的标签来完成逻辑和数据的传入进行渲染, 而且不用像jsp一样作为一个servlet被编译再生成。即便单独的thymeleaf html文件依旧可以正确打开并有少量(相对)有价值的信息,并且是可以被浏览器直接打开的。
可以说用thymeLeaf完全替代jsp是可行的。何况他的功能更强大。
2.知识剖析
Thymeleaf 是一种模板语言。那模板语言或模板引擎是什么?常见的模板语言都包含以下几个概念:数据(Data)、模板(Template)、模板引擎(Template Engine)和结果文档(Result Documents)。
- 数据
数据是信息的表现形式和载体,可以是符号、文字、数字、语音、图像、视频等。数据和信息是不可分离的,数据是信息的表达,信息是数据的内涵。数据本身没有意义,数据只有对实体行为产生影响时才成为信息。 模板
模板,是一个蓝图,即一个与类型无关的类。编译器在使用模板时,会根据模板实参对模板进行实例化,得到一个与类型相关的类。模板引擎
模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档。- 结果文档
一种特定格式的文档,比如用于网站的模板引擎就会生成一个标准的HTML文档。
模板语言用途广泛,常见的用途如下:
- 页面渲染
- 文档生成
- 代码生成
- 所有 “数据+模板=文本” 的应用场景
3. 常见问题
ThymeLeaf与jsp的区别?
ThymeLeaf如何替换模板和数据?
如何使用ThymeLeaf?
ThymeLeaf可以怎么学习?
4. 解决方案
ThymeLeaf与jsp的区别
Thymeleaf是以HTML文件为基础,添加标签完成“数据+模板=文本”的过程,而jsp虽然看起来像XML或者HTML,但其实都不是。
加之其使用了大量java源码(scriptlet)jsp标签库(jstl)使得文件可读性不高,也摧毁了我们想维持一个格式良好的文档的可能性。
JSP缺乏良好格式的一个副作用就是它很少能够与其产生的HTML类似。所以,在Web浏览器或HTML编辑器中查看未经渲染的JSP模板是非常令人困惑的,而且得到的结果看上去也很丑陋。
因为JSP并不是真正的HTML,很多浏览器和编辑器展现的效果都很难在审美上接近模板最终所渲染出来的效果。
Thymeleaf是在标签中通过添加th:的方式实现逻辑和数据传递,html文件本身可以被浏览器很好的支持,即使没有后台的数据传输,也可以显示一个相差不多的页面。
在查找资料时有看到不少评论说ThymeLeaf有性能方面的问题,而同时也看到不少评论说在经过多年的升级过后,thymeleaf的性能已经提升了数十倍。总之,性能应该目前不算是问题。
与此同时,一些评论也称,需要严格遵守XMl规范的写法让他们难以接受,以及js脚本必须加入‘/’。
不过,ThymeLeaf现在时Spring官方的模板引擎方案。从1.5(或许更早)开始spring-boot对jsp的支持也有不少问题
所以无论优缺点,别问,问就是学就完事了。
ThymeLeaf如何替换模板和数据?
模板引擎可以让程序实现界面与数据分离,业务代码与逻辑代码的分离,这就提升了开发效率,良好的设计也使得代码复用变得更加容易。
一般的模板引擎都包含一个模板解析器和一套标记语言,好的模板引擎有简洁的语法规则、强大的功能、高效的渲染效率、详尽的帮助说明与不断的更新与维护。
如何使用ThymeLeaf?
spring-boot中不进行任何配置也可以使用,此时使用的是默认配置,需要自定义配置时在properties文件中配置即可。
传统spring项目中,可以通过配置类和xml方式配置模板和视图处理器的Bean
代码就不放在PPT中了。
ThymeLeaf可以怎么学习?
官方有个5分钟入门文档(英文):https://www.thymeleaf.org/doc/articles/standarddialect5minutes.html
官方还有一个互动教程可以通过简单的练习快速了解ThymeLeaf:http://itutorial.thymeleaf.org/
我自己clone了一个spring-boot的教程项目,里面用了ThymeLeaf:https://github.com/JeffLi1993/springboot-learning-example
百(gu)度(ge)
5. 编码实战
6.扩展思考
ThymeLeaf可以实现什么功能?
5种表达式:
${…} : 变量表达式
*{…} : 选择表达式
/#{…} : 消息(i28n)表达式
@{…} : 链接(URL)表达式
~{…} : 片段表达式
这5个表达式分工不同,但同时也可以互相嵌套。这也是SpEL所支持的,或者说,在Spring项目中使用的这些表达式本身也同时是SpEL
鉴于本人糟糕的前端(HTML)知识,对于ThymeLeaf的详细用法只浅尝辄止了。
只对简单的变量值传递,格式化(日期等),字符串拼接(表达式结果生成的字符串和普通文本字符串),国际化(i18n),转义,迭代(foreach),条件(if/else, switch),SpEL(Spring官方文档Part III 第7节),链接(URL),form(这个就开始有很多不懂得了)等有些了解。
以上内容顺序来自ThymeLeaf官方互动教程前12章。我自己做了整理,在我的csdn(2018/6/8 还没发)和日报都有。
但是很明显的,fragment表达式可以实现模板代码的功能来实现复用,而且可以在th:fragment 种传递参数,实现一定程度的个性化需求。
7. 参考文献
https://www.bysocket.com/?p=1973
https://www.tianmaying.com/tutorial/using-thymeleaf
https://www.jianshu.com/p/ed9d47f92e37
https://www.jianshu.com/p/02678b669c66
https://www.imooc.com/article/20304
今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~
技能树.IT修真院
“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。