springboot静态资源映射规则的使用小结

 更新时间:2025年12月19日 09:24:14   作者:期待のcode  
本文主要介绍了springboot静态资源映射规则,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

SpringBoot 对静态资源的访问提供了自动配置支持,核心依赖是 WebMvcAutoConfiguration 自动配置类,其底层通过重写 addResourceHandlers 方法,借助 ResourceHandlerRegistry(资源处理器注册器)注册多个 ResourceHandler(资源处理器),分别定义了普通静态资源和 WebJars 资源的存放路径与 URL 访问路径映射关系,同时遵循 Controller 映射优先级高于静态资源映射的规则,确保请求匹配的合理性。

springboot静态资源映射规则源码解析

首先我们找到 spring-boot-autoconfigure 的jar包,点击 spring.factories 文件,找到 org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration,
进入 WebMvcAutoConfiguration 核心配置类

SpringBoot 之所以能访问到静态资源,本质是 WebMvcAutoConfiguration 自动配置类中,通过 addResourceHandlers 方法注册了默认的资源处理器

下面具体简述该函数代码

第一部分:加载缓存配置

点击进入 ResourceProperties

这是静态资源相关配置的绑定类,可以在 application.yml/properties 静态资源配置中进行设置和静态资源有关的参数,包括缓存时间等

第二部分:注册 WebJars 专用资源处理器

Webjars 是以 jar 包的方式引入静态资源,Webjars 的网址为 https://www.webjars.org/

由代码可知所有以 /webjars/ 开头的请求都会被该处理器处理,WebJars 组件的 Jar 包中静态资源默认存放在 classpath:META-INF/resources/webjars/ 目录下

下面以引入 jQuery 为例进行演示
使用方式是导入 org.webjars 的相关依赖

        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>jquery</artifactId>
            <version>3.3.1</version>
        </dependency>

访问方式是访问 classpath:META-INF/resources/webjars/ 目录下的内容,例如访问 jquery 的路径为:localhost:8080/webjars/jquery/3.3.1/jquery.js

第三部分是:注册普通静态资源处理器

点击 getStaticPathPattern 函数进入 WebMvcProperties 类中,里面 staticPathPattern 注册 URL 访问路径模式,默认是 /**(所有未被 Controller 处理的请求),可通过配置修改

点击 getStaticLocations 函数进入 ResourceProperties 类中,里面 staticLocations 读取默认 / 自定义的静态资源目录,默认值为四个目录

优先级从高到低(同名文件会优先访问优先级高的目录):
静态资源 classpath:/META-INF/resources/,即项目内实际存放路径 src/main/resources/META-INF/resources/
静态资源 classpath:/resources/,即项目内实际存放路径 src/main/resources/resources/
静态资源 classpath:/static/,即项目内实际存放路径 src/main/resources/static/
静态资源 classpath:/public/,即项目内实际存放路径 src/main/resources/public/

下面我们来看在 WebMvcAutoConfiguration 自动配置类中 SpringBoot 的默认欢迎页的自动配置核心

welcomePageHandlerMapping 函数专门处理欢迎页的 HandlerMapping

getWelcomePage() 函数用于查找静态资源目录和模板目录下的 index.html,严格遵循静态资源默认目录优先级进行查找,只要其中任意一个目录下有 index.html,就返回该资源路径。
另外,如果通过 spring.web.resources.staticLocations 自定义了静态资源目录,getWelcomePage() 也会在自定义目录中查找 index.html

由代码可知这个方法的本质是向 SpringMVC 容器注册一个 WelcomePageHandlerMapping 实例,它是一个请求处理器映射器(HandlerMapping),专门处理根路径(/)请求,自动查找并返回项目中的 index.html 作为欢迎页。

访问 http://localhost:8080/ 自动打开欢迎页的效果

到此这篇关于springboot静态资源映射规则的使用小结的文章就介绍到这了,更多相关springboot静态资源映射规则内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java的Servlet及其生命周期详解

    Java的Servlet及其生命周期详解

    这篇文章主要介绍了Java的Servlet及其生命周期详解,Servlet是用Java编写的服务器端程序,一门用于开发动态web资源的技术,其主要功能在与交互式的浏览和修改数据,生成动态web内容,需要的朋友可以参考下
    2023-11-11
  • Java实现订单超时自动取消的7种方案

    Java实现订单超时自动取消的7种方案

    在电商、外卖、票务等系统中,订单超时未支付自动取消是一个常见的需求,这个功能乍一看很简单,甚至很多初学者会觉得:"不就是加个定时器么?" 但真到了实际工作中,细节的复杂程度往往会超乎预期,本文给大家介绍了Java实现订单超时自动取消的7种方案
    2024-12-12
  • Java中提供synchronized后为什么还要提供Lock

    Java中提供synchronized后为什么还要提供Lock

    这篇文章主要介绍了Java中提供synchronized后为什么还要提供Lock,在Java中提供了synchronized关键字来保证只有一个线程能够访问同步代码块,下文更多相关资料需要的小伙伴可以参考一下
    2022-03-03
  • Java使用MethodHandle来替代反射,提高性能问题

    Java使用MethodHandle来替代反射,提高性能问题

    这篇文章主要介绍了Java使用MethodHandle来替代反射,提高性能问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-05-05
  • Java项目开发中最容易犯的10个错误与解决

    Java项目开发中最容易犯的10个错误与解决

    作为 Java 开发,我们在写代码的过程中难免会产生各种奇思妙想的 bug ,有些 bug 就挺让人无奈的,下面小编就和大家详细介绍一下如何避免吧
    2026-03-03
  • MyBatis获取自动生成的(主)键值的方法

    MyBatis获取自动生成的(主)键值的方法

    本文主要介绍了MyBatis获取自动生成的(主)键值的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • Java Collection 接口和常用方法综合详解

    Java Collection 接口和常用方法综合详解

    Collection派生出三个子接口,Set代表不可重复的无序集合、List代表可重复的有序集合、Queue是java提供的队列实现,通过它们不断的扩展出很多的集合类,接下来我们详细介绍一下
    2021-11-11
  • Java中反射的应用

    Java中反射的应用

    这篇文章主要介绍了Java中反射的应用,通过反射,我们可以在运行时检查类的属性、方法和构造函数,并且可以在不知道类名的情况下创建对象、调用方法和访问属性,需要的朋友可以参考下
    2023-10-10
  • java内部测试类代码详解

    java内部测试类代码详解

    这篇文章主要介绍了java内部测试类代码详解,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • 关于javaWeb中405错误的解决方法

    关于javaWeb中405错误的解决方法

    下面小编就为大家带来一篇关于javaWeb中405错误的解决方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05

最新评论