spring boot访问静态资源:
1. static目录用来存放js、css、图片等静态资源. . .
2. templates目录用来存放html页面. . .
spring boot默认将/**
静态资源访问映射到以下目录:
- classpath:/static
- classpath:/public
- classpath:/resources
- classpath:/META-INF/resources
这四个目录的访问优先级:META-INF/resources
> resources
> static
> public
- 即这四个目录中存在同样的静态资源时,spring boot会优先访问
META-INF/resources
目录中的静态资源
PS: 在创建META-INF/resources
目录时,需要一层层的创建(即:先创建META-INF
目录,再创建resources
目录),不要META-INF.resources
这样一次性创建。虽然最终显示是一样的,但这样创建默认为是一个META-INF.resources
目录,而不是META-INF/resources
目录
PS: 一般使用spring boot默认为我们创建的static目录来放置css、图片、js等静态资源即可,无需额外创建META-INF/resources、resources目录。
PS: html页面不建议放在static目录下,而是放在templates目录中。
🆗,前面说了,html页面放置在templates目录下,那么我们该怎么访问呢?
是不是像访问static目录下的静态资源一样,直接访问即可,我们来试一下!
显而易见,templates目录下的页面文件是不能直接访问的,需要通过Controller进行访问(好像是websecurity权限控制的原因)。与我们在做ssm项目时候的WEB-INF目录一样,需要通过服务器内部进行访问,即走控制器–服务–视图解析器这个流程。
要访问templates目录下的html页面,还需要引入下面这个模板引擎,然后才能通过Controller来进行访问
<!--访问静态资源-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
🆗,下面我们来进行一下测试
home.html
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<!--引用外部css样式-->
<link rel="stylesheet" href="../css/home.css">
<title></title>
</head>
<body>
<div class="content">
<span>好好学习,天天向上!</span>
<img src="../image/dayan.png" width="10%">
</div>
</body>
</html>
home.css
.content{
color: red;
font-family: 楷体;
font-size: 25px;
}
.content > img{
width: 10%;
}
控制器
package com.cd.o2o2.web.demo;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller /*注意不要用@RestController,因为它返回的是json数据格式,而我们要的是html页面*/
public class HomeController {
@RequestMapping("/home")
public String home(){
return "home";
}
}
效果
引入thymeleaf模板引擎后,成功通过控制器访问到了templates目录下的html静态页面,并且也成功访问到了static目录下的css、图片等静态资源。
总结:
1. 使用spring initializr快速搭建spring boot项目,会自动在main/resources目录下创建static和templates目录。
2. static目录用来放置css、图片、js等静态资源。templates目录用来放置html静态页面。
3. static目录下的静态资源可以直接访问。但templates目录(被websecurity权限控制)下的html静态页面不能直接访问,需要在pom文件中添加thymeleaf模板引擎,然后通过controller控制器来进行访问。
4. 为什么要将html静态页面放置在templates目录?
- templates目录下的html页面不能直接访问,需要通过服务器内部进行访问,可以避免无权限的用户访问到隐私页面,造成信息泄露。
5. 更多thymeleaf模板配置可在yml或properties配置文件中配置。(粒如默认访问路径为classpath:/templates/,你可以改成classpath:/static/,但不建议哈)
spring:
#thymeleaf模板配置
thymeleaf:
cache: false # 这个开发配置为false,避免改了模板还要重启服务器
prefix: classpath:/templates/ #模板文件视图前缀,默认是classpath:/templates/,可不用配置
suffix: .html #模板文件视图后缀,默认是.html,可不用配置
check-template-location: true #检查模板位置,可不用配置
encoding: utf-8 #编码字符集,默认为utf-8,可不用配置
mode: HTML #模板的模式,默认为HTML,可不用配置
servlet:
content-type: text/html #模板的内容类型,默认为text/html,可不用配置