實(shí)際開(kāi)發(fā)靜態(tài)資源 html期升、js婚惫、圖片 肯定是放在各自文件夾下面的
參考鏈接
一、淺析 static-locations贰逾、static-path-pattern
- spring.mvc.static-path-pattern
從 WebMvcAutoConfiguration -> WebMvcAutoConfigurationAdapter -> WebMvcProperties 中可以看出默認(rèn)是 /** 替劈,根據(jù)官網(wǎng)的描述和實(shí)際效果靠欢,可以理解為靜態(tài)文件URL匹配頭舵匾,也就是靜態(tài)文件的URL地址開(kāi)頭。
private String staticPathPattern = "/**";
- spring.web.resources.static-locations
從 WebMvcAutoConfiguration -> WebMvcAutoConfigurationAdapter -> WebProperties -> Resources 中可以看出默認(rèn)是 "classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/"诡曙,根據(jù)官網(wǎng)的描述和實(shí)際效果,可以理解為實(shí)際靜態(tài)文件地址略水,也就是靜態(tài)文件URL后价卤,匹配的實(shí)際靜態(tài)文件。
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = new String[]{"classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/"};
private String[] staticLocations;
private boolean addMappings;
private boolean customized;
private final WebProperties.Resources.Chain chain;
private final WebProperties.Resources.Cache cache;
public Resources() {
this.staticLocations = CLASSPATH_RESOURCE_LOCATIONS;
this.addMappings = true;
this.customized = false;
this.chain = new WebProperties.Resources.Chain();
this.cache = new WebProperties.Resources.Cache();
}
public String[] getStaticLocations() {
return this.staticLocations;
}
public void setStaticLocations(String[] staticLocations) {
this.staticLocations = this.appendSlashIfNecessary(staticLocations);
this.customized = true;
}
二聚请、 項(xiàng)目根目錄下新建靜態(tài)文件夾
- SystemData/UserData/Avatar/p1.png
1、 application.properties
- 分別設(shè)置 spring.mvc.static-path-pattern spring.web.resources.static-locations
- 請(qǐng)注意static-locations中的file:SystemData就是映射本地文件
spring.mvc.static-path-pattern=/SystemData/**
spring.web.resources.static-locations=classpath:/static,classpath:/public,classpath:/resources,classpath:/META-INF/resources,file:SystemData
2稳其、效果展示
三驶赏、static 文件下 繼續(xù)分文件
- 1、默認(rèn) 2.js 是可以訪問(wèn)的
http://localhost:8080/2.js
- 2既鞠、但是 1.js 1.png 1.html 都是無(wú)法直接訪問(wèn)的煤傍,需要寫完整路徑。
無(wú)法訪問(wèn):
http://localhost:8080/1.js
http://localhost:8080/1.png
http://localhost:8080/1.html
可以訪問(wèn):
http://localhost:8080/JS/1.js
http://localhost:8080/Image/1.png
http://localhost:8080/JS/1.html
3嘱蛋、 1.js 1.png 1.html 和 2.js 一樣直接訪問(wèn)
設(shè)置 spring.web.resources.static-locations
- classpath:/static/JS
- classpath:/static/Image
- classpath:/static/HTML
spring.web.resources.static-locations=classpath:/static,classpath:/public,classpath:/resources,classpath:/META-INF/resources,classpath:/static/JS,classpath:/static/Image,classpath:/static/HTML
3.1 蚯姆、http://localhost:8080/1.js 、http://localhost:8080/1.png洒敏、http://localhost:8080/1.html 可以直接訪問(wèn)了
四龄恋、需要設(shè)置多個(gè)地址為靜態(tài)資源目錄
這樣的配置,可以說(shuō)最簡(jiǎn)單且粗暴凶伙,但是靈活性差一點(diǎn)點(diǎn):
URL響應(yīng)地址只能為一項(xiàng)郭毕,也就是spring.mvc.static-path-pattern配置只能寫一項(xiàng)。
這意味著函荣,按我上文設(shè)置了/SystemData/為URL匹配显押,就不能設(shè)置第二個(gè)/resources/這樣的配置為第二靜態(tài)目錄。
寫一個(gè)配置類傻挂,實(shí)現(xiàn)靜態(tài)資源的文件夾方法很多乘碑。比如:
繼承于WebMvcConfigurationSupport父類,并實(shí)現(xiàn)addResourceHandlers方法金拒。
引用WebMvcConfigurer接口兽肤,并實(shí)現(xiàn)addInterceptors方法
1、實(shí)現(xiàn)一個(gè)一個(gè)配置類绪抛,并繼承WebMvcConfigurationSupport轿衔,實(shí)現(xiàn)addResourceHandlers方法,并打上@Configuration注解睦疫,使其成為配置類:
package com.example.springboot02staticconfig03.Config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
@Configuration
public class WebConfig extends WebMvcConfigurationSupport {
// System.getProperty("user.dir") 當(dāng)前程序所在目錄
static final String IMG_PATH = System.getProperty("user.dir")+"/SystemData/";
static final String IMG_PATH_TWO = System.getProperty("user.dir")+"/Test/";
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
// 靜態(tài)資源映射
registry.addResourceHandler("/SystemData/**").addResourceLocations("file:"+IMG_PATH);
registry.addResourceHandler("/Test/**").addResourceLocations("file:"+IMG_PATH_TWO);
super.addResourceHandlers(registry);
}
}
2害驹、實(shí)現(xiàn)效果
現(xiàn)在我們就來(lái)配置。 最終效果很簡(jiǎn)單蛤育,我想要的效果(兩組同時(shí)):
瀏覽器輸入:http://localhost:8080/SystemData/UserData/Avatar/1.png
可以直接訪問(wèn)項(xiàng)目文件下的:/SystemData/UserData/Avatar/1.png宛官,
瀏覽器輸入:http://localhost:8080/Test/UserData/Avatar/2.png
可以直接訪問(wèn)項(xiàng)目文件下的:/Test/UserData/Avatar/2.png葫松,