SpringBoot静态资源映射配置分析

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

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

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot中,静态资源映射是由Spring Boot默认提供的配置完成的。Spring Boot将所有访问映射到以下目录:classpath:/static、classpath:/public、classpath:/resources和classpath:/META-INF/resources。如果这些目录中有多张同名的图片,访问地址的优先级顺序为:META-INF/resources > resources > static > public。\[2\] 如果我们请求一个以".html"结尾的静态资源,Spring Boot会按照优先级高的文件夹先查找,然后再查找优先级低的文件夹,直到找到指定的静态资源为止。\[3\] 例如,在src/main/resources/static目录下创建了一个hello.html文件,当我们启动Spring Boot并访问"http://localhost:8080/hello.html"时,就会显示该hello.html页面。\[3\] 总结来说,Spring Boot对静态资源映射提供了默认配置,可以直接将静态资源放置在指定的目录中,无需进行额外的配置即可访问这些静态资源。\[1\] #### 引用[.reference_title] - *1* *3* [Spring Boot静态资源映射](https://blog.csdn.net/weixin_64842782/article/details/125089662)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [springboot静态资源映射](https://blog.csdn.net/ChOLg/article/details/102800978)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值