SpringBoot —— 静态资源映射规则

本文详细介绍了SpringBoot中静态资源的映射规则,包括默认的静态目录、欢迎页(index.html)的处理以及网站图标(favicon.ico)的映射和变化。内容涉及官方文档描述、源码分析以及各版本差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SpringBoot —— 静态资源映射规则

SpringBoot默认为我们提供了静态资源的处理,其通过**自动配置类WebMvcAutoConfiguration**实现的。此类存放了与web开发相关的各种配置属性和方法。

1 官方文档的描述

官方文档

默认情况下,SpringBoot类路径中的

/static目录(或/public/resources/META-INF/resources)或ServletContext的根目录中提供静态内容。

它使用SpringMVC中的ResourceHttpRequestHandler

以便您可以通过添加自己的WebMvcConfigurer并重写addResourceHandlers方法来修改该行为。

名词解释:

前提,Maven 构建的SpringBoot 工程

  • 静态资源:css、js、img、font等

  • 类路径:项目下的/src/main/java/src/main/resources

UUEMI1.png

2 静态资源映射规则

2.1 对哪些目录映射?

WebMvcAutoConfiguration类自动为我们注册了如下目录为静态资源目录,也就是说直接可访问到资源的目录。

优先级从上到下。

所以,如果static里面有个index.html,public下面也有个index.html,则优先会加载static下面的index.html,因为优先级!

classpath:/META-INF/resources/ 
classpath:/resources/
classpath:/static/ 
classpath:/public/
/:当前项目的根路径

2.2 目录映射 的理解

就我们在上面五个目录下放静态资源(比如:a.js等),可以直接访问(http://localhost:8080/a.js),类似于以前web项目的webapp下;放到其他目录下无法被访问。

2.3 为什么是这些目录?

2.3.1 看源码

自动配置类WebMvcAutoConfiguration

\org\springframework\boot\autoconfigure\web\servlet\WebMvcAutoConfiguration.class

/**
 * 添加 资源处理器 的方法
 * 
 * addResourceHandlers 是 WebMvcAutoConfiguration 实现了接口  WebMvcConfigurer 的方法
 * 
 * @param registry  ResourceHandlerRegistry: 资源处理注册器
 *
 * resourceProperties: 资源 配置类 来封装配置文件的内容
 */
public void addResourceHandlers(ResourceHandlerRegistry registry) {
   
   
    if (!this.resourceProperties.isAddMappings()) {
   
   
        logger.debug("Default resource handling disabled");
    } else {
   
   
        Duration cachePeriod = this.resourceProperties.getCache().getPeriod();
        CacheControl cacheControl = this.resourceProperties.getCache().getCachecontrol().
### 配置静态图片资源访问 为了使 Spring Boot 项目能够提供对外部或内部存储的静态图片资源的访问,在 `application.properties` 或者 `application.yml` 文件中指定静态资源的位置非常重要。 对于基于配置文件的方式,可以通过设置 `spring.mvc.static-path-pattern` 和 `spring.resources.static-locations` 属性来实现。这允许应用程序暴露特定目录下的文件给客户端请求[^1]。 #### 使用 application.properties 进行配置 当希望将位于桌面 img 文件夹以及类路径下 static 文件夹内的所有图像开放给外界访问时,可以在项目的 `application.properties` 文件里加入如下配置: ```properties # 设置静态资源匹配模式 spring.mvc.static-path-pattern=/myimgs/** # 定义多个静态资源位置 spring.resources.static-locations=file:C:/Users/tizzy/Desktop/img/,classpath:/static/ ``` 上述配置意味着任何以 `/myimgs/` 开始的URL都将被映射到所定义的一个或多个静态资源位置去寻找对应的文件[^2]。 #### Java代码示例 - 扩展默认行为 如果需要更复杂的自定义逻辑,则可以创建一个新的配置类并重写 `addResourceHandlers()` 方法来自定义资源处理器的行为: ```java import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { // 注册新的资源处理器用于处理/myimgs/** 的请求 registry.addResourceHandler("/myimgs/**").addResourceLocations( "file:C:/Users/tizzy/Desktop/img/", "classpath:/static/" ); } } ``` 这段代码实现了相同的功能——使得通过 URL 路径 `/myimgs/*` 可以访问到本地磁盘上的图片文件夹和 JAR 包内静态资源中的内容[^3]。 需要注意的是,默认情况下 Spring Boot 已经自动配置了一些常见的静态资源路径,因此除非有特殊需求,通常不需要额外修改这些设置就能满足大多数场景的需求[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值