当前位置: 代码网 > it编程>编程语言>Java > SpringBoot对静态资源的映射规则详解

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

2024年12月30日 Java 我要评论
什么是springboot静态资源映射?在 web 应用中会涉及到大量的静态资源,例如 js、css 和 html 等。我们知道,spring mvc 导入静态资源文件时,需要配置静态资源的映射;但在

什么是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静态资源映射的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com