Spring Boot之静态资源映射 | 超级详细,建议收藏

写在前面🔥

        上几期,我们重点讲解了Spring Boot集成Swagger-UI实现在线API文档及美化UI界面,而这期,在 Web 应用中会都会涉及到大量的静态资源,例如 图片、JS、CSS 和 HTML 等。我们知道,Spring MVC 导入静态资源文件时,就需要配置静态资源的映射,但在 Spring Boot 中则不再需要进行此项配置,因为 SpringBoot 已经默认完成了这一工作。

        接下来我会重点给大家介绍Spring Boot如何进行静态资源的配置及使用,这将又会是干货满满的一期,全程无尿点不废话只抓重点教,具有非常好的学习效果,拿好小板凳准备就坐!希望学习的过程中大家认真听好好学,学习的途中有任何不清楚或疑问的地方皆可评论区留言或私信,bug菌将第一时间给予解惑,那么废话不多说,直接开整!Fighting!!

1.环境说明🔥

本地的开发环境:

  • 开发工具:IDEA 2021.3
  • JDK版本: JDK 1.8
  • Spring Boot版本:2.3.1 RELEASE
  • Maven版本:3.8.2

2.前言🔥

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

        Spring Boot 默认为我们提供了以下 3 种静态资源映射规则,分别如下:

  1. WebJar s 映射
  2. 默认资 源映射
  3. 静态首页 (欢迎页)映射

        由此,我分别以这三种静态资源映射规则逐一进行讲解,辅助大家理解及运用。

3.正文🔥

3.1 WebJars 映射

3.1.1 WebJars概念

        WebJars的出现其实就是为了解决Spring Boot 项目以 JAR 包的形式进行部署的且不存在 webapp 目录而生,它可以完美解决这个问题,实际也就是以jar包的形式去引入 jQuery,Backbone.js 和 Bootstrap 等。

        WebJars 可以将 Web 前端资源(JS,CSS 等)打成一个个的 Jar 包,然后将这些 Jar 包部署到 Maven 中央仓库中进行统一管理,当 Spring Boot 项目中需要引入 Web 前端资源时,只需要从 WebJars 官网 中找到所需资源的 pom 依赖,将其导入到项目中即可。

3.1.2 WebJars举例

        我给大家举个例子,我们先从WebJars官网中随便引入一个Web 前端资源,比如我们引入如下的[ AjaxQ ],找到其对于的maven依赖,添加到我们的pom配置文件中。

  

3.1.3 引入AjaxQ

	
<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>AjaxQ</artifactId>
    <version>0.0.2</version>
</dependency>

3.1.4  Jar 包结构

        我们都知道,SpringBoot启动会默认加载很多xxxAutoConfiguration类(自动配置类)
其中SpringMVC的大都数功能都集中在WebMvcAutoConfiguration类中,根据条件ConditionalOnxxx注册类对象,从其中的addResourceHandlers()方法中有一段,写的特别清楚。

if(!registry.hasMappingForPattern("/webjars/**")){
        this.customizeResourceHandlerRegistration(
                registry.addResourceHandler(new String[]{"/webjars/**"})
                        .addResourceLocations(new String[]{"classpath:/META-INF/resources/webjars/"})
                        .setCachePeriod(this.getSeconds(cachePeriod))
                        .setCacheControl(cacheControl)
                        .setUseLastModified(this.resourceProperties.getCache().isUseLastModified()));
}

        通过以上源码可知,WebJars 的映射路径为[ /webjars/** ],即所有访问[/webjars/**]的请求,都会去[ classpath:/META-INF/resources/webjars/ ]查找 WebJars前端资源。

        所以我们顺着路径在本项目中找,大家请看:

3.1.5  项目启动测试

        启动 Spring Boot 项目,浏览器访问[ http://localhost:8080/webjars/jquery/3.6.0/jquery.js ]访问 jquery.js,结果如下图。

         成功获取到了jquery 3.6.4.js源码,证明所有访问[/webjars/**]的请求都会去[ classpath:/META-INF/resources/webjars/ ]查找 WebJars前端资源。

        再测试一下,我们引入的AjaxQ前端资源们是否也能获取到。

        启动 Spring Boot 项目,浏览器访问[ http://localhost:8080/webjars/AjaxQ/0.0.2/ajaxq.js ]访问 AjaxQ.js,结果如下图。

          也是成功获取到了AjaxQ.js源码。

3.2 默认资 源映射

        对于SpringBoot而言,它对静态资源映射提供了默认配置。

        当访问项目中的任意资源(即“/**”)时,Spring Boot 会默认从以下路径中查找资源文件(优先级依次降低),具体如下:

目录优先级
classpath:/META-INF/resources/最高
classpath:/resources/第二
classpath:/static/第三
classpath:/public/最低

        这些路径又被称为静态资源文件夹,它们的优先级顺序为:classpath:/META-INF/resources/ > classpath:/resources/ > classpath:/static/ > classpath:/public/ 

        当我们请求某个静态资源(即以“.html”结尾的请求)时,Spring Boot 会先查找优先级高的文件夹,再查找优先级低的文件夹,直到找到指定的静态资源为止。

        此时,我们就来做个小测试,在 resources 目录下分别新建 public 、 resources 、 static 三个目录,并分别放入 1.jpg 、 2.jpg 、 3.jpg三张图片,演示截图如下:

浏览器分别访问以下三个请求:

  • http://localhost:8080/1.jpg
  • http://localhost:8080/2.jpg
  • http://localhost:8080/3.jpg

        均能正常访问相应的图片资源,那么说明, Spring Boot 默认会挨个从 resources 、static 、 public 里面找是否存在相应的资源,如果有则直接返回,没有则返回404。

3.3 静态首页 (欢迎页)映射

3.3.1 概述

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

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

3.3.2 创建index.html 

        接下来,我们在 项目 的 src/main/resources/public 目录中创建一个 index.html,index.html代码如下,仅供参考。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
    <p>这是项目首页</p>
    <h3>我是bug菌,一个爱分享技术的小博主!</h3>
</body>
</html>

3.3.3 启动项目

        启动下 Spring Boot 项目,使用浏览器访问 http://localhost:8080/,结果如下图:

然后再访问 http://localhost:8080/index.html,结果如下图:

           试验结论毫无疑问,访问[ / ]或者[ /index.html ]时,都会跳转到静态首页(欢迎页)。

        ...

       以上就是我这期的全部内容啦,如果还想学习更多,你可以看看我的往期热文推荐哦,每天积累一个奇淫小知识,日积月累下去,你一定能成为令人敬仰的大佬的。好啦,咱们下期见~


4.课程总览🔥

 滴~如下介绍下前30章节的Spring Boot基础篇学习大纲,请小伙伴们注意查收。 

导读:SpringBoot 学习指南(附思维导图)

Spring Boot入门(01):Spring Boot的奋斗成长史

Spring Boot入门(02):快速开发环境搭建和项目启动

Spring Boot入门(03): yaml、properties配置文件介绍及使用

Spring Boot入门(04):多环境切换,实例演示

Spring Boot入门(05):starter基础入门

Spring Boot入门(06):Spring Boot常用注解大全

Spring Boot入门(07):整合 MySQL 和 Druid数据源(两万字教学)

Spring Boot入门(08):整合Mybatis访问MySQL实现增删改查

Spring Boot入门(09):使用MyBatis的XML配置方式访问MySQL实现增删改查

Spring Boot入门(10): mybatis之xml映射文件>、<=等特殊符号写法

Spring Boot入门(11):Spring Boot 整合 JPA

Spring Boot入门(12):整合Mybatis-Plus mybatis-plus实现接口增删改查

Spring Boot入门(13): Mybatis-Plus之条件构造器使用手册

Spring Boot入门(14): mybatis-plus之如何自定义sql

Spring Boot入门(15):Spring Boot 整合 MyBatis-Plus AutoGenerator 自动生成项目骨架代码

Spring Boot入门(16):Spring Boot整合Swagger-UI实现在线API文档

Spring Boot入门(17):Spring Boot整合Knife4j,美化强化丑陋的Swagger

Spring Boot入门(18):Spring Boot静态资源映射

Spring Boot入门(19):Spring Boot 整合 Thymeleaf 模板引擎,开发Web页面

Spring Boot入门(20):实现多数据源配置,开箱即用

Spring Boot入门(21):整合Log4j2以及配置详解

Spring Boot入门(22):整合LogBack 实现日志文件本地保存

Spring Boot入门(23):Spring Boot基于AOP拦截日志

Spring Boot入门(24):Spring Boot事务

Spring Boot入门(25):过滤器、拦截器、监听器对比及使用场景

Spring Boot入门(26):实现邮件发送简单邮件、附件邮件、嵌入资源(图片)邮件、模板邮件等

Spring Boot入门(27):war包部

Spring Boot入门(28):jar包部署

Spring Boot入门(29):如何实现热部署

Spring Boot入门(30):Windows安装Redis客户端?你玩过么

... ...

5.文末🔥

        如果还想要学习更多,小伙伴们直接订阅bug菌专门为大家创建的零基础入门Spring Boot专栏《滚雪球学Spring Boot》,从无到有,从零到一!以知识点+实例+项目的学习模式由浅入深对Spring Boot框架进行学习&使用。

       我是bug菌,一名想走👣出大山改变命运的程序猿。接下来的路还很长,都等待着我们去突破、去挑战。来吧,小伙伴们,我们一起加油!未来皆可期,fighting!

关注公众号,获取最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板等硬核资源

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WebGIS 信息系统-主界面基本模块功能设计

文章目录 系统文件夹结构主界面地图基本管理模块功能设计手机定位模块功能设计经纬度路径生成功能设计导航模块功能设计用户管理模块功能设计 系统文件夹结构 为了使项目容易管理和维护&#xff0c;在开发之前需要确定项目的系统文件夹结构&#xff0c;即系统文件夹结构设计。…

C++ / QT 旅游产品管理系统

一、项目介绍 旅游产品管理系统 你是一家旅行社的 IT 主管&#xff0c;现在需要你设计并实现一个旅游产品管理系统。 1 &#xff09; 基本功能要求 * 实现基础界面&#xff1a; 参照现有的旅游产品管理系统&#xff1a;查看产品、选择产品、使用说明等内容 * 支持旅游产品…

用Python搭建监控平台详解

概要 监控和运维&#xff0c;是互联网工业链上非常重要的一环。监控的目的就是防患于未然。通过监控&#xff0c;我们能够及时了解到企业网络的运行状态。一旦出现安全隐患&#xff0c;你就可以及时预警&#xff0c;或者是以其他方式通知运维人员&#xff0c;让运维监控人员有时…

Springboot 核心注解和基本配置解读

目录 1. Springboot 入门与原理 1.1 Springboot 简介 1.1.1 什么是Springboot 1.1.2 Springboot 主要优点 1.2 Springboot 相关注解 1.2.1 元注解 1.2.1.1 Target 1.2.1.2 Retention 1.2.2 Configuration 1.2.3 Import 1.2.3.1 直接注入 1.2.3.2 实现 ImportSelector…

Error: Cannot find module ‘webpack‘ 问题解决办法

这句话的意思是&#xff1a;没有找到webpack模块。 就算之前你装了webpack&#xff0c;那肯定是非全局安装 所以要全局安装 npm install --save-dev webpack 问题解决

4.蜂鸣器

1.了解蜂鸣器&#xff1a; 蜂鸣器在使用3.3V无法驱动&#xff0c;需要借助到三极管的放大特性(IcβIb)将蜂鸣器驱动&#xff1b;本次原理图中&#xff0c;接R33电阻是因为当STM32单片机复位时处于浮空状态&#xff0c;防止小电流让蜂鸣器响而添加的。 2.蜂鸣器原理图&#xf…

剖析Linux文件系统

Linux 文件系统体系结构是一个对复杂系统进行抽象化的有趣例子。通过使用一组通用的 API 函数&#xff0c;Linux 可以在许多种存储设备上支持许多种文件系统。例如&#xff0c;read 函数调用可以从指定的文件描述符读取一定数量的字节。read 函数不了解文件系统的类型&#xff…

Java——《面试题——Redis篇》

前文 java——《面试题——基础篇》 Java——《面试题——JVM篇》 Java——《面试题——多线程&并发篇》 Java——《面试题——Spring篇》 Java——《面试题——SpringBoot篇》 Java——《面试题——MySQL篇》​​​​​​ Java——《面试题——SpringCloud》 Java…

使用Nginx的反向代理来访问服务器例子——Nginx笔记

因为网站上的视频加载过慢&#xff0c;想使用nginx服务器实现HLS视频播放服务。顺便记录一下通过Nginx的方向代理来访问服务器。这里在原先的项目上进行改造。原先的项目已经部署在公网&#xff0c;使用tomcat服务器&#xff0c;可以直接用地址进行访问。 1.这里使用的8080端口…

阿里飞猪三面

&#xff08;有许多人是用青春的幸福作成功的代价的。——莫扎特&#xff09; 背景 该岗位是阿里飞猪的前端部门&#xff0c;岗位名称是node.js高级/专家开发工程师。主要负责用NodeJs作为后端技术&#xff0c;向上层Java&#xff0c;Node等业务服务&#xff0c;提供中间层基础…

ChatGPT对未来编程语言发展的影响与展望

目录 一、引言1.ChatGPT的介绍与背景介绍背景 2.编程语言发展的重要性和挑战重要性挑战 二、ChatGPT在编程领域的应用1.自然语言处理技术在编程中的应用现状2. ChatGPT作为编程辅助工具的潜力与优势 三、ChatGPT对编程语言发展的影响1. 创新编程模式的涌现2. 语言设计与交互方式…

【问题记录】如何使用 pip 在 linux 上安装 pytorch

一、进入 pytorch 官网 pytorch 官网&#xff1a;https://pytorch.org/ 二、在页面选择环境 三、复制官网弹出的命令并运行即可 pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

Redis中的缓存雪崩、击穿、穿透的原因以及解决办法

缓存雪崩、击穿、穿透一旦发生&#xff0c;会导致大量的请求积压到数据库层。如果请求的并发量很大&#xff0c;就会导致数据库宕机或是故障&#xff0c;这就是很严重的生产事故了。 俗话说&#xff0c;知己知彼&#xff0c;百战不殆。了解了问题的成因&#xff0c;我们就能够…

微服务_Nacos

简介 Nacos&#xff08;全称为“动态服务发现、配置和服务管理平台”&#xff09;是阿里巴巴开源的一款云原生服务发现和配置管理平台&#xff0c;支持多种语言。它提供了服务发现、配置管理、服务治理和流量管理等功能&#xff0c;使得微服务系统的构建和管理更加便捷。Nacos…

云HIS是什么?HIS系统为什么要上云?云HIS有哪些优点?

一、当前医疗行业HIS的现状与发展趋势 1.医院信息系统&#xff08;HIS&#xff09;经历了从手工到单机再到局域网的两个阶段&#xff0c;随着云计算、大数据新技术迅猛发展&#xff0c;基于云计算的医院信息系统将逐步取代传统局域网HIS , 以适应人们对医疗卫生服务越来越高的要…

关于EMC Unity 存储系统DIMM内存的几个问题

下面是客户咨询最多的几个关于EMC Unity的DIMM内存的问题&#xff0c;供大家参考。 1. Unity存储能否自己扩容内存 有客户觉得Unity存储的内容太小&#xff0c;想自己扩容内存&#xff0c;很朴实的想法&#xff0c;原来是每个控制器3条16gb&#xff0c;能不能升级到3条32gb或…

nvm安装

进入nvm github地址 https://github.com/nvm-sh/nvm 找到安装语句 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash 在终端中粘贴并运行 此时容易失败&#xff0c;可以配置一下hosts文件 将这个网址的配置地址加入到hosts文件中 https://g…

el-table控制列的显示与隐藏

1、序言 源码在下方&#xff0c;复制粘贴就可运行 当一个表格太多列的时候&#xff0c;想要显示/隐藏一些列&#xff0c;目标效果如下&#xff1a; 默认情况下&#xff0c;展示所有列 隐藏某一列 2、原理 &#xff08;1&#xff09;data数据有&#xff1a;tableData为表格数据&…

Apikit 自学日记:发起文档测试-Websocket

Websocket 进入某个WS协议的API文档详情页&#xff0c;点击文档上方 测试 标签&#xff0c;即可进入 API 测试页&#xff0c;系统会根据API文档的定义的求头部、Query参数、请求体自动生成测试界面并且填充测试数据。 填写/修改请求参数 1.1设置请求头部&#xff08;Header&…

6应用层-6.2【实验】【计算机网络】

6应用层-6.2【实验】【计算机网络】 前言推荐6应用层知识一、DNS常用记录类型&#xff1a;二、nslookup命令的用法 6.1 Web服务与FTP服务配置6.2 DNS域名系统配置实验目的实验内容及实验环境实验原理实验过程1.搭建如图所示的网络拓扑2.测试网络连通性3.在服务器上启用DNS服务&…