SpringBoot静态资源处理
在SpringMVC中,web项目添加了Web的项目结构支持,只需要将静态资源放入Web文件夹下面即可访问,而在springboot中并没有Web项目目录的概念。
该去哪放置我们的静态资源?自己自定义怎么定义?
SpringBoot对静态资源处理的文件夹放置在WebMvcAutoConfiguration这个文件中,分析源码走一波。
而在WebMvcAutoConfiguration中配置了整个SpringMVC视图管理规则,我们找到专门用于静态资源管理的方法addResourceHandlers。
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
super.addResourceHandlers(registry);
if (!this.resourceProperties.isAddMappings()) {
logger.debug("Default resource handling disabled");
return;
}
addResourceHandler(registry, "/webjars/**", "classpath:/META-INF/resources/webjars/"); //第一种规则,webjars
addResourceHandler(registry, this.mvcProperties.getStaticPathPattern(),
this.resourceProperties.getStaticLocations()); //第二种格式
}
第一种形式:webjars形式
WebJars是将客户端(浏览器)资源(javascript,Css等)打成jar包文件,以对资源进行统一依赖管理。
使用方法:
既然是一种功能插件,那么必定要导入依赖。而webjars好像并不支持自定一方式来使用,而是和其他的一些组件整合在一起使用,打包一些通用资源为主方便访问,以jquery为例来进行尝试一下。
-
导入依赖
<!-- https://mvnrepository.com/artifact/org.webjars/jquery --> <dependency> <groupId>org.webjars</groupId> <artifactId>jquery</artifactId> <version>3.4.1</version> </dependency>
-
查看jar包路径下的资源
-
进行访问
localhost:8080/webjars/jquery/3.4.1/jquery.js
localhost:8080/webjars重定向到resources/webjars/目录下,然后搜索文件路径名即可。
第二种方式
第一种形式是设置一些公共资源的文件路径,而我们自定义的资源则可以使用第二种方式来进行。
源码分析
addResourceHandler(registry, this.mvcProperties.getStaticPathPattern(),
this.resourceProperties.getStaticLocations());
this.mvcProperties.getStaticPathPattern():监视路径进行重定向
可以查看一下监视的是哪些路径
private String staticPathPattern = "/**";
/下所有的路径都匹配到
this.resourceProperties.getStaticLocations():重定向之后的位置
可以查看下重定向在哪个文件夹。
public class ResourceProperties {
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = { "classpath:/META-INF/resources/",
"classpath:/resources/", "classpath:/static/", "classpath:/public/" };
一路点下去,发现会去这四个文件夹下进行搜索匹配
使用
- 在根目录resources下创建这四个文件夹
-
放入我们自定义的资源.js .css等。
-
直接访问localhost:8080/myjs.js
有四个路径都可以获取,而其他路径无法获取
指定获取目录
-
这是一个配置文件,绑定了前缀,说明可以手动的去配置它。
spring: resources: static-locations: classpath:/coding/,classpath:/lyj/
这样的话我们定制的目录也可以被访问。但是默认的将失效!!!