当前位置: 首页 > news >正文

38、springboot为 spring mvc 提供的静态资源管理,覆盖和添加静态资源目录

springboot为 spring mvc 提供的静态资源管理

★ Spring Boot为Spring MVC提供了默认的静态资源管理:

▲ 默认的四个静态资源目录:

/META-INF/resources > /resources > /static > /public

▲ ResourceProperties.java类的源代码,可看到CLASSPATH_RESOURCE_LOCATIONS常量的定义:

CLASSPATH_RESOURCE_LOCATIONS = new String[]{“classpath:/META-INF/resources/”, “classpath:/resources/”, “classpath:/static/”, “classpath:/public/”};

这意味着为应用添加静态资源(图片、JS、css)时,只要将这些资源添加到四个目录其中之一即可。

【结论:】通常来说,只要将静态资源添加到resources/public或resources/static目录即可。
甚至也可以是resources/resources(或resources/META-INF/resources),其中前一个resources/只是代表类加载路径。

【注意:】如果非要将静态资源放在resources目录下,请一定要在项目的resources目录下
新建resources目录或META-INF/resources才行。

代码演示:
在这里插入图片描述
不清楚为什么static包下面的图片没法加载出来
在这里插入图片描述

★ 定制默认的静态资源目录

▲ 覆盖原有的静态资源目录:

- 通过spring.web.resources.static-locations配置属性设置静态资源存储位置,但这种方式会覆盖Spring Boot默认的静态资源存储路径。- 也可通过spring.mvc.static-path-pattern配置属性设置静态资源的映射路径(默认值是/**),但这种方式会覆盖Spring Boot默认的静态资源映射路径。若将该属性值设为/abc/**,那意味着所有静态资源路径的前面都要添上/abc/前缀由于spring.mvc.static-path-pattern属性的默认值是/**,因此意味着无论将静态资源放在类经加载路径下的/static、/resources, /public,/MEAT-INF/resources目录下,实际在页面中访问这些静态资源时,都只需从根路径下访问即可

代码演示:
1、自己添加一个mypicture文件夹作为静态资源目录,然后在yml配置文件中进行配置,
2、yml:指定 mypicture 文件夹为静态资源的目录,然后映射路径为 /ljh/** ,表示要想访问mypicture 这个静态资源目录里面的资源,那么访问的路径就得加上 /ljh/ 这个路径

如图:其他的public 文件夹的图片都不显示了,因为通过spring.web.resources.static-locations配置属性设置静态资源存储位置,这种方式会覆盖Spring Boot默认的静态资源存储路径
通过spring.mvc.static-path-pattern配置属性设置静态资源的映射路径(默认值是/**),这种方式会覆盖Spring Boot默认的静态资源映射路径。
在这里插入图片描述

▲ 添加静态资源目录:

 若要添加额外的静态资源路径,可实现WebMvcConfigurer接口,并通过该接口的如下方法:@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry){registry.addResourceHandler("/xx/**")                         // ① 指定静态资源的映射目录.addResourceLocations("classpath:/xxx/")        // ②   指定添加额外静态资源目录。}

代码演示:
不覆盖原本的静态资源路径,新增就行

弄一个配置类,额外添加静态资源目录
在这里插入图片描述

在这里插入图片描述

无论是系统默认的静态资源目录,还是自己添加的静态资源目录,都能显示图片,这次的自定义的静态资源目录,不是覆盖项目默认的,而是添加进去的并存的。

这个系统默认的static静态资源目录没有加载出图片,不理解。
在这里插入图片描述

默认的静态资源目录下的映射路径是直接映射到根路径的。
在这里插入图片描述

http://www.lryc.cn/news/141145.html

相关文章:

  • Go 输出函数
  • L1-037 A除以B(Python实现) 测试点全过
  • 睿思BI旗舰版V5.3正式发布
  • 基于Jenkins自动化部署PHP环境---基于rsync部署
  • 学信息系统项目管理师第4版系列02_法律法规
  • 【大数据】Doris:基于 MPP 架构的高性能实时分析型数据库
  • 【rust/egui】(五)看看template的app.rs:SidePanel、CentralPanel以及heading
  • MTK6833_MT6833核心板_天玑700安卓5G核心板规格性能介绍
  • Maven-Java代码格式化插件spring-javaformat
  • 设计模式之八:模板方法模式
  • hive可以删除单条数据吗
  • python3-Flask实现Api接口
  • 微分享 - 超实用开发日常排查问题Linux运维命令
  • Pico如何使用C/C++选择哪个I2C控制器,以及SDA和SCL针脚
  • 求生之路2私人服务器开服搭建教程centos
  • Redis7之介绍(一)
  • 基于Python+djangoAI 农作物病虫害预警系统智能识别系统设计与实现(源码&教程)
  • Kotlin Flow 转换以及上下游处理
  • 深度学习3. 强化学习-Reinforcement learning | RL
  • TCP/IP网络江湖武艺传承:物理层与通信江湖的幕后
  • 智慧能源管理系统助力某制造企业提高能源利用效率
  • opencv/C++ 人脸检测
  • UE4/5的Custom节点:在VScode使用HLSL(新手入门用)
  • 小研究 - J2EE 应用服务器的软件老化测试研究
  • Tomcat和Servlet基础知识的讲解(JavaEE初阶系列16)
  • 开源在大数据和分析中的角色
  • C#,《小白学程序》第四课:数学计算
  • SparkML机器学习
  • vue Promise 对象 等待所有异步处理完成 再继续处理
  • 【业务功能篇84】微服务SpringCloud-ElasticSearch-Kibanan-电商实例应用