目录
开始之前
在开始之前,先创建项目spring-boot-web
添加Spring Web和Thymeleaf依赖
勾选那两项是为了在Maven中引入以下两个依赖:
创建好后的项目目录如下(框起来的部分可以删除):
一 静态内容
1.1 静态资源的查找路径
默认情况下,Spring Boot从类路径中名为/static、/public、/resources或/META-INF/resources的目录下查找静态内容。
在resources下创建这三个目录:static、public、resources,并在static目录下创建hello.html文件,文件写入以下内容:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>静态资源文件</title>
</head>
<body>
<h2>这是static目录下的静态资源文件</h2>
</body>
</html>
启动/重启项目,访问一下http://localhost:8080/hello.html
将hello.html文件移动到public或resources目录后,重启项目,再访问一下:
1.2 修改资源文件映射路径
默认情况下,资源映射到/**(即在浏览器中通过http://localhost:8080/xxx即可访问到xxx资源文件),也可以使用spring.mvc.static-path-pattern属性对其进行调整。例如,将所有资源重新映射到/resources/**可以通过以下方式实现:
spring.mvc.static-path-pattern=/resources/**
重启项目,再访问一下,发现已经访问不到了:
在url上加上/resources/后再试一下‘
1.2 欢迎页面
Spring Boot支持静态和模板欢迎页面。它首先在静态资源文件的查找目录中查找index.html文件,如果未找到,则寻找index模板文件。如果找到任何一个,它将自动作为web应用的欢迎界面(即在浏览器中通过http://localhost:8080直接访问到的页面)。
创建index.html文件,并将其放入任一静态资源文件路径下,写入以下内容:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
<h1>这是首页</h1>
</body>
</html>
重启项目,在浏览器访问一下(注意:如果修改了资源文件映射路径的话,将访问不到)
1.3 自定义图标
Spring Boot支持自定义图标,在这里提供两种方式:
方法一:
Spring Boot将在静态资源文件目录查找favicon.ico文件,如果找到了,将以此作为web应用的图标(需要清除浏览器缓存才能看得到)。
方法二:
1.配置spring.mvc.favicon.enabled属性为false
2.在index.html中添加以下代码
<link rel="icon" type="image/x-icon" href="/images/favicon.ico">
方法二有点投机取巧的意思。在访问首页时,浏览器缓存了web应用的图标,而后只要不清除缓存,浏览器显示的就是首页设定的图标。
二 模板引擎
2.1 Spring Boot支持的模板引擎
Spring MVC支持提供动态HTML内容。Spring MVC支持各种模板技术,包括Thymeleaf,FreeMarker和JSP。
SpringBoot对以下模板引擎做了自动配置的支持:
- FreeMarker
- Groovy
- Thymeleaf
- Mustache
SpringBoot官方不推荐使用JSP。将JSP与嵌入式Servlet一起使用时,将存在一些局限,具体可参考官方文档
在默认情况下,使用这些模板引擎之一时,Spring Boot将从resources/templates目录下提取模板引擎。
2.2 使用Thymeleaf模板引擎
2.2.1 引入Thymeleaf
-
确保pom.xml文件中有添加依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
-
在使用Thymeleaf的html页面上声明名称空间
<html xmlns:th="http://www.thymeleaf.org">
-
Thymeleaf不支持像访问静态资源那样直接被访问。为了看到效果,编写Controller调用我们的Thymeleaf测试文件。
package com.yky.springboot.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controller public class ThymeleafTestController { @GetMapping(value = "/thymeleaf") public String callMyThymeleaf() { return "ThymeleafTest"; } }
ThymeleafTest放到了templates/ThymeleafTest.html路径下。
2.3 Thymeleaf标准表达式语法
2.3.1 message表达式
格式: #{…}
message表达式用于从资源文件中读取内容,并显示在页面上。message表达式的主要用途是用于显示国际化信息,这部分知识将会在本篇文章后面讲解。
<!DOCTYPE html>
<html lang="en">
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>标题</title>
</head>
<body>
<p th:text="#{home.welcome}"></p>
</body>
</html>
在配置文件中有配置home.welcome的值:
效果:
message表达式还支持传入参数:
<p th:text="#{home.welcome('爱学习的少年')}"></p>
配置文件内容:
home.welcome=你好,{0},欢迎
在message表达式传的第一个参数将替代{0},传递的第二个参数将替代{1},以此类推。。。。
2.3.2 变量表达式
格式:${}
变量表达式主要有以下功能:
- 获取变量值
如:${today} - 获取对象属性,调用对象方法,支持OGNL表达式
如:${employee.name} - 使用内置对象
如:${#locale.country}
[1]获取变量:
@Controller
public class ThymeleafTestController
{
@GetMapping(value = "/thymeleaf")
public String callMyThymeleaf(Map