一、模板引擎 原文
(1)除了REST Web服务之外,您还可以使用Spring MVC来提供动态HTML内容。Spring MVC支持各种模板技术,包括Thymeleaf,FreeMarker、Velocity和JSP。同样,许多其他模板引擎包括它们自己的Spring MVC集成。
- 如果可能,应避免使用JSP。将它们与嵌入式servlet容器一起使用时,存在几个已知的限制
- 在默认配置下使用这些模板引擎之一时,将从中自动提取模板
src/main/resources/templates
。 - 根据您运行应用程序的方式,IntelliJ IDEA对类路径的排序方式不同。与使用Maven或Gradle或从打包的jar运行应用程序时,从IDE的主要方法运行应用程序的顺序会有所不同。这可能会导致Spring Boot无法在类路径上找到模板。如果遇到此问题,可以在IDE中重新排序类路径,以首先放置模块的类和资源。或者,您可以配置模板前缀来搜索
templates
类路径上的每个目录,如下所示:classpath*:/templates/
(2)模板引擎思想 腾讯云原文
因为Spring Boot其实是对Spring生态的封装整合打包,以简化开发中使用Spring框架。所以 Spring Boot在集成模板引擎过程中,其实就是对传统SpringMVC集成对应模板引擎的打包自动化配置。
“视图(View)”负责前端页面的展示。后端的数据对象怎样流转到前端,以及前后端数据的交互是怎样的呢? 这些都是由模板引擎来“牵线搭桥”的。
Spring Web MVC是一种基于Java实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行解耦,基于请求-响应模型帮助我们简化日常web系统的开发。
Spring Web MVC框架就是一种MVC框架。采用“约定优于配置”的契约式编程方式。主要有下面几大功能模块:
- 前端控制器是DispatcherServlet主要用于控制流程;
- 应用控制器为处理器映射器(Handler Mapping)进行处理器管理
- 视图解析器(View Resolver)进行视图的解析;
- 页面的url映射以及跳转控制由页面控制器(Controller)/动作跳转处理器(Action)来完成;
- 本地化解析、文件上传等模块;
- 数据校验、格式化和数据绑定模块
下面我们主要讲的是跟视图解析器(View Resolver)相关的模板引擎。
模板引擎是为了使用户界面与业务数据分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档。
在MVC模式中,模板引擎的工作原理基本一样,比如说以freemarker为例,如下图:
- 可概括为一个公式:
模板 + 数据模型 = 输出
在Java Web开发领域,常用的模板引擎有jsp, velocity, freemarker, thymeleaf等。Spring Boot对这些模板引擎都支持集成。对spring-boot-starter-velocity的更新只维护到了1.4.6.RELEASE版本。
任何一个模板引擎(jsp,velocity,thymeleaf,freemarker等),都需要通过数据模型变量以及一些基本语法来实现数据到前端模板的输出。后端与前端隔离,其实并没有完全隔离,只是抽象分层了,把数据逻辑归后端Model,展现的逻辑归视图View,中间通过数据对象来作数据的传输通信。Model数据在视图View的解析展现,这个工作就是模板引擎来完成的。
二、引入模板引擎 thymeleaf github_thymeleaf_version
- Spring Boot 推荐使用Thymeleaf : 语法更简单,功能更强大。 版本参照
<properties>
<java.version>1.8</java.version>
<thymeleaf.version>3.0.11.RELEASE</thymeleaf.version>
<!-- 布局功能的支持程序 thymeleaf3主程序 layout2以上版本 -->
<!-- thymeleaf2 layout1-->
<!--https://github.com/ultraq/thymeleaf-layout-dialect/releases-->
<thymeleaf-layout-dialect.version>2.4.1</thymeleaf-layout-dialect.version>
</properties>
<!--引入Thymeleaf 模板引擎-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
(1) Thymeleaf 源码
@ConfigurationProperties(prefix = "spring.thymeleaf")
public class ThymeleafProperties {
private static final Charset DEFAULT_ENCODING;
public static final String DEFAULT_PREFIX = "classpath:/templates/";
public static final String DEFAULT_SUFFIX = ".html";
private boolean checkTemplate = true;
private boolean checkTemplateLocation = true;
private String prefix = "classpath:/templates/";
private String suffix = ".html";
private String mode = "HTML";
private Charset encoding;
- 只要我们把HTML页面放在classpath:/templates/,thymeleaf就能自动渲染;
(2)使用方法:
注意:thymeleaf使用自动使用缓存的,故在开发阶段需要禁缓存,在application.yml的配置如下
spring
thymeleaf:
cache: false
- 导入thymeleaf的名称空间
<html lang="en" xmlns:th="http://www.thymeleaf.org">
2. 使用thymeleaf语法;
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>成功!</h1>
<!--th:text 将div里面的文本内容设置为 -->
<div th:text="${hello}">这是显示欢迎信息</div>
</body>
</html>