springframework.boot:spring-boot-autoconfigure下的 web模块,先来看ResourceProperties
再来看 web模块下的WebMvcAutoConfiguration
由上图464-468行可知
1)、所有 /webjars/** ,都去 classpath:/META-INF/resources/webjars/ 找资源;
看470 添加了一个静态路径staticPathPattern
String staticPathPattern = this.mvcProperties.getStaticPathPattern();去mvcProperties看看这个StaticPathPattern
表示任意请求
再看471,472行 如果找不到对应的映射,则
String staticPathPattern = this.mvcProperties.getStaticPathPattern();
if (!registry.hasMappingForPattern(staticPathPattern)) {
this.customizeResourceHandlerRegistration(registry.addResourceHandler(new String[]{staticPathPattern}).addResourceLocations(this.resourceProperties.getStaticLocations()).setCachePeriod(cachePeriod));
}
addResourceLocations(this.resourceProperties.getStaticLocations())跟踪resourceProperties发现
private String[] staticLocations;的值是
static {
RESOURCE_LOCATIONS = new String[CLASSPATH_RESOURCE_LOCATIONS.length + SERVLET_RESOURCE_LOCATIONS.length];
System.arraycopy(SERVLET_RESOURCE_LOCATIONS, 0, RESOURCE_LOCATIONS, 0, SERVLET_RESOURCE_LOCATIONS.length);
System.arraycopy(CLASSPATH_RESOURCE_LOCATIONS, 0, RESOURCE_LOCATIONS, SERVLET_RESOURCE_LOCATIONS.length, CLASSPATH_RESOURCE_LOCATIONS.length);
}
也即
"classpath:/META‐INF/resources/",
"classpath:/resources/",
"classpath:/static/",
"classpath:/public/"
注意:classpath是指src.main.java或者src.main.resouces
2)、"/**" 访问当前项目的任何资源,都去(静态资源的文件夹)找映射,以上四个都是静态资源的文件夹
localhost:8080/abc === 去静态资源文件夹里面找abc
3)、欢迎页; 静态资源文件夹下的所有index.html页面;被"/**"映射;
localhost:8080/ 找index页面
4)、所有的 **/favicon.ico 都是在静态资源文件下找;
如果在使用springboot时,想要改变默认的这几个文件夹路径,只需在application.properties中更改即可:
spring.resources.staticLocations=classpath:/hello/,classpath:/world/
(多个文件夹的时候用逗号隔开即可,因为)staticLocations本身定义的就是一个数组
PS:
WebJars是一个很神奇的东西,可以让大家以jar包的形式来使用前端的各种框架、组件。
什么是WebJars
什么是WebJars?WebJars是将客户端(浏览器)资源(JavaScript,Css等)打成jar包文件,以对资源进行统一依赖管理。WebJars的jar包部署在Maven中央仓库上。