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

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模板的使用。在后续文章中,将讲解其它几个模板的使用。

© 2021 谈谈IT All Rights Reserved. 本站访客数人次 本站总访问量
Theme by hiero