一、默認靜態資源映射
1. 在 Spring Boot 中,默認情況下,一共有5個位置可以放靜態資源,Spring Boot 默認將 /** 所有訪問映射到以下目錄,五個路徑分別是如下5個:
classpath:/META-INF/resources/
classpath:/resources/
classpath:/static/
classpath:/public/
"/" : 靜態資源存放在當前項目的根路徑下,放在這個根路徑下也是可以訪問的
如:
(1).在src/main/resources/目錄下創建
static文件夾 ,存放圖片a.jpg
(2).在src/main/resources/目錄下創建
resources文件夾 ,存放圖片b.jpg
(3).在src/main/resources/目錄下創建
public文件夾 ,存放圖片c.jpg
(4).在src/main/resources/目錄下創建
META-INF/resources文件夾
上面這幾個都是靜態資源的映射路徑,優先級順序為:META-INF/resources > resources > static > public > /
2.配置application.yml的端口
# 開發環境配置
server:
# 服務器的HTTP端口,默認為8080
port: 8787
3.瀏覽器分別訪問:
http://localhost:8787/a.jpg
http://localhost:8787/b.jpg
http://localhost:8787/c.jpg
均能正常訪問相應的圖片資源。那么說明,Spring Boot 默認會挨個從 public、 resources 、static目錄里面找是否存在相應的資源,如果有則直接返回。
二、自定義靜態資源映射配置
在實際開發中,可能需要自定義靜態資源訪問路徑,那么可以繼承WebMvcConfigurerAdapter(在SpringBoot2.0及Spring 5.0 WebMvcConfigurerAdapter已被廢棄)來實現。
第一種方式:繼承WebMvcConfigurerAdapter 類實現靜態資源配置
package com.sam.demo.conf;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
/**
* 配置靜態資源映射
* @author cao
* @since 2019/01/23
*/
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//將所有/static/** 訪問都映射到classpath:/static/ 目錄下
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
}
}
重啟項目,訪問:http://localhost:8787/static/c.jpg 能正常訪問static目錄下的c.jpg圖片資源。
第二種方式:在application.properties配置文件中配置
在application.properties中添加配置:
spring.mvc.static-path-pattern=/static/**
重啟項目,訪問:http://localhost:8787/static/c.jpg 同樣能正常訪問static目錄下的c.jpg圖片資源。
注意:通過spring.mvc.static-path-pattern這種方式配置,會使Spring Boot的默認配置失效,也就是說,/public /resources 等默認配置不能使用。
配置中配置了靜態模式為/static/,就只能通過/static/來訪問。
三、自定義外部靜態資源映射,訪問本地磁盤圖片
方式一: application.yml文件中配置
本地磁盤圖片:
訪問:http://127.0.0.1:8787/images/護眼模式_20190123110237.jpg
注意: 如果yml中配置了項目訪問前綴 context-path,請注意訪問路徑加上,別漏掉了!
方式二: 在代碼上配置, 繼承WebMvcConfigurerAdapter 類,但是在SpringBoot2.0及Spring 5.0 WebMvcConfigurerAdapter已被廢棄,目前找到解決方案就有兩種,請往下看:
以下是WebMvcConfigurerAdapter 比較常用的重寫接口
/** 解決跨域問題 **/
public void addCorsMappings(CorsRegistry registry) ;
/** 添加攔截器 **/
void addInterceptors(InterceptorRegistry registry);
/** 這里配置視圖解析器 **/
void configureViewResolvers(ViewResolverRegistry registry);
/** 配置內容裁決的一些選項 **/
void configureContentNegotiation(ContentNegotiationConfigurer configurer);
/** 視圖跳轉控制器 **/
void addViewControllers(ViewControllerRegistry registry);
/** 靜態資源處理 **/
void addResourceHandlers(ResourceHandlerRegistry registry);
/** 默認靜態資源處理器 **/
void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer);
重寫WebMvcConfigurerAdapter類
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
/**
* <pre>
* @Description:配置靜態資源映射
* @Aouth: cao_wencao
* @Date: 2019-01-23 16:11
* </pre>
*/
@Configuration
public class WebMvcConfiguration extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//addResourceHandler是指你想在url請求的路徑
//addResourceLocations是圖片存放的真實路徑
registry.addResourceHandler("/images/**").addResourceLocations("file:D://Images//壁紙/");
super.addResourceHandlers(registry);
}
}
方式三:替代WebMvcConfigurerAdapter 已過時的解決方案,新的版本解決方案目前有兩種
方案1 :直接實現WebMvcConfigurer(官方推薦使用這個)
package com.thinkingcao.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* <pre>
* @Description:
* @Aouth: cao_wencao
* @Date: 2019-01-23 17:28
* </pre>
*/
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/images/**").addResourceLocations("file:D://Images//壁紙/");
}
}
方案2 :直接繼承WebMvcConfigurationSupport
package com.thinkingcao.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
/**
* <pre>
* @Description:
* @Aouth: cao_wencao
* @Date: 2019-01-23 17:39
* </pre>
*/
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/images/**").addResourceLocations("file:D://Images//壁紙/");
}
}
————————————————
版權聲明:本文為CSDN博主「Thinkingcao」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/Thinkingcao/java/article/details/86613066