SpringBoot对静态资源的映射规则

目录

什么是SpringBoot静态资源映射?

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

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

示例:

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

示例一:

示例二: 

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

示例:


什么是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   结果如下图所示:  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/497739.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【EtherCATBasics】- KRTS C++示例精讲(2)

EtherCATBasics示例讲解 目录 EtherCATBasics示例讲解结构说明代码讲解 项目打开请查看【BaseFunction精讲】。 结构说明 EtherCATBasics&#xff1a;应用层程序&#xff0c;主要用于人机交互、数据显示、内核层数据交互等&#xff1b; EtherCATBasics.h &#xff1a; 数据定义…

【论文阅读】Reducing Activation Recomputation in Large Transformer Models

创新点&#xff1a; 针对Transformer结构&#xff0c;通过序列并行和选择性重计算激活值&#xff0c;在节省显存空间占用的情况下&#xff0c;不带来明显通信开销&#xff0c;同时减少重计算成本。 总的来说&#xff0c;就是在原有的张量并行的基础上&#xff0c;对LayerNorm和…

Linux arm 编译安装glibc-2.29

重要的话说三遍&#xff1a; &#xff01;&#xff01;&#xff01;&#xff01;&#xff01;不要轻易自己去安装glibc&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; &#xff01;&#xff01;&#xff01;&#xff01;&#xff01;不要轻易自己去安装glibc&a…

STM32完全学习——FLASH上FATFS文件管理系统

一、需要移植的接口 我们通过看官网的手册&#xff0c;可以看到我们只要完成下面函数的实现&#xff0c;就可以完成移植。我们这里只移植前5个函数&#xff0c;获取时间的函数我们不在这里移植。 二、移植接口函数 DSTATUS disk_status (BYTE pdrv /* Physical drive nmuber…

Docker使用——国内Docker的安装办法

文章目录 参考资料前言Mac安装办法Homebrew 安装1. 直接下报错2. 安装homebrew&#xff0c; 用国内镜像3. 安装Docker4. 启动docker服务5. 测试是否安装成功 参考资料 鸣谢大佬文章。 macOS系统中&#xff1a;Docker的安装&#xff1a;https://blog.csdn.net/sulia1234567890…

Java-38 深入浅出 Spring - AOP切面增强 核心概念 相关术语 Proxy配置

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 大数据篇正在更新&#xff01;https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了&#xff1a; MyBatis&#xff…

【CSS in Depth 2 精译_096】16.4:CSS 中的三维变换 + 16.5:本章小结

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第五部分 添加动效 ✔️【第 16 章 变换】 ✔️ 16.1 旋转、平移、缩放与倾斜 16.1.1 变换原点的更改16.1.2 多重变换的设置16.1.3 单个变换属性的设置 16.2 变换在动效中的应用 16.2.1 放大图标&am…

iOS 苹果开发者账号: 查看和添加设备UUID 及设备数量

参考链接&#xff1a;苹果开发者账号下添加新设备UUID - 简书 如果要添加新设备到 Profiles 证书里&#xff1a; 1.登录开发者中心 Sign In - Apple 2.找到证书设置&#xff1a; Certificate&#xff0c;Identifiers&Profiles > Profiles > 选择对应证书 edit &g…

【HENU】河南大学计院2024 计算机网络 期末复习知识点

和光同尘_我的个人主页 一直游到海水变蓝。 计网复习 第一章互联网组成类别交换方式分组交换的要点&#xff1a;分组交换的优点&#xff1a; 网络性能指标体系结构网络协议五层协议 第二章&#xff1a;物理层物理层的主要任务&#xff08;四大特性&#xff09;通信的三种方式…

Kafka中的Topic和Partition有什么关系?

大家好&#xff0c;我是锋哥。今天分享关于【Kafka中的Topic和Partition有什么关系&#xff1f;】面试题。希望对大家有帮助&#xff1b; Kafka中的Topic和Partition有什么关系&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 Apache Kafka 中&#…

一文读懂变分自编码(VAE)

一文读懂变分自编码(VAE) 概述 变分自编码器&#xff08;Variational Autoencoder, VAE&#xff09;是一种生成模型&#xff0c;用于学习数据的潜在表示并生成与原始数据分布相似的新数据。它是一种概率模型&#xff0c;通过结合深度学习和变分推断的思想&#xff0c;解决了传…

第十七周:Fast R-CNN论文阅读

Fast R-CNN论文阅读 摘要Abstract文章简介1. 引言2. Fast R-CNN框架2.1 RoI位置信息映射2.2 RoI pooling2.3 分类器与边界框回归器2.4 以VGG16为backbone的Fast RCNN的网络结构 3. 训练细节3.1 采样3.2 多任务损失 4. 优缺点分析总结 摘要 这篇博客介绍了Fast R-CNN&#xff0…

ThinkPHP 8开发环境安装

【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《ThinkPHP 8高效构建Web应用 夏磊 编程与应用开发丛书 清华大学出版社》【摘要 书评 试读】- 京东图书 1. 安装PHP8 Windows系统用户可以前往https://windows.php.net/downloads/releases/archives/下载PHP 8.0版本&am…

VM虚拟机配置ubuntu网络

目录 桥接模式 NAT模式 桥接模式 特点&#xff1a;ubuntu的IP地址与主机IP的ip地址不同 第一部分&#xff1a;VM虚拟机给ubuntu的网络适配器&#xff0c;调为桥接模式 第二部分&#xff1a;保证所桥接的网络可以上网 第三部分&#xff1a;ubuntu使用DHCP&#xff08;默认&…

日本IT行业|分享实用的开发语言及框架

在日本IT行业中&#xff0c;开发语言与框架的选择非常多样化&#xff0c;但也有一些特定的技术和框架更为流行。以下是对日本IT行业在用的开发语言与框架的详细分享&#xff1a; 开发语言 Java&#xff1a;Java在日本是一门非常稳定且受欢迎的编程语言&#xff0c;很多日本公…

【畅购商城】校验用户名、手机号以及前置技术Redis和阿里大鱼短信验证码

搭建环境 后端web服务&#xff1a;changgou4-service-web修改pom.xml文档 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance&…

[创业之路-222]:波士顿矩阵与GE矩阵在业务组合选中作用、优缺点比较

目录 一、波士顿矩阵 1、基本原理 2、各象限产品的定义及战略对策 3、应用 4、优点与局限性 二、技术成熟度模型与产品生命周期模型的配对 1、技术成熟度模型 2、产品生命周期模型 3、技术成熟度模型与产品生命周期模型的配对 三、产品生命周期与产品类型的对应关系 …

第三方接口设计注意要点

实际工作中&#xff0c;我们会遇到与三方系统对接的情形&#xff0c;比如对接短信服务、支付服务、地图服务、以及一些外部业务系统的调用和回调等等&#xff0c;不论是我们调用第三方接口还是我们为其他系统提供接口服务&#xff0c;调用过程中会遇到一些大大小小的问题和吐槽…

折腾日记:如何让吃灰笔记本发挥余热——搭建一个相册服务

背景 之前写过&#xff0c;我在家里用了一台旧的工作站笔记本做了服务器&#xff0c;连上一个绿联的5位硬盘盒实现简单的网盘功能&#xff0c;然而&#xff0c;还是觉的不太理想&#xff0c;比如使用filebrowser虽然可以备份文件和图片&#xff0c;当使用手机使用网页&#xf…

【设计与实现】基于Bootstrap的地方旅游管理系统的设计与实现

目录 第一章 绪论 1.1 研究现状 1.2 设计原则 1.3 研究内容 第四章 系统设计 4.1系统结构设计 4.2系统顺序图设计 4.3数据库设计 第五章 系统实现 5.1登录模块的实现 第一章 绪论 1.1 研究现状 时代的发展&#xff0c;我们迎来了数字化信息时代&#xff0c;它正在渐…