Spring in Acton 4 读书笔记之使用 Thymeleaf

字数806 大约花费3分钟

目录

  1. 1. JSP 的缺陷
  2. 2. 如何配置 Thymeleaf 视图解析器
  3. 3. 定义 Thymeleaf 模板
  4. 4. 小结

JSP 的缺陷

尽管 JSP 历史悠久、应用广泛,但它有以下缺陷:

  • 尽管看起来像,但既不是 HTML,也不是 XML
  • JSP 标签库使文档格式不友好
  • 如果 JSP 标签没有在服务端正确编译后发给浏览器,浏览器由于不理解 JSP 标签,渲染的结果是一个灾难
  • JSP 标准和 servlet 耦合,所以 JSP 只能用于基于 servlet 的 web 应用视图。像 email 或者不基于 servlet 的 web 应用就无法使用 JSP

由于 JSP 有以上缺陷,许多模板试图取代 JSP,而其中 Thymeleaf 是一个令人兴奋的选择。Thymeleaf 自然,不依赖于标签库。可以在任何欢迎 HTML 的地方编辑和渲染。并且由于不依赖于 servlet 标准,所以使用范围比 JSP 广。

如何配置 Thymeleaf 视图解析器

要在 Spring 中使用 Thymeleaf,需要配置以下三个 bean,以集成 Thymeleaf 和 Spring:

  • ThymeleafViewResolver 根据视图逻辑名称解析视图模板
  • SpringTemplateEngine 处理模板并渲染结果
  • TemplateResolver 加载 Thymeleaf 模板
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@Bean
public ViewResolver viewResolver(
SpringTemplateEngine templateEngine)
{

ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setTemplateEngine(templateEngine);
return viewResolver;
}

@Bean
public TemplateEngine templateEngine(
 TemplateResolver templateResolver)
{

SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver);
return templateEngine;
}

@Bean
public TemplateResolver templateResolver() {
TemplateResolver templateResolver =
new ServletContextTemplateResolver();
templateResolver.setPrefix("/WEB-INF/templates/");
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode("HTML5");
return templateResolver;
}

通过以上配置,Spring MVC 的 controller 返回的 response 中的视图将使用 Thymeleaf 解析。ThymeleafViewResolver 实现了 Spring MVC 的 ViewResolver 接口,用来根据解析视图的逻辑名称,并且解析视图。

ThymeleafViewResolver 中注入了 TemplateEngine,TemplateEngine 中注入了 TemplateResolver。SpringTemplateEngine 用于解析(parse)template 文件,并且进行渲染,而 TemplateResolver,和 InternalResourceViewResolver 类似,使用和前缀和后缀属性,再加上视图的逻辑名称,以确定 template 文件的位置。templateMode 设置为 HTML5 表示将用于渲染 HTML5 文件。

定义 Thymeleaf 模板

Thymeleaf 模板主要是 html。不像 JSP 那样有特别的标签和标签库,而是在 html 中引入 Thymeleaf 的 namespace 后,通过给 html 的标签增加属性的方式来添加功能。

1
2
3
4
5
6
7
8
9
10
11
12
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org">

<head>
<title>Spittr</title>
<link rel="stylesheet"
type="text/css"
th:href="@{/resources/style.css}"></link>

<h1>Welcome to Spittr</h1>
<a th:href="@{/spittles}">Spittles</a> |
<a th:href="@{/spitter/register}">Register</a>
</body>
</html>

上面的例子中使用了 th:href 标签,并使用表达式来表示要跳转的页面。Thymeleaf 模板会解析这些标签和表达式,生成相应的 html。即使解析失败,结果也只是 a 标签没有 href 属性而已。在浏览器中,只是无法点击超链接,并不会像 JSP 那样显示奇怪的 JSP 代码。

小结

本文列举了 JSP 的缺陷,介绍了一种新型的模板:Thymeleaf,并详细说明了如何使用 Spring 配置 Thymeleaf 视图解析器,简单讲解了 Thymeleaf 模板的使用。在后续文章中,将讲解其它几个模板的使用。

谈谈 IT的文章均为原创或翻译(翻译会注明外文来源),转载请以链接形式标明本文地址: http://tantanit.com/spring-thymeleaf/

谈谈IT

欢迎关注官方微信公众号获取最新原创文章