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 |
|
通过以上配置,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 | <html xmlns="http://www.w3.org/1999/xhtml" |
上面的例子中使用了th:href标签,并使用表达式来表示要跳转的页面。Thymeleaf模板会解析这些标签和表达式,生成相应的html。即使解析失败,结果也只是a标签没有href属性而已。在浏览器中,只是无法点击超链接,并不会像JSP那样显示奇怪的JSP代码。
小结
本文列举了JSP的缺陷,介绍了一种新型的模板:Thymeleaf,并详细说明了如何使用Spring配置Thymeleaf视图解析器,简单讲解了Thymeleaf模板的使用。在后续文章中,将讲解其它几个模板的使用。