SpringBoot整合SpringMVC(上)

SpringBoot对静态资源的映射规则

先做 2 个核心铺垫(消除源码和专业术语的困惑)

  1. 核心配置类的作用WebMvcAutoConfiguration是 SpringBoot 的web 场景自动配置类 ,静态资源的映射规则就是这个类里的addResourceHandlers方法定的,我们不用改这个类,只需要按它定的规则来就行;ResourceProperties是管静态资源的小配置(比如缓存、自定义路径),后续想改默认规则时会用到。
  2. classpath 是什么? 不用纠结专业定义,对 SpringBoot(Maven/Gradle)项目来说,classpath:/ 就等价于项目里的 src/main/resources/ 文件夹 ,后续所有说classpath:的路径,你直接往这个文件夹里放文件就行。

映射规则的本质就是 「你在浏览器输什么 URL」→「SpringBoot 去项目的哪个位置找文件」,总共 4 条,按「使用频率」排序。

所有规则都有一个前提:创建 SpringBoot 项目时,必须选中「Spring Web」模块(静态资源映射属于 web 场景,没选的话规则全部失效)。

规则 1:Webjars 规则 ------「以 jar 包方式引入的静态资源」专属访问规则

适用场景 :想引入 jQuery、Vue、Bootstrap 这类前端框架,不想自己下载 js/css 文件,直接用 Maven/Gradle 依赖引入(版本统一管理,适合团队开发)。核心对应关系 :浏览器输入 localhost:8080/webjars/xxx/版本号/资源名 → SpringBoot 去 所有 jar 包的classpath:/META-INF/resources/webjars/ 里找资源。关键webjars是一个专门的网站,把所有前端框架打成了 Mavenjar 包,地址:webjars.org,你只需要复制对应依赖到项目里,不用自己放文件。

规则 2:通用静态资源规则 ------「自己写的 / 下载的静态资源」核心规则(最常用)

适用场景 :自己写的 css、js,下载的图片、视频,自定义的静态页面等,都用这个规则。核心对应关系 :浏览器输入 localhost:8080/任意路径/资源名(即/**) → SpringBoot 按顺序去4 个默认静态文件夹 里找资源,找到就返回,找不到才报 404。4 个默认静态文件夹 (都在src/main/resources/下,随便建一个就行,也可以都建):

复制代码
src/main/resources/META-INF/resources/
src/main/resources/resources/
src/main/resources/static/ 【最推荐用这个,SpringBoot官方默认】
src/main/resources/public/

避坑重点 :访问时不用加文件夹名 !比如把abc.jpg放在static里,直接输localhost:8080/abc.jpg,而不是localhost:8080/static/abc.jpg,SpringBoot 会自动去 4 个文件夹里找。

规则 3:欢迎页规则 ------「项目根路径访问的首页」专属规则

适用场景 :访问项目根路径localhost:8080/时,想自动显示首页(比如官网的首页)。核心对应关系 :浏览器输入 localhost:8080/ → SpringBoot 去4 个默认静态文件夹 里找index.html,找到就显示,找不到报 404。关键 :这个规则是规则 2 的延伸 ,因为/属于/**的范围,SpringBoot 对index.html做了特殊处理,优先匹配。

规则 4:网站小图标(favicon.ico)规则 ------「浏览器标签页的小图标」专属规则

适用场景 :想给项目加一个浏览器标签页的小图标(比如百度的小爪子)。核心对应关系 :浏览器会自动请求 **/favicon.ico(不管你输什么 URL,都会自动找) → SpringBoot 去4 个默认静态文件夹 里找favicon.ico文件,找到就显示,找不到用浏览器默认图标。关键 :文件名必须是favicon.ico,格式也必须是 ico(jpg/png 不行),放在 4 个静态文件夹里即可。

实用扩展:不想用默认规则?自定义静态资源路径(常用需求)

如果觉得 4 个默认文件夹不好用,想把静态资源放在自己命名的文件夹里(比如src/main/resources/my-static/),只需要在配置文件里加一行配置,不用改源码,这就是 SpringBoot 的灵活之处。

  1. 打开src/main/resources/application.properties(默认是空的);

  2. 加一行配置,指定自定义的静态资源文件夹:

    自定义静态资源路径,classpath:/my-static/ 就是src/main/resources/my-static/

    spring.web.resources.static-locations=classpath:/my-static/

  3. src/main/resources/my-static/文件夹,放一个custom.jpg图片;

  4. 重启项目,访问http://localhost:8080/custom.jpg,能看到图片就成功。

注意 :自定义路径后,默认的 4 个文件夹会失效(比如 static 里的文件访问不到了),如果想保留默认文件夹 + 加自定义文件夹,用逗号分隔:

复制代码
# 保留默认4个文件夹 + 加自定义my-static
spring.web.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/
相关推荐
码不停蹄的玄黓6 分钟前
SpringBoot 实现拦截器
java·spring boot·后端
狗凯之家源码网10 分钟前
永夜大圣 H5 棋牌大厅源码效果实测与品质解析
java·开发语言
凡人叶枫10 分钟前
Effective C++ 条款13:以对象管理资源(RAII)
java·linux·开发语言·c++·嵌入式开发
小马爱打代码11 分钟前
Java开发:Spring Cloud Alibaba微服务之消息队列(RocketMQ、Kafka、RabbitMQ)
java·java-rocketmq·java-rabbitmq
callJJ13 分钟前
Java 线程池使用指南:基于 Spring Boot 3.x + JDK 17 的入门与实践
java·开发语言·spring boot·线程池·多线程编程
Elias不吃糖16 分钟前
RabbitMQ vs Kafka 简单总结
java·分布式·kafka·rabbitmq
ch.ju16 分钟前
Java Programming Chapter 4——Error in compilation: it cannot be overwritten.
java·开发语言
nice_lcj52023 分钟前
排序(4)-归并排序专题——归并排序的分治美学
java·数据结构·算法·排序算法
我登哥MVP26 分钟前
SpringCloud 核心组件解析:服务调用和负载均衡
java·spring boot·后端·spring·spring cloud·java-ee·负载均衡
插件开发26 分钟前
英伟达cuda程序通用性关键 geforce 20xx代到最新版 在20xx上编译的c++程序可以通用吗?
java·c++·人工智能