素材巴巴 > 程序开发 >

SpringBoot访问静态资源出现404

程序开发 2023-09-07 17:39:25

其实SpringBoot默认会自动去以下位置寻找静态资源 :

但是我们上传的图片通常不会放置在项目里面的,因为要打jar,所以图片一般放置在磁盘指定位置,因此需要告诉SpringBoot ,一般需要做如下配置

一、继承WebMvcConfigurerAdapter [已经过时]

产生诸多情况无法访问,配置麻烦,spring2.0以后不再建议使用

二、继承WebMvcConfigurationSupport [可使用]

@Configuration
 public class CorsConfig extends WebMvcConfigurationSupport {/*** 添加静态资源文件,外部可以直接访问地址** @param registry*/@Overrideprotected void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("profile/**").addResourceLocations("file:D:/upload/");super.addResourceHandlers(registry);}
 }

缺点: 覆盖默认行为,造成static下的默认文件无法访问,还需添加以下代码

 registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");

三、实现WebMvcConfigurer[官方推荐]

@Configurable
 public class WebMvcConfig implements WebMvcConfigurer {
 @Override
 public void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("profile/**").addResourceLocations("file:D:/upload/");}
 }

测试结果如下:

总结:

也就是说如果不覆盖默认配置SpringBoot可以很好的工作,所以再次强调推荐使用实现WebMvcConfigurer的方式

后续:

classpath 顾名思义,就是指 .class 文件所在的路径。.class 文件由 .java 文件编译后产生,我们用 java 命令执行.class 文件时,需要指定 jvm 去哪搜索目标 class 文件,总不能全盘扫描对吧,而指定去哪搜索就是 classpath 的含义,即: classpath是JVM用到的一个环境变量,它用来指示JVM如何搜索class

jar包还可以包含一个特殊的/META-INF/MANIFEST.MF文件,MANIFEST.MF是纯文本,可以指定Main-Class和其它信息。JVM会自动读取这个MANIFEST.MF文件,如果存在Main-Class,我们就不必在命令行指定启动的类名,而是用更方便的命令:java -jar hello.jar


标签:

上一篇: 若依项目-调接口报错401、403 下一篇:
素材巴巴 Copyright © 2013-2021 http://www.sucaibaba.com/. Some Rights Reserved. 备案号:备案中。