SpringBoot默认不支持jsp页面
支持模板引擎 例如Velocity Freemarker Thymeleaf等
模板引擎就是将数据填充到模板中 最终生成一个页面
不同模板引擎之间的语法不相同
SpringBoot推荐Thymeleaf 语法更简单 且功能更强大
Thymeleaf是一款用于渲染XML/XHTML/HTML5内容的模板引擎
类似JSP Velocity FreeMaker等 它也可以轻易与Spring MVC等Web框架进行集成
作为Web应用的模板引擎 与其它模板引擎相比 Thymeleaf最大的特点是能够直接在浏览器中打开并正确显示模板页面而不需要启动整个Web应用
首先 当然是引入Thymeleaf的启动器(本文是在SpringBoot基础上整合Thymeleaf的 若单独使用Thymeleaf 请自行去maven仓库寻找依赖
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-thymeleafartifactId>
dependency>
SpringBoot自动管理的Thymeleaf版本过低 需自己改版本 加在
标签内:
<thymeleaf.version>3.0.11.RELEASEthymeleaf.version>
<thymeleaf-layout-dialect.version>2.2.2thymeleaf-layout-dialect.version>
thymeleaf3的主程序适配的是layout2以上版本
thymeleaf2的主程序适配的是layout1以上版本
在Thymeleaf属性类里 是这样的:
@ConfigurationProperties(prefix = "spring.thymeleaf")
public class ThymeleafProperties {
private static final Charset DEFAULT_ENCODING = Charset.forName("UTF-8");
private static final MimeType DEFAULT_CONTENT_TYPE = MimeType.valueOf("text/html");
public static final String DEFAULT_PREFIX = "classpath:/templates/";
public static final String DEFAULT_SUFFIX = ".html";
}
我们可以看见 视图解析的默认前缀是:classpath:/templates/
视图解析的默认后缀是:.html
即 将html后缀的页面文件放在templates/下 Thymeleaf即可自动渲染
例:
@RequestMapping("/success")
public String goSuccess()
{
return "success";
// classpath:/templates/success.html
}
首先 需在html中导入Thymeleaf的命名空间:
<html lang="en" xmlns:th="http://www.thymeleaf.org">
导入命名空间的目的是为了有语法提示
例:
@RequestMapping("/success")
public String goSuccess(Map<String,Object> map)
{
map.put("msg","哈哈");
return "success";
// 访问classpath:/templates/success.html
}
<div th:text="${msg}">欢迎信息div>
th:text可将div中的文本内容设置为指定的值
若不经过模板引擎访问该页面 则显示预先设定好的信息
若经过模板引擎访问该页面 则显示获取到的信息
<h4 th:text="${user}" th:each="user:${users}">h4>
1、用于获取对象的属性 还能进行方法调用
2、还能使用内置基本对象(使用方式:${#xxxx}):
#ctx 当前上下文对象
#var 当前上下文中的变量值
#locale 区域信息
#request 内置对象
#response 内置对象
#session 内置对象
#servletContext 内置对象
3、还能使用内置的工具对象:
#uris
#conversions
#dates.
#calendars
#numbers
#strings
#objects
#bools
#arrays
#lists
#sets
#maps
#aggregates
#ids
和${}
在功能上是一样的
只是${}
的另一种写法
配合th:object来使用
*{属性名}相当于取每个指定对象中的属性
th:href="@{http://www.XXX.com}"
可替换href="xxx.html"
且th:href="@{http://www.XXX.com/name(id=${p.id})}"
即等于http://www.XXX.com/name?id=${p.id}
@{/aaa/bbb}即代表当前项目 无须写主机名和端口名
[[]]
就是 th:text
[()]
就是 th:utext
例:
<h1>
<span th:each="user:${users}">[[${user}]]span>
h1>