目录
一、源码解析
二、自定义静态资源读取路径
三、WebJars引入静态资源
四、首页定制
注:本章使用的SpringBoot版本为3.3.4,老版本在配置属性和底层源码细节上会有所调整。
一、源码解析
SpringBoot使用Spring MVC内置的资源处理器来导入静态资源,如CSS、JavaScript和图片等。以下是静态资源处理器底层源码:
通过这张源码图我们可以得知,SpringBoot会先读取配置文件确认是否读取开启的自定义的静态资源读取路径(默认开启),如果没有则去读取WebJars形式的静态资源,最后再通过/**映射到的四个静态资源路径去读取资源。
SpringBoot会自动将/**
的路径映射到以下路径读取静态资源内容:
-
classpath:/static/
-
classpath:/public/
-
classpath:/resources/
-
classpath:/META-INF/resources/
下图代码所示我们访问一个js脚本静态资源,SpringBoot会从static下读取到该资源。
文件路径读取优先级:resources > static > public
二、自定义静态资源读取路径
SpringBoot同时支持自定义静态资源的位置,默认为开启状态。我们可以通过配置application.properties(yml)来实现自定义资源路径,配置的属性为 spring.web.resource.static-locations,老版本通常为
spring.resources.static-locations
具体可以查看您当前SpringBoot版本的源码,搜索WebMvcAutoConfiguration类,进入WebProperties类,查看内部的具体属性staticLocations的层级关系来确认:
spring:web:resources:static-locations: classpath:/wangzhexiao/
上述的自定义配置将会告诉Spring Boot在classpath:/wangzhexiao/
目录下查找各类静态资源。
注意,配置静态资源位置时,不应该包含/**
后缀,因为Spring Boot会自动为你添加这个后缀。
访问资源时,SpringBoot会将根/定向到我们自定义的资源路径classpath:/wangzhexiao/
三、WebJars引入静态资源
此外,Spring Boot还提供了WebJars的支持,允许你通过WebJars的形式来引入前端资源。例如,你可以通过添加以下依赖在项目中使用jQuery:
<dependency><groupId>org.webjars</groupId><artifactId>jquery</artifactId><version>3.6.0</version></dependency>
引入WebJars后,你可以通过/webjars/**
的路径来访问这些资源。
四、首页定制
通过阅读源码可知,SpringBoot对于index.html的读取与其他静态资源类似,默认从classpath的四个路径下读取:
因此我们可以尝试在static目录下创建index.html,启动服务后即可成功访问: