Spring Boot 系列 | 第七篇:使用Thymelaef模板

Spring Boot模板引擎

Spring Boot支持多种默认模板引擎包括:

  • FreeMarker
  • Groovy
  • Thymeleaf(官方推荐)
  • Mustache

JSP技术SpringBoot官方不推荐使用,原因如下:

  • Tomcat只支持war打包方式,不支持jar方式
  • Jetty嵌套的容器不支持jsp
  • Undertow

当使用以上模板的任何一个,他们默认的默认配置目录为:
src/main/resources/templates

Thymelaef模板引擎

Thymeleaf是一款用于渲染xml/xhtml/html5的引擎。使用方式如下:

  • Spring Boot中使用@Controller中的方法可以直接返回视图名称,模板中会直接渲染
  • 模板中的表达式支持Spring表达式语言

集成步骤

引入依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
编写Controller:
@Controller
public class ResourceController {

    @GetMapping()
    public String index(Model model) {
        model.addAttribute("name","wangjianfeng");
        return "/index";
    }
}

resources目录下新建一个目录:templates,然后在该目录下新建一个文件index.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<span>Hello <span th:text="${name}"> World </span> !</span>
</table>
</body>
</html>

启动项目,访问http://localhost:8080/demo,查看效果。
发现出错:<meta charset="UTF-8">,缺少最后的标签封闭符号/,报错而转到错误页

解决方法:

application.properties中添加以下配置:

spring.thymeleaf.mode=LEGACYHTML5

添加依赖:

<dependency>
    <groupId>net.sourceforge.nekohtml</groupId>
    <artifactId>nekohtml</artifactId>
    <version>1.9.22</version>
</dependency>

再次访问可以看到正确的页面。

Thymeleaf配置

可以在application.properties中配置一下内容:

# THYMELEAF (ThymeleafAutoConfiguration)
#开启模板缓存(默认值:true)
spring.thymeleaf.cache=true 
#Check that the template exists before rendering it.
spring.thymeleaf.check-template=true 
#检查模板位置是否正确(默认值:true)
spring.thymeleaf.check-template-location=true
#Content-Type的值(默认值:text/html)
spring.thymeleaf.content-type=text/html
#开启MVC Thymeleaf视图解析(默认值:true)
spring.thymeleaf.enabled=true
#模板编码
spring.thymeleaf.encoding=UTF-8
#要被排除在解析之外的视图名称列表,用逗号分隔
spring.thymeleaf.excluded-view-names=
#要运用于模板之上的模板模式。另见StandardTemplate-ModeHandlers(默认值:HTML5)
spring.thymeleaf.mode=HTML5
#在构建URL时添加到视图名称前的前缀(默认值:classpath:/templates/)
spring.thymeleaf.prefix=classpath:/templates/
#在构建URL时添加到视图名称后的后缀(默认值:.html)
spring.thymeleaf.suffix=.html
#Thymeleaf模板解析器在解析器链中的顺序。默认情况下,它排第一位。顺序从1开始,只有在定义了额外的TemplateResolver Bean时才需要设置这个属性。
#spring.thymeleaf.template-resolver-order=
#可解析的视图名称列表,用逗号分隔
#spring.thymeleaf.view-names=

参考文章:

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐