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项目,只好将图片存在磁盘的某个路径下 再做资源文件映射了

   注:以上仅为本人的经验和理解,如有错误之处希望谅解,并随时欢迎各路大神指教