SpringBoot对静态资源的映射规则详解

 更新时间:2024年12月30日 10:43:53   作者:八月五  
在Web应用中会涉及到大量的静态资源,例如 JS、CSS和HTML等,我们知道,Spring MVC 导入静态资源文件时,需要配置静态资源的映射,但在 SpringBoot 中则不再需要进行此项配置,因为SpringBoot已经默认完成了这一工作,本文给大家介绍了SpringBoot对静态资源的映射规则详

什么是SpringBoot静态资源映射?

在 Web 应用中会涉及到大量的静态资源,例如 JS、CSS 和 HTML 等。我们知道,Spring MVC 导入静态资源文件时,需要配置静态资源的映射;但在 SpringBoot 中则不再需要进行此项配置,因为 SpringBoot 已经默认完成了这一工作。

Spring Boot 默认为我们提供了 3 种静态资源映射规则:

  • WebJars 映射
  • 默认资源映射
  • 静态首页(欢迎页)映射

如何实现SpringBoot静态资源映射?

1. webjars:以jar包的方式引入静态资源

在传统的Web应用开发中,我们经常需要使用众多的JavaScript和CSS库,例如jQuery.js和Bootstrap.css。这些Web资源通常被复制到Java Web项目的`webapp`目录下进行管理。然而,在Spring Boot项目中,应用是以JAR包的形式部署的,不存在`webapp`目录。为了解决这个问题,我们可以通过Webjars将Web资源封装成JAR包的形式提供。具体来说,就是将Web资源(如JavaScript和CSS文件)打包成一个JAR文件,并上传到Maven中央仓库进行集中管理。当Spring Boot项目需要引入这些前端资源时,可以在Maven Central页面查找所需资源的Maven依赖项,并将它们添加到项目中。这样,Spring Boot项目就可以方便地引入和管理前端资源了。

示例:

将web资源Jquery.js 引入进Spring Boot 项目中

(1)首先Maven Central搜索Jquery依赖

(2)复制Maven版的依赖代码

(3)引入该依赖

Spring Boot通过其MVC自动配置类`WebMvcAutoConfiguration`为Webjars前端资源设置了默认的映射规则。根据源码分析,Webjars资源的访问路径被定义为`/webjars/**`。这意味着,任何以`/webjars/**`开头的请求,Spring Boot都会在`classpath:/META-INF/resources/webjars/`路径下搜索对应的Webjars资源。

(4)启动Spring Boot 项目,浏览器器输入 http://localhost:8080/webjars/jquery/3.7.1/jquery.js 访问 jquery.js 静态资源

说明访问静态资源成功了。上面的这种方式是导入jar包的方式,如果我们要用自己的一些JS、CSS、jQuery文件可不可以呢?答案是可以的,所以就有了我们下面的第二种方式出现。 

2.  /** 访问当前项目的任何资源

默认情况下,springboot会将特定目录中(如/static/public/resources/META-INF/resources)的静态资源映射到根路径。

在项目中双击shiftctrl+N搜索WebMvcAutoConfiguration.class文件,文件中的addResourceHandlers方法如下:

public void addResourceHandlers(ResourceHandlerRegistry registry) {
            if (!this.resourceProperties.isAddMappings()) {
                logger.debug("Default resource handling disabled");
            } else {
                this.addResourceHandler(registry, "/webjars/**", "classpath:/META-INF/resources/webjars/");
                this.addResourceHandler(registry, this.mvcProperties.getStaticPathPattern(), (registration) -> {
                    registration.addResourceLocations(this.resourceProperties.getStaticLocations());
                    if (this.servletContext != null) {
                        ServletContextResource resource = new ServletContextResource(this.servletContext, "/");
                        registration.addResourceLocations(new Resource[]{resource});
                    }
 
                });
            }
}

随后进入到getStaticLocations()方法可以发现变量 staticLocations 的取值如下,当访问项目中任意资源(即"/**")时,Spring Boot 会默认从以下路径中查找资源文件(优先级依次降低)  

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

这些路径又被称之为静态资源路径,当我们请求某个静态资源(例如:.html文件)时,Spring Boot 会先查找优先级高的文件夹,然后在查找优先级低的文件夹,直到找到指定的静态资源为止。

示例一:

在项目/src/main/resources/static 目录中创建一个 hello.html文件,代码如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>hello world!</h1>
</body>
</html>

然后启动Spring Boot 项目,浏览器访问: http://localhost:8080/hello.html ,结果如下图所示:  

示例二: 

在项目/src/main/resources/static 目录中存放一张照片,然后启动Spring Boot 项目,浏览器访问:http://localhost:8080/test.png

即项目运行时会到上述路径下寻找静态资源,也可以自定义静态资源路径,需在 application.properties 中配置:

spring.resources.static-locations=classpath:/folder1/,classpath:/folder2/

注:一旦自定义了静态文件夹的路径,则默认的静态资源路径就会失效。 

3. 静态首页(欢迎页)映射

静态资源文件夹下的所有index.html 被称之为静态首页或者欢迎页,它们会被 /** 映射,也就是当我们访问 "/" 或者 "/index.html" 时,都会跳转到静态首页(欢迎页)

注意:访问静态首页或者欢迎页面时,其查找顺序也遵循默认静态资源的查找顺序,即先查找优先级高的目录,在查找优先级低的目录,直到找到 index.html 为止。

示例:

1、在项目/src/main/resources/public 目录下创建一个 index.html 文件,代码如下:

<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>首页</title>
</head>
  <h1>欢迎访问首页!</h1>
</html>

然后启动Spring Boot项目, 浏览器访问 http://localhost:8080/或者   http://localhost:8080/index.html   结果如下图所示:  

以上就是SpringBoot对静态资源的映射规则详解的详细内容,更多关于SpringBoot静态资源映射的资料请关注脚本之家其它相关文章!

相关文章

  • Java LinkedList集合功能实例解析

    Java LinkedList集合功能实例解析

    这篇文章主要介绍了Java LinkedList集合功能实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • 在springboot项目中同时接收文件和多个参数的方法总结

    在springboot项目中同时接收文件和多个参数的方法总结

    在开发接口中,遇到了需要同时接收文件和多个参数的情况,可以有多种方式实现文件和参数的同时接收,文中给大家介绍了两种实现方法,感兴趣的同学跟着小编一起来看看吧
    2023-08-08
  • Java语言资源国际化步骤解析

    Java语言资源国际化步骤解析

    这篇文章主要介绍了Java语言资源国际化步骤解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • 使用Java读取Excel文件数据的方法详解

    使用Java读取Excel文件数据的方法详解

    通过编程方式读取Excel数据能实现数据导入、批量处理、数据比对和更新等任务的自动化,本文为大家介绍了三种Java读取Excel文件数据的方法,需要的可以参考下
    2024-01-01
  • Spring AOP 切面@Around注解的用法说明

    Spring AOP 切面@Around注解的用法说明

    这篇文章主要介绍了Spring AOP 切面@Around注解的用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • 用SpringBoot框架来接收multipart/form-data文件方式

    用SpringBoot框架来接收multipart/form-data文件方式

    这篇文章主要介绍了用SpringBoot框架来接收multipart/form-data文件方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • 如何将char类型的数字字符转换成int类型问题

    如何将char类型的数字字符转换成int类型问题

    这篇文章主要介绍了如何将char类型的数字字符转换成int类型问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • SpringBoot中的RabbitMQ用法详解

    SpringBoot中的RabbitMQ用法详解

    RabbitMQ是一个开源的消息队列系统,它通过AMQP(高级消息队列协议)来实现消息的传递,SpringBoot是目前非常流行的Java开发框架,它提供了很多便利性的功能,其中就包括对RabbitMQ的支持,在本文中,我们将介绍如何在SpringBoot中使用RabbitMQ
    2023-07-07
  • Java基础第三篇 构造器与方法重载

    Java基础第三篇 构造器与方法重载

    显式初始化要求我们在写程序时就确定初始值,这有时很不方便。我们可以使用构造器(constructor)来初始化对象。构造器可以初始化数据成员,还可以规定特定的操作。这些操作会在创建对象时自动执行。下面文字将对该内容做详细介绍,需要的小伙伴请参考
    2021-09-09
  • MybatisPlus实现分页查询和动态SQL查询的示例代码

    MybatisPlus实现分页查询和动态SQL查询的示例代码

    本文主要介绍了MybatisPlus实现分页查询和动态SQL查询的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09

最新评论