springboot访问静态资源
springboot访问静态资源
在springboot中访问静态资源、如有js、css、图片、html、这些文件该放哪里???
我们可以自己想一下、猜一下应该放在哪里?看一些目录结构
我自己应该会猜想、应该大概是这里、但事实的确是这里、
有一种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>
这个是pom坐标对应的jq文件
我们如和访问这种jq文件呢?
在springboot中的配置静态资源配置类中帮我们写了三种方式。
WebMvcAutoConfiguration.java
第一种:
在yml中配置自定义的静态资源的访问路径 (可以不用自定义的、用springboot默认的就够了)
第二种:
webjars的方式、在你引入pom坐标时、"/webjars/**"
就等于 "classpath:/META-INF/resources/webjars/"
这个位置、此时我们访问 :http://localhost:8080/webjars/jquery/3.4.1/jquery.js
这个位置jq文件就可以被找出来
第三种:
spring的默认的匹配静态资源的位置
可以来看下源码
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的静态资源路径图片、
在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
文件目录下的文件目录。因此就可以 省略前面的路径。直接访问资源文件名称。
静态资源目录。
假设我们有一个同样的文件、此时就有一个优先级的问题、先访问那个资源呢??
如:从高到低
META-INF/resources > resources > static > public
总结: 第一种自定义静态资源路径、基本不用、第二种webjars的方式也不经常用、我们用springboot默认的在resources文件目录下放置静态资源。
下一篇: netopeer-cli手册翻译
推荐阅读
-
vue填坑之webpack run build 静态资源找不到的解决方法
-
Node4-5静态资源服务器实战以及优化压缩文件实例内容
-
介绍Python的Django框架中的静态资源管理器django-pipeline
-
nginx中使用nginx-http-concat模块合并静态资源文件
-
Nginx实现静态资源的反向代理实例
-
Django静态资源URL STATIC_ROOT的配置方法
-
springboot+nginx+https+linux实现负载均衡加域名访问简单测试
-
SpringBoot静态资源css,js,img配置方案
-
浅谈vue引用静态资源需要注意的事项
-
Java连载43-访问静态方法其他注意事项、static关键字