前言

虽然现在都流行前后端分离部署,但有时候还是需要把前端文件跟后端文件一起打包发布,这就涉及到了springboot的静态资源访问的问题。不单只是静态资源打包,比如使用本地某个目录作为文件存储,也可通过WebMvcConfigurer接口来配置。

在与前端交互的过程中,也会碰到一个跨域的问题。我们也可通过WebMvcConfigurer接口来解决跨域的问题。

springboot默认静态文件目录

Spring Boot 默认为我们提供了静态资源处理,我建议大家直接使用Spring Boot的默认配置即可。默认提供的静态资源映射如下:

  • classpath:/META-INF/resources
  • classpath:/resources
  • classpath:/static
  • classpath:/public

这些目录的静态资源时可以直接访问到的。上面这几个都是静态资源的映射路径,优先级顺序为:META-INF/resources > resources > static > public

使用第一讲中spring initilize工具创建的springboot工程,默认也给我们创建了classpath:/static这个目录

我们往这个目录放一个图片,head.jpg

通过浏览器访问http://localhost:8080/head.jpg

自定义配置静态资源配置

以上这些都是springboot默认给我们提供的,那么我们有没有能力自己自定义一个静态资源映射呢?完全可以。使用WebMvcConfigurer这个类即可实现自定义静态资源配置。

我们新建一个WebConfig类实现WebMvcConfigurer接口 ,如下:

@Configuration
public class WebConfig implements WebMvcConfigurer { }

现在我们什么都不配置,然后重启应用,访问http://localhost:8080/head.jpg。却发现程序报404了:

这是因为我们配置了WebMvcConfigurer,这就替换了springboot原先的默认配置。这里我们想要自定义一个静态资源配置,比如,我们/file/**这样的请求,定向到我的D盘根目录下。我们重写WebMvcConfigurer接口的addResourceHandlers方法。如下:

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/file/**")
.addResourceLocations("file:D:\");
}

然后把head.jpg图片放到D盘下:

这里需要注意的是,配置外部的资源要使用file声明,配置jar包内部的使用classpath声明。

WebMvcConfigurer接口解决跨域问题

可以通过重写WebMvcConfigurer的addCorsMappings方法,可以配置跨域的问题。如下:

/**
* 跨域支持
*/
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowCredentials(true)
.allowedMethods("GET", "POST", "DELETE", "PUT", "PATCH")
.maxAge(3600 * 24);
}

总结

WebMvcConfigurer接口不单只是能够配置静态资源访问和解决跨域问题,它还可以配置很多Web请求相关的东西,比如拦截器,数据转化(MessageConverters)等,碍于篇幅,这里就先不讨论了。可以配置的东西,可以通过接口的方法查看,如下:

SpringBoot 默认帮我们做了很多事情,这大大方便了我们的开发。 但是,有时候我们想要自己定义一些Handler,Interceptor,ViewResolver,MessageConverter,在Spring Boot 2.0之前版本都是靠重写WebMvcConfigurerAdapter的方法来添加自定义拦截器,消息转换器等。SpringBoot 2.0 后,该类被标记为@Deprecated。现在,我们只能靠实现WebMvcConfigurer接口来实现了。

最新文章

  1. Windows中遇到的些问题及解决办法
  2. Edge.js:让.NET和Node.js代码比翼齐飞
  3. LDA( Latent Dirichlet Allocation)主题模型 学习报告
  4. Visual Studio 2015 新建MVC项目 Package Manager Console不能使用 (HRESULT: 0x80131500)
  5. 想要学好JQuery看这里
  6. 自定义控件EditText
  7. 免费的HTML5连载来了《HTML5网页开发实例详解》连载(三)DOCTYPE和字符集
  8. cocos2d-x c++和object-c内存管理比较
  9. 【产品体验】eyepetizer开眼
  10. 查看当前正在被执行的sql
  11. 自动化构建工具gulp
  12. gchart 插件API
  13. Delphi中文本文件的操作
  14. 自己写的select元素可编辑、可筛选JQuery插件 jquery.inputselectbox.js
  15. linux_FTP连接失败
  16. git添加秘钥提示Key is already in use
  17. vue项目两级全选(多级原理也一样),感觉有点意思,随手一记
  18. Hbase-2.0.0_03_Hbase数据模型
  19. jQuery知识总结(转)
  20. 转:Linux环境变量设置方法总结 PATH、LD_LIBRARY_PATH

热门文章

  1. 团队第五次作业:alpha2成绩汇总
  2. node 淘宝镜像
  3. NLP中的预训练语言模型(一)—— ERNIE们和BERT-wwm
  4. MarkDown中如何加入上标和下标
  5. destoon中get_maincat函数的用法
  6. 修改JDK安装路径的作用
  7. Git 游离的HEAD detached HEAD git reflog 查看所有提交的 id
  8. js提取DOM属性和设置DOM属性值
  9. [冬令营day1T3]Tree
  10. 请简述get请求和post请求的区别