SpringBoot对静态资源的映射规则
之前的web应用都是有一个web 或者webapp等一些目录来存放css,js等这些文件。但是这些在springboot中是不一样的。
那么怎么引入静态资源?
接着往下
WebMvcAuotConfiguration.class文件代码部分
WebMvcAuotConfiguration:
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
if (!this.resourceProperties.isAddMappings()) {
logger.debug("Default resource handling disabled");
return;
}
Integer cachePeriod = this.resourceProperties.getCachePeriod();
if (!registry.hasMappingForPattern("/webjars/**")) {
customizeResourceHandlerRegistration(
registry.addResourceHandler("/webjars/**")
.addResourceLocations(
"classpath:/META-INF/resources/webjars/")
.setCachePeriod(cachePeriod));
}
String staticPathPattern = this.mvcProperties.getStaticPathPattern();
//静态资源文件夹映射
if (!registry.hasMappingForPattern(staticPathPattern)) {
customizeResourceHandlerRegistration(
registry.addResourceHandler(staticPathPattern)
.addResourceLocations(
this.resourceProperties.getStaticLocations())
.setCachePeriod(cachePeriod));
}
}
解释下/webjars/**
-
所有 /webjars/** ,都去 classpath:/META-INF/resources/webjars/ 找资源;
-
webjars:以jar包的方式引入静态资源;
我们可以引入maven依赖 在http://www.webjars.org/上面找相应的依赖就可以
引入jquery-webjar的maven依赖
注意下面的图片中jquery3.3.1的路径。正好对应classpath:/META-INF/resources/webjars/。
也就是,如果我们访问http://localhost:8080/webjars/jquery/3.3.1/jquery.js 就可以访问到我们的静态资源了。
<!--引入jquery-webjar-->在访问的时候只需要写webjars下面资源的名称即可
<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
<version>3.3.1</version>
</dependency>
那么咱么自己编写css,js还有图片放哪呢?
往下看:
设置和静态资源有关的参数,缓存时间等
@ConfigurationProperties(prefix = "spring.resources", ignoreUnknownFields = false)
public class ResourceProperties implements ResourceLoaderAware {
//可以设置和静态资源有关的参数,缓存时间等
WebMvcAuotConfiguration.class文件部分代码,简单了解
//静态资源文件夹映射
if (!registry.hasMappingForPattern(staticPathPattern)) {
customizeResourceHandlerRegistration(
registry.addResourceHandler(staticPathPattern)
.addResourceLocations(
this.resourceProperties.getStaticLocations())
.setCachePeriod(cachePeriod));
}
"/**"
访问当前项目的任何资源,都去(静态资源的文件夹)找映射
静态资源问价夹有如下:
"classpath:/META-INF/resources/",
"classpath:/resources/",
"classpath:/static/",
"classpath:/public/"
"/":当前项目的根路径
localhost:8080/abc === 去静态资源文件夹里面找abc
所以我们可以直接在resources文件夹下创建/META-INF/resources/,/resources,这几个目录。
举个例子:
我们要访问META-INF/resources下面的jquery.js文件。
输入
http://localhost:8080/jquery.js
结果
访问resources/resources/js/jquery.js文件,同样获取到了
配置欢迎页,首页
重要的放在前面,index放在静态资源文件夹中,都可以被默认地址访问到,http: //localhost:8080
输入http://localhost:8080/一般都会404
一般情况下:
欢迎页,静态资源文件夹下的所有index.html页面,被 "/**"映射
我们在public文件夹下编写一个index.html文件。
输入 localhost:8080/ 找index页面
配置图标
所有的 **/favicon.ico 都是在静态资源文件下找;
这都是图标
//配置喜欢的图标
@Configuration
@ConditionalOnProperty(value = "spring.mvc.favicon.enabled", matchIfMissing = true)
public static class FaviconConfiguration {
private final ResourceProperties resourceProperties;
public FaviconConfiguration(ResourceProperties resourceProperties) {
this.resourceProperties = resourceProperties;
}
@Bean
public SimpleUrlHandlerMapping faviconHandlerMapping() {
SimpleUrlHandlerMapping mapping = new SimpleUrlHandlerMapping();
mapping.setOrder(Ordered.HIGHEST_PRECEDENCE + 1);
//所有 **/favicon.ico
mapping.setUrlMap(Collections.singletonMap("**/favicon.ico",
faviconRequestHandler()));
return mapping;
}
@Bean
public ResourceHttpRequestHandler faviconRequestHandler() {
ResourceHttpRequestHandler requestHandler = new ResourceHttpRequestHandler();
requestHandler
.setLocations(this.resourceProperties.getFaviconLocations());
return requestHandler;
}
}
定义自己的静态资源文件夹路径
我们只能覆盖原来配置的路径
在配置文件中添加代码
spring.resources.static-locations=classpath:/hello,classpath:/world
此时我们的静态资源文件夹只有hello和world两个,之前的默认的public,static等等都不能用了。
所以一般我们不去配置这个玩意。