欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

springboot访问静态资源

程序员文章站 2022-07-10 17:38:07
...

springboot访问静态资源

在springboot中访问静态资源、如有js、css、图片、html、这些文件该放哪里???

我们可以自己想一下、猜一下应该放在哪里?看一些目录结构

springboot访问静态资源

我自己应该会猜想、应该大概是这里、但事实的确是这里、

有一种webjars的方式来引入jq文件、但是这种方式一点麻烦、他要引入jquery的坐标、简单来说就是将jq文件包装了一下、

<!-- https://mvnrepository.com/artifact/org.webjars/jquery -->
<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>jquery</artifactId>
    <version>3.4.1</version>
</dependency>

springboot访问静态资源

这个是pom坐标对应的jq文件

我们如和访问这种jq文件呢?

在springboot中的配置静态资源配置类中帮我们写了三种方式。

WebMvcAutoConfiguration.java

springboot访问静态资源

第一种:

在yml中配置自定义的静态资源的访问路径 (可以不用自定义的、用springboot默认的就够了)

第二种:

webjars的方式、在你引入pom坐标时、"/webjars/**" 就等于 "classpath:/META-INF/resources/webjars/" 这个位置、此时我们访问 :http://localhost:8080/webjars/jquery/3.4.1/jquery.js 这个位置jq文件就可以被找出来
springboot访问静态资源

第三种:

spring的默认的匹配静态资源的位置

可以来看下源码

springboot访问静态资源

1、staticPathPattern:变量值的来源说明

String staticPathPattern = this.mvcProperties.getStaticPathPattern();
这里调用了mvcProperties的一个静态方法、静态方法里面返回的是一个字符串----> "/**"

**此时可以得出 staticPathPattern = **"/**"

2、this.resourceProperties.getStaticLocations() :值的来源说明

this.resourceProperties.getStaticLocations()
在源码中可以看到、它调用了resourceProperties里面的静态方法getStaticLocations()
getStaticLocations() 点进这个方法可以可以看到他设置了自己的默认属性、

getStaticLocations()中的默认属性

private static final String[] CLASSPATH_RESOURCE_LOCATIONS = { "classpath:/META-INF/resources/","classpath:/resources/", "classpath:/static/", "classpath:/public/" };

**此时可以得出 getStaticLocations()方法中设置的属性有 **:

"classpath:/META-INF/resources/"

"classpath:/resources/"

"classpath:/static/"

"classpath:/public/"

这四个是一个路径地址、别写入到getResourceLocations()方法中并选出优先级最高的那一个资源路径设置在getResourceLocations()

这个是springboot默认的访问路径 我从源码中给他赋上了底层对应的值

在被红色框 框中的地方我们可以先进行赋值看看、

String staticPathPattern = this.mvcProperties.getStaticPathPattern();
if (!registry.hasMappingForPattern("/**")) {
 customizeResourceHandlerRegistration(registry.addResourceHandler("/**")
.addResourceLocations(getResourceLocations(
 "classpath:/META-INF/resources/","classpath:/resources/", "classpath:/static/", "classpath:/public/"
))
.setCachePeriod(getSeconds(cachePeriod)).setCacheControl(cacheControl));
}

匹配webjars的静态资源路径图片、

springboot访问静态资源

webjars的和springboot默认的静态资源路径对比他们的方式是一样的

webjars: 的访问路径:http://localhost:8080/webjars/jquery/3.4.1/jquery.js 这个是找到webjars的jar包的文件、

springboot默认的 : 访问路径是: http://localhost:8080/a.js : 为什么他访问不需要根目录、因为在addResourceHandler("/**")这个方法里面设置的/**/**是当前项目 目录下、然后去找到getResourceLocations("classpath:/resources/") 方法中设置的路径、 classpath:/resources/:这个路径是resources文件目录下的文件目录。因此就可以 省略前面的路径。直接访问资源文件名称。

静态资源目录。

springboot访问静态资源

假设我们有一个同样的文件、此时就有一个优先级的问题、先访问那个资源呢??

如:从高到低

META-INF/resources > resources > static > public

总结: 第一种自定义静态资源路径、基本不用、第二种webjars的方式也不经常用、我们用springboot默认的在resources文件目录下放置静态资源。