2.5选择视图模板库

2.5选择视图模板库

在大多数情况下,对视图模板库的选择取决于个人喜好。Spring非常灵活,支持许多常见的模板选项。除了一些小的例外,所选择的模板库本身甚至不知道它是在Spring中工作的。

2.2列出了Spring Boot自动配置支持的模板选项。表2.2支持的模板选项。

模板 Spring Boot starter依赖
FreeMarker spring-boot-starter-freemarker
Groovy Templates spring-boot-starter-groovy-templates
JavaServer Page(JSP) None (provided by Tomcat or Jetty)
Mustache spring-boot-starter-mustache
Thymeleaf spring-boot-starter-thymeleaf

一般来说,可以选择想要的视图模板库,将其作为依赖项添加到构建中,然后开始在/templates目录中(在MavenGradl构建项目的src/main/resources目录下)编写模板。Spring Boot将检测选择的模板库,并自动配置所需的组件来为Spring MVC控制器提供视图。

已经在Taco Cloud应用程序中用Thymeleaf实现了这一点。在第1章中,在初始化项目时选择了Thymeleaf复选框。这导致Spring BootThymeleaf starter被包含在pom.xml文件中。当应用程序启动时,Spring Boot自动配置会检测到Thymeleaf的存在,并自动配置Thymeleaf bean。现在要做的就是开始在/templates中编写模板。

如果希望使用不同的模板库,只需在项目初始化时选择它,或者编辑现有的项目构建以包含新选择的模板库。

例如,假设想使用Mustache而不是Thymeleaf。没有问题。只需访问项目pom.xml文件,将:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

替换为:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mustache</artifactId>
</dependency>

当然,需要确保使用Mustache语法而不是Thymeleaf标签来编写所有模板。Mustache的使用细节(或选择的任何模板语言)不在这本书的范围之内,但为了让你知道会发生什么,这里有一个从Mustache模板摘录过来的片段,这个片段渲染了玉米饼设计表单的成分列表中的一个:

<h3>Designate your wrap:</h3>
{{#wrap}}
<div>
  <input name="ingredients" type="checkbox" value="{{id}}" />
  <span>{{name}}</span><br />
</div>
{{/wrap}}

这是Mustache与第2.1.3节中的Thymeleaf片段的等价替换。{{#wrap}} 块(以 {{/wrap}} 结尾)迭代request属性中的一个集合,该集合的键为wrap,并为每个项目呈现嵌入的HTML{{id}}{{name}} 标记引用项目的idname属性(应该是一个Ingredient

在表2.2中请注意,JSP在构建中不需要任何特殊的依赖关系。这是因为servlet容器本身(默认情况下是Tomcat)实现了JSP规范,因此不需要进一步的依赖关系。

但是如果选择使用JSP,就会遇到一个问题。事实证明,Java servlet容器 —— 包括嵌入式TomcatJetty容器 —— 通常在/WEB-INF下寻找jsp。但是如果将应用程序构建为一个可执行的JAR文件,就没有办法满足这个需求。因此,如果将应用程序构建为WAR文件并将其部署在传统的servlet容器中,那么JSP只是一个选项。如果正在构建一个可执行的JAR文件,必须选择ThymeleafFreeMarker或表2.2中的其他选项之一。

2.5.1缓存模板

默认情况下,模板在第一次使用时只解析一次,解析的结果被缓存以供后续使用。对于生产环境来说,这是一个很好的特性,因为它可以防止对每个请求进行冗余的模板解析,从而提高性能。

但是,在开发时,这个特性并不那么好。假设启动了应用程序并点击了玉米饼设计页面,并决定对其进行一些更改。当刷新web浏览器时,仍然会显示原始版本。查看更改的惟一方法是重新启动应用程序,这非常不方便。

幸运的是,有一种方法可以禁用缓存。只需将templateappropriate高速缓存属性设置为false。表2.3列出了每个支持的模板库的缓存属性。

2.3启用/禁用模板缓存的属性

模板 缓存使能属性
Freemarker spring.freemarker.cache
Groovy Templates spring.groovy.template.cache
Mustache spring.mustache.cache
Thymeleaf spring.thymeleaf.cache

默认情况下,所有这些属性都设置为true以启用缓存。可以通过将其缓存属性设置为false来禁用所选模板引擎的缓存。例如,要禁用Thymeleaf缓存,请在application.properties中添加以下行:

spring.thymeleaf.cache = false

惟一的问题是,在将应用程序部署到生产环境之前,一定要删除这一行(或将其设置为true)。一种选择是在profile文件中设置属性(我们将在第5章讨论profiles文件

一个更简单的选择是使用Spring BootDevTools,就像我们在第1章中选择的那样。在DevTools提供的许多有用的开发时帮助中,它将禁用所有模板库的缓存,但在部署应用程序时将禁用自身(从而重新启用模板缓存

上一页
下一页