一、Spring boot中对静态资源的映射源码
@ConfigurationProperties(prefix = "spring.resources", ignoreUnknownFields = false)
public class ResourceProperties implements ResourceLoaderAware {
//该类用于设置和静态资源有关的各种参数,如:缓存时间
WebMvcAuotConfiguration:
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
if (!this.resourceProperties.isAddMappings()) {
logger.debug("Default resource handling disabled");
return;
}
Integer cachePeriod = this.resourceProperties.getCachePeriod();
if (!registry.hasMappingForPattern("/webjars/**")) {
customizeResourceHandlerRegistration( registry.addResourceHandler("/webjars/**") .addResourceLocations(
"classpath:/META‐INF/resources/webjars/") .setCachePeriod(cachePeriod));
}
String staticPathPattern = this.mvcProperties.getStaticPathPattern();
//静态资源文件夹映射
if (!registry.hasMappingForPattern(staticPathPattern)) {
customizeResourceHandlerRegistration( registry.addResourceHandler(staticPathPattern) .addResourceLocations(
this.resourceProperties.getStaticLocations()) .setCachePeriod(cachePeriod));
}
}
/*配置欢迎页的映射*/
@Bean
public WelcomePageHandlerMapping welcomePageHandlerMapping(
ResourceProperties resourceProperties) {
return new WelcomePageHandlerMapping(resourceProperties.getWelcomePage(), this.mvcProperties.getStaticPathPattern());
}
/*配置喜欢的图标*/
@Configuration @ConditionalOnProperty(value = "spring.mvc.favicon.enabled", matchIfMissing = true)
public static class FaviconConfiguration {
private final ResourceProperties resourceProperties;
public FaviconConfiguration(ResourceProperties resourceProperties) {
this.resourceProperties = resourceProperties;
}
@Bean
public SimpleUrlHandlerMapping faviconHandlerMapping() {
SimpleUrlHandlerMapping mapping = new SimpleUrlHandlerMapping();
mapping.setOrder(Ordered.HIGHEST_PRECEDENCE + 1);
//所有 **/favicon.ico
mapping.setUrlMap(Collections.singletonMap("**/favicon.ico", faviconRequestHandler()));
return mapping;
}
@Bean
public ResourceHttpRequestHandler faviconRequestHandler() {
ResourceHttpRequestHandler requestHandler = new ResourceHttpRequestHandler(); requestHandler .setLocations(this.resourceProperties.getFaviconLocations());
return requestHandler;
}
}
二、静态资源映射规则
1、所有/webjars/,都去 classpath:/META-INF/resources/webjars/ 目录中找资源
例如:以jar包的方式引入jquery
https://www.webjars.org/
<!‐‐引入jquery‐webjar
在访问的时候只需要写webjars下面资源的名称
‐‐>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
<version>3.3.1</version>
</dependency>
2、"/" 访问当前项目的任何资源,都去静态资源的文件夹中找映射**
"classpath:/META‐INF/resources/",
"classpath:/resources/",
"classpath:/static/",
"classpath:/public/"
"/":表示当前项目的根路径
要访问某个静态资源,就去静态资源文件夹下找。
例如:访问Chart.min.js
http://localhost:8080/asserts/js/Chart.min.js
3、欢迎页:静态资源文件夹下的所有index.html页面。被"/"映射**
4、所有的 /favicon.ico 都是在静态资源文件下找
注意:自定义指定静态资源文件夹的路径
spring.resources.static-locations=classpath:/resources/img
多个路径以逗号(,)分隔。