Spring Boot实战:从0开始动手搭建企业级项目
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

8.2 Thymeleaf模板引擎

8.2.1 Thymeleaf模板引擎介绍

Thymeleaf是目前比较受欢迎的模板引擎技术,主要因为其“原型即页面”的理念与Spring Boot倡导的快速开发非常契合。同时,Thymeleaf模板引擎技术也确实拥有其他技术所不具备的优点。Thymeleaf模板引擎官方图标如图8-2所示。

图8-2 Thymeleaf模板引擎官方图标

以Thymeleaf 3.0为例,其核心特性如下所示:

①完整的HTML5标记支持,全新的解析器

②自带多种模板模式,也可扩展支持其他模板格式

③在Web和非Web环境(离线)下都可以正常工作

④对Spring Web开发的支持非常完善

⑤独立的Servlet API

另外,Thymeleaf 3.0引入了一种新型表达式作为一般Thymeleaf标准表达系统的一部分,即“*片段表达式;”。

在Thymeleaf 3.0中Thymeleaf标准表达式的另一个新特性是NO-OP(无操作)令牌,由符号(_)表示。

Thymeleaf 3.0允许在HTML和XML模式下的模板内容和控制逻辑完全解耦,从而实现100%-Thymeleaf-free无逻辑模板。

Thymeleaf 3.0采用全新的方言系统。

Thymeleaf 3.0完成了核心API的重构。

Thymeleaf是高级语言的模板引擎,语法更简单,功能也更强大。

8.2.2 Thymeleaf并非Spring Boot默认的模板引擎

坊间一直有一种说法:Thymeleaf是Spring Boot默认的模板引擎。

这种说法的出处笔者无法详加考证,不过这种说法是不准确的。笔者看过多个版本的Spring Boot官方文档,并没有出现“Thymeleaf是Spring Boot默认的模板引擎”之类的表述。

Spring Boot官方文档对于模板引擎的介绍并没有太多的篇幅,提到Thymeleaf模板引擎的地方主要包括四个方面。

(1)Spring Boot支持多种模板引擎技术,其中包括Thymeleaf、FreeMarker、JSP、Mustache等。

(2)针对不同的模板引擎,Spring Boot也提供对应的视图解析器,包括ThymeleafViewResolver、FreeMarkerViewResolver、GroovyMarkupViewResolver和MustacheViewResolver。

(3)Thymeleaf模板引擎的配置项包括spring.thymeleaf.cache、spring.thymeleaf. enabled、spring.thymeleaf.prefix等配置项。

(4)在Spring Boot官方提供的代码样例中,大部分都使用Thymeleaf模板引擎。

除此之外,Spring Boot官方文档对于Thymeleaf模板引擎技术并没有额外的记录。形成坊间传闻的原因可能是Spring Boot官方文档在介绍这些模板引擎时,Thymeleaf模板引擎总是在第一位,并且Spring Boot提供的代码样例大部分使用了Thymeleaf模板引擎技术。这也许说明Thymeleaf模板引擎本身足够优秀,Spring Boot官方更为推荐开发人员使用它。

本书的代码案例,使用的模板引擎技术全部都是Thymeleaf。笔者选择它的原因如下所示。

(1)语法简单且功能强大。

(2)相关的教程比较多,学习成本低。

(3)Spring MVC集成Thymeleaf模板引擎,非常方便。

以往在开发Java Web项目时通常会使用JSP技术,而Spring官方明确建议不在Spring Boot项目中使用JSP作为模板引擎。

Spring官方表示,如果可能的话,尽量不要使用JSP,因为JSP在内嵌容器中有许多局限性。Spring官方文档也说明了相关局限性,如图8-3所示。

图8-3 JSP在内嵌容器中的局限性

(1)Jetty和Tomcat服务器支持JSP模板引擎,但是打包方式有限制,使用war包可以正常运行,使用jar包则不支持。

(2)Undertow服务器不支持JSP。

(3)对JSP的自定义错误页面支持不够友好。

因此,笔者最终选择Thymeleaf模板引擎技术。

接下来将结合代码演示Thymeleaf与Spring Boot的整合过程,以及Thymeleaf模板引擎的语法介绍。