Loading

九、Spring Boot 静态资源访问配置

使用场景:有一些文件需要让用户直接访问的静态资源,例如导入excel的模板或者小的图标

当我们使用 SpringMVC 框架时,静态资源会被拦截,需要添加额外配置,springboot是帮我们处理了,默认配置了五个地址,将文件放在这个五个地址下,可以直接访问,那么优先级按照列出的顺序:

五个路径分别是如下5个:

  • classpath:/META-INF/resources/
  • classpath:/resources/
  • classpath:/static/
  • classpath:/public/
  • /

前四个目录好理解,分别对应了resources目录下不同的目录,系统默认创建了 classpath:/static/
第五个"/":使用JSP的时候有一个webapp目录,使用springboot默认是没有,但是可以手动新建一个,这第五个目录指的就是webapp目录下

使用

常用的地址是classpath:/static/,将文件放在改目录下时,访问的地址为 http://localhost:8080/1.png,地址中并不包含static
因为springboot的配置(在springMVC中也有这样的配置 <mvc:resources mapping="/**" location="/static/"/>):
查看源码,WebMvcAutoConfiguration 类中看到了 SpringMVC 自动化配置的相关的内容,找到了静态资源拦截的配置,如下:

this.mvcProperties.getStaticPathPattern() 方法对应的值是 “/**”,this.resourceProperties.getStaticLocations()方法返回了四个位置,分别是:”classpath:/META-INF/resources/”, “classpath:/resources/”,”classpath:/static/”, “classpath:/public/”,然后在getResourceLocations方法中,又添加了“/”,因此这里返回值一共有5个。其中,/表示webapp目录,即webapp中的静态文件也可以直接访问。静态资源的匹配路径按照定义路径优先级依次降低。因此这里的配置和我们前面提到的如出一辙。这样大伙就知道了为什么Spring Boot 中支持5个静态资源位置,同时也明白了为什么静态资源请求路径中不需要/static,因为在路径映射中已经自动的添加上了/static了。

自定义配置

方式一:application.properties

# 定义资源位置,该配置表示可以将静态资源放在 resources目录下的任意地方
spring.resources.static-locations=classpath:/  
# 定义请求 URL 规则
spring.mvc.static-path-pattern=/**

Java 代码定义

@Configuration
public class WebMVCConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**").addResourceLocations("classpath:/aaa/");
    }
}
posted @ 2022-09-05 19:17  半瓶牛奶🥛  阅读(90)  评论(0编辑  收藏  举报