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已被废弃)来实现。
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中添加配置:
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/来访问。
本地磁盘图片:
访问:http://127.0.0.1:8787/images/护眼模式_20190123110237.jpg
方式二: 在代码上配置, 继承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;
/**
*
* @Description:配置静态资源映射
* @Aouth: cao_wencao
* @Date: 2019-01-23 16:11
*
*/
@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;
/**
*
* @Description:
* @Aouth: cao_wencao
* @Date: 2019-01-23 17:28
*
*/
@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;
/**
*
* @Description:
* @Aouth: cao_wencao
* @Date: 2019-01-23 17:39
*
*/
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/images/**").addResourceLocations("file:D://Images//壁纸/");
}
}