SpringMVC和SpringBoot静态资源映射
静态资源映射:当我们想访问项目目录下的某个文件或者图片的时候 ,如果直接在浏览器输入URL,那么控制器会把它当成动态请求而去访问后台请求路径,所以我们需要进行通过框架配置静态资源映射。
SpirngMVC:
1. 在springmvc.xml中配置:
<mvc:resources location="/img/" mapping="/images/**"/>
<mvc:resources location="/WEB-INF/jsp/js/" mapping="/js/**"/>
location:本地文件路径 mapping:请求路径
意思即为 通过http://localhost:port/xxx/imags/***都会去访问/img/下的文件
例如:http://localhost:port/项目名/imags/2018/12/10/111.jpg 访问的是 项目/img/2018/12/10/111.jpg (类似与Nginx反向代理的URL匹配机制)
2.继承 WebMvcConfigurerAdapter 类 重写 addResourceHandlers 方法 (SpringBoot1.x也可以使用)
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter{
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/templates/**").addResourceLocations("file:D:/File/templates/");
super.addResourceHandlers(registry);
}
}
如果映射项目文件路径 写法为 classpath:文件路径,映射外部文件路径 写法为 file:文件路径
SpirngBoot 2.X:
1.实现 WebMvcConfigurer 接口 重写 addResourceHandlers 方法
@Configuration
public class CustomerMvcConfigurerAdapter implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/templates/**").addResourceLocations("file:D:/File/templates/");
}
}
大致意思与SpringMVC类似,但是由于SpringBoot是用内置的Tomcat运行项目 所以 它可以配置虚拟访问路径,即将服务器任意文件夹作为静态资源映射,如上就是,将D盘下File文件夹的文件当成静态资源,以 /templates/ 的路径方式访问。如果想配置当前项目的静态资源,将addResourceLocations()改为addResourceLocations("classpath:/templates/")即可,
2.yaml配置(SpringBoot 2.X)
spring:
profiles: dev
resources :
static-locations: file:D:/,classpath:/resources/,classpath:/static/,classpath:/public/
mvc :
static-path-pattern : /**
此方法配置 不够灵活,无法一对一配置请求路径和映射路径,如过通过代码配置 添加多个registry.addResourceHandler方法即可
3.yml配置(SpringBoot 1.x)
spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,/classpath:/static/,classpath:/public/,file:D:/File/templaters/
spring.mvc.static-path-pattern=/**
注:如果手动配置静态资源映射 SpringBoot默认静态资源映射路径将会失效
SpringBoot支持默认静态资源映射(不需要配置),路径分别为
• classpath:/resources/
• classpath:/static/
• classpath:/public/
• classpath:/META-INF/resources/
在项目中resource资源包下创建如上文件夹即可以访问文件
本人之所以配置虚拟路径方式进行静态资源映射,是因为我在本地项目做springboot上传文件时,将文件传到resource下的某个文件夹内,但是部署到线上需要将项目打为jar包,然后上传图片就找不到jar包里的内部文件路径(虽然解压缩是能看到各个文件夹的。。。),但是war包是可以的哈,本人做的是jar项目,只好将图片存在磁盘的某个路径下 再做资源文件映射了