关注我的新人大礼包,30G Java架构资料,免费领取​zhuanlan.zhihu.com

做web开发的时候,我们往往会有很多静态资源,如html、图片、css等。那如何向前端返回静态资源呢?以前做过web开发的同学应该知道,我们以前创建的web工程下面会有一个webapp的目录,我们只要把静态资源放在该目录下就可以直接访问。但是,基于Spring boot的工程并没有这个目录,那我们应该怎么处理?

一、最笨的方式

我们首先来分享一种最笨的办法,就是将静态资源通过流直接返回给前端,我们在maven工程的resources的根目录下建立一个html的目录,然后我们把html文件放在该目录下,并且规定任何访问路径以/static/开头的即访问该目录下的静态资源,其实现如下:

@Controller
public class StaticResourceController {@RequestMapping("/static/**")public void getHtml(HttpServletRequest request, HttpServletResponse response) {String uri = request.getRequestURI();String[] arr = uri.split("static/");String resourceName = "index.html";if (arr.length > 1) {resourceName = arr[1];}String url = StaticResourceController.class.getResource("/").getPath() +"html/" + resourceName;try {FileReader reader = new FileReader(new File(url));BufferedReader br = new BufferedReader(reader);StringBuilder sb = new StringBuilder();String line = br.readLine();while (line != null) {sb.append(line);line = br.readLine();}response.getOutputStream().write(sb.toString().getBytes());response.flushBuffer();} catch (IOException e) {e.printStackTrace();}}}

其实现过程很简单,就是先从路径中分离出来资源uri,然后从static目录下读取文件,并输出到前端。因为只做简单演示,所以这里只处理了文本类型的文件,图片文件可以做类似的处理。当然,我们在实际中肯定不会这么做,Spring Boot 也肯定有更好的解决办法。不过这个办法虽然有点笨,但确是最本质的东西,无论框架如何方便的帮我们处理了这类问题,但是抛开框架,我们依然要能够熟练的写出一个web项目,只有知道其实现原理,你才会在遇到问题时能得心应手。现在我们再来看看Spring boot对静态资源的支持。

二、Spring boot默认静态资源访问方式

Spring boot默认对/**的访问可以直接访问四个目录下的文件:

  • classpath:/public/
  • classpath:/resources/
  • classpath:/static/
  • classpath:/META-INFO/resouces/

我们现在就在资源文件resources目录下建立如下四个目录:

注意蓝色条下的资源文件夹resources与类路径下的文件夹classpath:/resources是不同的,蓝色条下的resources代表的是该目录下的文件为资源文件,在打包的时候会将该目录下的文件全部打包的类路径下,这个名称是可以改的,在pom.xml指定资源目录即可:

<resources><resource><directory>src/main/resources</directory></resource>
</resources>

而类路径下的resources是spring boot默认的静态资源文件夹之一,和public、static以及MEAT-INFO/resources的功能相同。现在我们重启Spring boot就可以通过:

  • http://localhost:8080/1.html
  • http://localhost:8080/2.html
  • http://localhost:8080/3.html
  • http://localhost:8080/4.html

四个URL访问到四个目录下的静态资源了。

三、自定义静态资源目录

通过第二节内容我们已经知道了Spring boot默认可以访问的静态资源的目录,但是大家肯定会想,这个目录是固定的吗?我们可不可以自己定义静态资源目录?答案是肯定的,我们现在就来自定义一个静态资源目录,我们定义一个images的目录来存放图片,所有/image/**的路径都会访问images目录下的资源:

@Configuration
public class ImageMvcConfig extends WebMvcConfigurerAdapter {@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/image/**").addResourceLocations("classpath:/images/");}
}

这段代码应该比较简单,@Configuration 标识一个配置类,这个在前面的文章中提到过多次。WebMvcConfigurerAdapter是Spring提供的一个配置mvc的适配器,里面有很多配置的方法,addResourceHandlers就是专门处理静态资源的方法,其他方法后续我们还会讲到。现在我们在验证上面的配置是否有效。我在images目录下放了一张spring.jpg的图片,现在我们通过http://localhost:8080/image/spring.jpg来访问图片:

其实除了上面的办法还有一种更简单的办法,就是直接在application.yml中配置即可:

spring:mvc:static-path-pattern: /image/**resources:static-locations: classpath:/images/

static-path-pattern:访问模式,默认为/**,多个可以逗号分隔static-locations:资源目录,多个目录逗号分隔,默认资源目录为classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/注意,这个配置会覆盖Spring boot默认的静态资源目录,例如如果按示例中配置,则无法再访问static、public、resources等目录下的资源了。

四、总结

本文主要给大家分享了Spring boot 对静态资源的处理方式,Spring boot 默认可以访问

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

四个目录下的静态资源,我们也可以根据自己的需要进行个性化配置。最后,需要说明一点的是,如果这四个目录中存在相同名称的资源,那会优先返回哪个目录下的资源呢?大家通过static-locations的默认值顺序应该能猜到,默认情况下,Spring boot会优先返回/META-INF/resources下的资源。当然,因为我们可以自定义static-locations的值,所以这个优先顺序也是可以调整的。

springboot 返回图片流_Spring Boot 的静态资源处理相关推荐

  1. springboot static访问不到_Spring Boot 的静态资源处理

    黑客技术点击右侧关注,了解黑客的世界! Java开发进阶点击右侧关注,掌握进阶之路! Python开发点击右侧关注,探讨技术话题! 作者 | liuxiaopeng 来源 | cnblogs.com/ ...

  2. python的flask前端显示图片_python Flask中返回图片流给前端展示

    python Flask中返回图片流给前端展示 image DHogan 2017-05-16 14:50:48 image 20440 image 收藏 12 版权 场景需求:需要在Flask服务器 ...

  3. python的flask前端显示图片_python 实现Flask中返回图片流给前端展示

    场景需求:需要在Flask服务器的本地找一张图片返回给前端展示出来. 问题疑点:通常前端的标签只会接受url的形式来展示图片,没试过在返回服务器本地的一张图片给前端. 因此写个记录一下这个看起来有点奇 ...

  4. vue中后端返回图片流,前端渲染方法

    vue中后端返回图片流,前端渲染方法 前端登录经常用到图形验证码,后端接口返回的是图片数据流,如下图返回图片流这样 效果图如下: 首先封装接口api和uuid[就是一个随机数,防止重复] //获取图形 ...

  5. SpringBoot学习笔记(3):静态资源处理

    SpringBoot学习笔记(3):静态资源处理 在web开发中,静态资源的访问是必不可少的,如:Html.图片.js.css 等资源的访问. Spring Boot 对静态资源访问提供了很好的支持, ...

  6. Spring Boot 的静态资源处理

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | liuxiaopeng 来源 | cnblog ...

  7. 第六篇:Spring Boot 访问静态资源

    Spring Boot的默认静态资源的路径为: spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/ ...

  8. Spring boot 默认静态资源路径与手动配置访问路径的方法

    这篇文章主要介绍了Spring boot 默认静态资源路径与手动配置访问路径的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在application.propertis中配置 ##端口号 s ...

  9. Springboot配置通过URL访问图片(静态资源)

    一.确保为web项目,创建WebConfig 实现WebMvcConfigurer (推荐)或 继承WebMvcConfigurationSupport 说明: SpringBoot2.0 配置Web ...

最新文章

  1. 深入分析Linux内核源码oss.org.cn/kernel-book/
  2. NodeJS”热部署“代码,实现动态调试
  3. sid更新 续订sas软件_顶级统计软件sas9.4 64位sid 有效期至2017年6月底
  4. Oracle数据库导入导出 imp/exp备份还原
  5. Android中Dialog对话框
  6. 谷歌地图的级别与对应比例尺及分辨率探究
  7. 使用jquery生成随机二维码的方法
  8. 西雅图又一家科技公司准备上市!
  9. DevOps之自动化测试
  10. java 函数式接口与Lambda表达式
  11. Xshell 6 的使用
  12. 拼多多的店铺怎样引流和出价-纽黑文教学
  13. Redis热搜关键词加载,建议收藏
  14. 目标跟踪算法的分类(三)
  15. win10 当前壁纸缓存位置
  16. Leakcanary的使用
  17. MySQL 两张表取差集
  18. 如何利用 Selenium 对已打开的浏览器进行爬虫!
  19. Cs231n笔记--图像分割和目标检测
  20. 标准型和科学型计算机,科学计算器软件

热门文章

  1. Passbook Test
  2. 毕业旅行 - 7天7晚云南游
  3. Ubuntu安装待办事项工具gnome-todo
  4. 怎么爬before after之间的内容_可见性有序性,Happens-before来搞定
  5. VC2019 VC2022添加导入Word Excel AutoCAD Surfer等类型库(typelibaray)的方法
  6. PPT视频自动播放?
  7. 荣耀手环6和华为手环b6区别 哪个好
  8. Vysor Android投屏到PC端的工具
  9. 密码锁 java接口_指纹门锁的USB接口怎么用 USB应急充电接口使用方法
  10. iPhone与iWatch连接、控制、数据传递(Swift)