Spring Boot 是框架的框架,所以底层仍然使用的是 SpringMVC 的基本功能,Spring Boot 对 SpringMVC 做了很多的自动配置
在官网中都有描述,下面为大家基本翻译一下,我们来看看都有哪些东西
SpringMVC 自动化配置都有:
内容协商视图解析器和 BeanName 视图解析器
静态资源(包括 webjars)
自动注册(Converter、GenericConverter、Formatter)
支持 HttpMessageConverters(后来我们配置内容协商理解原理)
自动注册 MessageCodeResolver(国际化用)
静态 index.html 页支持
自动使用 ConfigurableWebBindingInitializer 数据绑定器(DataBinder 负责将请求数据绑定到 JavaBean 上)
等等一些功能
如果你想定制化一些自己的配置,官方文档也有说明,具体我们应该怎么做
Web 场景 - 静态资源规则与定制化
用 Spring Initializr 创建 Spring Boot 项目 boot-05-web-01
勾选依赖,包括 web 依赖
新建配置文件 application.yml
我们将图片,视频, js , css 等文件放在 /static , /public or /resource 或者 META-INF/resources 这些
文件夹下,接下来我们访问项目的根路径就可以访问到这些静态资源,我们来看官网中的介绍
这些静态资源的直接访问路径是 Spring Boot 用了 ResourceHttpRequestHandler 处理的
我们来创建这些目录来进行测试( static 已经有了,不用创建)
在这四个文件夹中放入静态资源
这样我们直接启动项目,来测试这些静态图片能不能直接访问
01.jpg,可以直接被访问到
02.jpg 也可以被访问到
03.jpg 也可以被访问到
04.jpg 也可以被访问到
Spring Boot 静态资源目录:
类路径下:/static ,/public or /resource 或者 META-INF/resources
只要资源在静态资源目录下,我们可以在浏览器直接用 根路径 + 静态资源名,直接访问到静态资源
我们再来编写一个控制类cn.xs.boot.controller.HelloController
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
/**
* 访问 01.jpg 路径
*
* @return
*/
@RequestMapping("/01.jpg")
public String hello() {
return "aaa";
}
}
此时刚好我们的一个接口动态请求是 /01.jpg ,而我们有一个静态资源路径也是 01.jpg 运行项目来进行 访问
原理:静态映射 /**
请求进来,先去找 controller 看能不能处理,不能处理的所有请求全部交给静态资源处理器来进行处
理,静态资源处理器就会去静态资源的那几个目录找,如果静态资源也找不到这个请求,那么页面就会
404
静态资源访问前缀
我们的静态资源默认是无前缀的,如果我们想要给静态资源访问加上前缀,可以通过配置文件进行配置
根据官网介绍,我们可以在配置文件中配置 static-path-pattern 属性即可,这个属性的默认值为 /** ,
就是静态资源映射路径
在 application.yml 中进行配置
# 设置静态资源访问前缀
spring:
mvc:
static-path-pattern: /res/**
重启项目进行测试
在页面访问原先静态资源路径
已经找不到了
通过新的配置前缀,来访问静态资源路径就可以访问到
改变默认静态资源路径( /static 、 /public 等)
想要改变默认的静态资源路径,只需要编写配置即可
在项目根路径下新建 hereshui 文件夹
其他文件夹下的静态资源已经访问不到了
只有我们配置的文件夹下的图片可以被访问
我们可以点进去 static-locations 属性看看
可以看到源码中,在这里规定了静态资源的默认路径,如果我们不配置修改路径,这些就是默认的静态
资源路径
例外我们的 js , css 静态资源我们也可以使用 webjars 方式来引入
一般我们引入静态资源都是 js 文件或者 css 文件直接放到静态资源目录中,或者也可以引入依赖来进行环境的搭建,这里我们就简单了解,实际使用并不多