Spring Boot 是框架的框架,所以底层仍然使用的是 SpringMVC 的基本功能,Spring Boot 对 SpringMVC 做了很多的自动配置

springBoot项目只能有一个yml文件吗_静态资源

在官网中都有描述,下面为大家基本翻译一下,我们来看看都有哪些东西

SpringMVC 自动化配置都有:

内容协商视图解析器和 BeanName 视图解析器

静态资源(包括 webjars)

自动注册(Converter、GenericConverter、Formatter)

支持 HttpMessageConverters(后来我们配置内容协商理解原理)

自动注册 MessageCodeResolver(国际化用)

静态 index.html 页支持

自动使用 ConfigurableWebBindingInitializer 数据绑定器(DataBinder 负责将请求数据绑定到 JavaBean 上)

等等一些功能

如果你想定制化一些自己的配置,官方文档也有说明,具体我们应该怎么做 


Web 场景 - 静态资源规则与定制化



用 Spring Initializr 创建 Spring Boot 项目 boot-05-web-01





springBoot项目只能有一个yml文件吗_spring boot_02


勾选依赖,包括 web 依赖


新建配置文件 application.yml



我们将图片,视频, js , css 等文件放在 /static , /public or /resource 或者 META-INF/resources 这些


文件夹下,接下来我们访问项目的根路径就可以访问到这些静态资源,我们来看官网中的介绍


springBoot项目只能有一个yml文件吗_spring boot_03

 这些静态资源的直接访问路径是 Spring Boot 用了 ResourceHttpRequestHandler 处理的


我们来创建这些目录来进行测试( static 已经有了,不用创建)


springBoot项目只能有一个yml文件吗_前端_04

在这四个文件夹中放入静态资源

springBoot项目只能有一个yml文件吗_spring boot_05

这样我们直接启动项目,来测试这些静态图片能不能直接访问

springBoot项目只能有一个yml文件吗_前端_06

 01.jpg,可以直接被访问到

springBoot项目只能有一个yml文件吗_spring boot_07

02.jpg 也可以被访问到

 

springBoot项目只能有一个yml文件吗_spring boot_08

03.jpg 也可以被访问到

springBoot项目只能有一个yml文件吗_静态资源_09

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 运行项目来进行 访问


springBoot项目只能有一个yml文件吗_前端_10


原理:静态映射 /**


请求进来,先去找 controller 看能不能处理,不能处理的所有请求全部交给静态资源处理器来进行处


理,静态资源处理器就会去静态资源的那几个目录找,如果静态资源也找不到这个请求,那么页面就会


404


静态资源访问前缀


我们的静态资源默认是无前缀的,如果我们想要给静态资源访问加上前缀,可以通过配置文件进行配置

 

springBoot项目只能有一个yml文件吗_java_11


根据官网介绍,我们可以在配置文件中配置 static-path-pattern 属性即可,这个属性的默认值为 /** ,


就是静态资源映射路径


在 application.yml 中进行配置


# 设置静态资源访问前缀
    spring:
  mvc:
    static-path-pattern: /res/**


重启项目进行测试


在页面访问原先静态资源路径



已经找不到了



通过新的配置前缀,来访问静态资源路径就可以访问到


改变默认静态资源路径( /static /public 等)


想要改变默认的静态资源路径,只需要编写配置即可


在项目根路径下新建 hereshui 文件夹


springBoot项目只能有一个yml文件吗_静态资源_12


其他文件夹下的静态资源已经访问不到了


只有我们配置的文件夹下的图片可以被访问


我们可以点进去 static-locations 属性看看


springBoot项目只能有一个yml文件吗_css_13

 可以看到源码中,在这里规定了静态资源的默认路径,如果我们不配置修改路径,这些就是默认的静态

资源路径


例外我们的 js , css 静态资源我们也可以使用 webjars 方式来引入


springBoot项目只能有一个yml文件吗_css_14


一般我们引入静态资源都是 js 文件或者 css 文件直接放到静态资源目录中,或者也可以引入依赖来进行环境的搭建,这里我们就简单了解,实际使用并不多