0%

spring | 静态资源

这里说一下 spring boot 静态资源的存放。

环境

  • spring boot
    • 2.7.5

自动配置

里面有一句

1
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration

进入后,有一个方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public void addResourceHandlers(ResourceHandlerRegistry registry) {
if (!this.resourceProperties.isAddMappings()) {
logger.debug("Default resource handling disabled");
} else {
this.addResourceHandler(registry, "/webjars/**", "classpath:/META-INF/resources/webjars/");
this.addResourceHandler(registry, this.mvcProperties.getStaticPathPattern(), (registration) -> {
registration.addResourceLocations(this.resourceProperties.getStaticLocations());
if (this.servletContext != null) {
ServletContextResource resource = new ServletContextResource(this.servletContext, "/");
registration.addResourceLocations(new Resource[]{resource});
}

});
}
}

第 2 行判断是否自己自定义了静态文件路径。

1
this.addResourceHandler(registry, "/webjars/**", "classpath:/META-INF/resources/webjars/");

这个是使用 webjar 的方式导入,使用场景非常少,这里不再解释。

1
this.addResourceHandler(registry, this.mvcProperties.getStaticPathPattern(), (registration

其中 this.resourceProperties.getStaticLocations() 表示 new String[]{"classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/"};

我们一般使用

  • classpath:/resources/
  • classpath:/static/
  • classpath:/public/

其中优先级

resources > static > public
请我喝杯咖啡吧~