SpringBoot之静态资源

默认静态资源路径

  • classpath:/META-INF/resources/
  • classpath:/resources/
  • classpath:/static/
  • classpath:/public/

静态资源路径下的文件,可以通过根目录访问

resources 文件夹的文件如下图所示:

启动项目,分别访问以下路径:

  • http://localhost:8080/a.jpeg
  • http://localhost:8080/b.jpeg
  • http://localhost:8080/c.jpeg
  • http://localhost:8080/d.jpeg

默认路径下的静态资源都可以访问

优先级问题

如果一个 Controller 的路径映射和静态资源的路径一致,Controller的优先级更高,案例演示如下:

@RestController
public class JpegController {@GetMapping("/a.jpeg")public String getJpeg() {return "a.jpeg";}
}

欢迎页
如果静态资源路径下存在 index.html,访问项目的根目录会映射到 index.html

分别给四个默认静态资源路径下创建 index.html,每个 index.html 文件只存在一个h1标签,h1标签内容为静态资源路径名称,相关内容如下所示:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<h1>classpath:/META-INF/resources/</h1>
</body>
</html>

1.访问项目的根目录

2.删除 /META-INF/resources/ 路径下的 index.html,重启项目,访问项目的根目录

3.删除 /resources/ 路径下的 index.html,重启项目,访问项目的根目录

4.删除 /static/ 路径下的 index.html,重启项目,访问项目的根目录

综上所述,默认静态资源的优先级如下: 

  1. classpath:/META-INF/resources/
  2. classpath:/resources/
  3. classpath:/static/
  4. classpath:/public/
使用 thymeleaf

引入依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId><version>2.6.13</version>
</dependency>

创建 templates 文件夹,并在文件夹下创建 index.html

访问项目的根目录

默认静态资源形式的欢迎页的优先级高于 thymeleaf 形式的欢迎页

自定义静态资源访问前缀

我们在开发的过程中,可能会使用拦截器拦截(放行)指定路径的资源,所以需要指定前缀

自定义静态资源访问前缀为 /res/**

spring:mvc:static-path-pattern: /res/**

演示静态资源的访问

访问路径 http://localhost:8080/b.jpeg

加上自定义前缀 /res/** ,访问路径 http://localhost:8080/res/b.jpeg

自定义静态资源访问前缀会导致默认静态资源形式的欢迎页功能失效

自定义静态资源路径

spring:mvc:static-path-pattern: /res/**web:resources:static-locations: [classpath:/custom_static/]

访问路径 http://localhost:8080/res/b.jpeg

将 /resources/ 下的 b.jpeg 移动到 /custom_static/ 下,重启项目, 再次访问路径 http://localhost:8080/res/b.jpeg

WebJars

WebJars 以 Jar 形式为 Web 项目提供资源文件

官方网址 : WebJars - Web Libraries in Jars

使用步骤

1.引入pom文件

2.查看 jar 包中静态文件路径 

3.访问 http://localhost:8080/webjars/jquery/3.7.1/jquery.js

禁用静态资源规则
spring:web:resources:add-mappings: false
访问默认静态资源形式的欢迎页失效

访问静态资源路径文件失效

访问Webjars文件相关路径失效

add-mappings 属性只能禁用默认的静态资源规则,手动定义的相关配置任然有效

1.创建配置文件WebConfig

@Configuration
public class WebConfig implements WebMvcConfigurer {@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/stc/**").addResourceLocations("classpath:/aa/");}
}

2.将 a.jpeg 移动到 aa 文件夹下

3.访问路径 http://localhost:8080/stc/a.jpeg

源码简析

默认静态资源的定义

WebProperties.Resources#CLASSPATH_RESOURCE_LOCATIONS

欢迎页
优先级问题

EnableWebMvcConfiguration#getWelcomePage

 其中 this.resourceProperties.getStaticLocations() 就是 WebProperties.Resources#CLASSPATH_RESOURCE_LOCATIONS 或者自定义的静态资源路径。默认情况下,路径 classpath:/META-INF/resources/ 是数组第一个,所以优先级最高

自定义静态资源访问前缀,默认静态资源形式的欢迎页失效问题

WebMvcProperties 的 staticPathPattern 属性的默认值为 /**,如果我们自定义了静态资源访问前缀该默认值就会被替换,就不会进入 if 分支,所以默认静态资源形式的欢迎页失效

thymeleaf 形式的欢迎页相关源码

 相关属性的默认值:

  • view : index
  • prefix : classpath:/templates/
  • suffix:.html

所以 thymeleaf 形式的欢迎页的默认路径就是 classpath:/templates/index.html ,我们可以通过 spring.thymeleaf.prefixspring.thymeleaf.suffix 属性指定前缀和后缀

禁用静态资源规则

WebMvcAutoConfigurationAdapter#addResourceHandlers

  • this.mvcProperties.getStaticPathPattern() :默认或者自定义静态资源访问前缀
  • this.resourceProperties.getStaticLocations() :默认或者自定义静态资源路径

如果 WebProperties.Resources#addMappings 属性为 false,则不添加 webjars 和 静态资源相关ResourceHandler

自定义静态资源访问前缀和禁用静态资源规则都不影响 thymeleaf 形式的欢迎页功能

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

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

相关文章

解锁 DevOps 精通:成功的综合指南

在动态的软件开发领域&#xff0c;要掌握 DevOps&#xff0c;需要对其核心原则有细致的了解&#xff0c;并采取战略性实施方法。DevOps 是一种协作方法&#xff0c;它将软件开发 (Dev) 和 IT 运营 (Ops) 结合起来&#xff0c;以自动化和简化软件交付流程。它旨在缩短开发周期、…

CleanMyMac X软件最新版下载【安装详细图文教程】

​CleanMyMac X是一款专业的Mac清理软件&#xff0c;可智能清理mac磁盘垃圾和多余语言安装包&#xff0c;快速释放电脑内存&#xff0c;轻松管理和升级Mac上的应用&#xff0c;同时CleanMyMac X可以强力卸载恶意软件&#xff0c;修复系统漏洞&#xff0c;一键扫描和优化Mac系统…

外星人Aurora R15 intel版 原厂Windows11oem系统

装后恢复到您开箱的体验界面&#xff0c;包括所有原机所有驱动AWCC、Mydell、office、mcafee等所有预装软件。 最适合您电脑的系统&#xff0c;经厂家手调试最佳状态&#xff0c;性能与功耗直接拉满&#xff0c;体验最原汁原味的系统。 原厂系统下载网址&#xff1a;http://w…

【机器学习】GANs网络在图像和视频技术中的应用前景

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 1. &#x1f525;引言 背景介绍 研究意义 2. &#x1f388;GANs的基本概念和工作原理 生成对抗网络简介 工作原理 3. &#x1f916;GANs在图像生成中的应用 图像超分辨率 工作原理 图像去噪 工作原理 图…

目标检测6:采用yolov8, RK3568推理的性能

最近有个小伙伴&#xff0c;问我rk3568上推理图片&#xff0c;1秒能达到多少&#xff1f; 本次采用模型为yolov8s.rknn&#xff0c;作了一次验证。 解析一段视频文件&#xff0c;1280*720, fps 24。读取视频文件&#xff0c;然后进行推理。 通过性能优化&#xff0c;发现推理…

Apple ID已成历史,在ios18中正式更名为Apple Account

随着iOS18的首个开发者预览版成功推送&#xff0c;众多热衷于尝鲜的用户已纷纷升级并开启全新体验。在这个版本中&#xff0c;备受瞩目的Apple ID正式迎来了它的进化——更名为Apple Account&#xff0c;并且拥有了中文名称“Apple账户”或简称“苹果账户”。 不过目前官网还称…

【全开源】Workerman在线客服系统(ThinkPHP+FastAdmin+Workerman)

Workerman在线客服系统&#xff1a;高效沟通的新选择 基于ThinkPHPFastAdminWorkerman开发的一款实时在线客服系统&#xff0c;支持多客服(不限座席)、知识库、离线留言板、离线消息、历史会话、微信小程序接入、Uni-app接入(高级授权)、用户轨迹等功能。​ &#x1f4e2; 一…

AI大模型智慧政务解决方案

随着AI大模型技术的蓬勃发展和普及应用&#xff0c;我们的政务治理正迎来一场波澜壮阔的革新巨浪。这场革新&#xff0c;不仅是技术层面的飞跃&#xff0c;更是一场深刻改变治理理念的伟大变革。它彻底颠覆了传统政务治理中依赖人力、效率低下、响应迟缓的“人盯人”模式&#…

STM32的FreeRtos的学习

首先就是去官网下载一个源文件&#xff1a;FreeRtos官网 下载下来的是一个zip文件&#xff0c;解压缩了。 然后再工程文件夹中创建个文件夹&#xff1a; 在这个文件夹中创建3个文件夹&#xff1a; 然后开始把下载下来的文件夹中的文件挑选出来放到我们的工程文件夹中&#xff1…

第二届京津冀现代商贸物流金融创新发展百人大会将于6月16日在廊坊举行

物流是实体经济的“筋络”&#xff0c;联接生产和消费、内贸和外贸&#xff0c;必须有效降低全社会物流成本&#xff0c;增强产业核心竞争力&#xff0c;提高经济运行效率。《京津冀协同发展规划纲要》赋予河北“三区一基地”的功能定位&#xff0c;建设全国现代商贸物流重要基…

逻辑回归及python实现

概述 logistic回归是一种广义线性回归&#xff08;generalized linear model&#xff09;&#xff0c;因此与多重线性回归分析有很多相同之处。它们的模型形式基本上相同&#xff0c;都具有 w‘xb&#xff0c;其中w和b是待求参数&#xff0c;其区别在于他们的因变量不同&#x…

刷题笔记2:用位运算找“只出现一次的一个数”

1. & 和 | 的基本操作 137. 只出现一次的数字 II - 力扣&#xff08;LeetCode&#xff09; 先对位运算的操作进行复习&#xff1a; 1、>> 右移操作符 移位规则&#xff1a;⾸先右移运算分两种&#xff1a; 1. 逻辑右移&#xff1a;左边⽤0填充&#xff0c;右边丢…

安装git bash

1、cmd下面输入git&#xff0c;直接报错 2、下载git&#xff0c;并安装 Git - Downloading Package 安装&#xff1a; 然后next&#xff0c;next&#xff0c;最好finish. 这样git就安装好了&#xff0c;可以直接用了。

Oracle最终会扼杀MySQL?(译)

原文网站&#xff1a;https://www.percona.com/blog/is-oracle-finally-killing-mysql/ 作者&#xff1a;Peter Zaitsev 自从Oracle收购了MySQL后&#xff0c;很多人怀疑Oracle对开源MySQL的善意&#xff0c;这篇percona的文章深入分析了Oracle已经和将要对MySQL采取的措施&a…

语法05 C++ 浮点型/实数类型

什么是实数类型 实数类型是一种数据类型&#xff0c;实数类型变量里能存放小数和整数。 定义格式&#xff1a;double a; 赋值&#xff1a;a0.4; 输入&#xff1a;cin>>a; 输出&#xff1a;cout<<a; 训练&#xff1a;尺子的价格 小知在文具店买铅笔&#xff…

python数据分析-笔记本内存和价格预测分析

一、背景和研究意义 计算机已成为现代社会不可或缺的工具&#xff0c;广泛应用于个人生活、学术研究和商业领域。随着科学技术的飞速发展&#xff0c;计算机不仅在性能上不断突破&#xff0c;在种类和品牌上也呈现出多样化和差异化。无论是办公、娱乐、学习还是创作&#xff0…

【C++】类和对象(二)this指针

书接上回&#xff1a;【C】类和对象&#xff08;一&#xff09; 文章目录 九、this指针this指针的指出this指针的特性面试题:question:this指针存在内存中的哪个区域:question:this指针可以为空吗 十、C语言和C实现Stack的对比C语言C 九、this指针 this指针的指出 我们先来看…

解决uview2中u--input输入框禁用状态下click事件不生效

需求&#xff1a;想要点击输入框&#xff0c;展示下拉内容 之前使用uview1是可以直接在input上添加click事件&#xff08;禁用和只读情况下都不影响&#xff09; 但是在uview2上直接写click不生效 解决方式&#xff1a;直接在写click.native"xxx" 代码部分&#x…

linux驱动学习(十一)之看门狗

需要板子一起学习的可以这里购买&#xff08;含资料&#xff09;&#xff1a;点击跳转 一、看门狗定时器功能 1、产生复位信号&#xff1a;当系统受到由于噪声或者干扰而造成系统死机&#xff0c;看门狗产生一个复位信号。 2、普通定时器&#xff1a;16bits定时器&#xff0c…

人工智能和机器学习的区别

目录 一、介绍人工智能 二、介绍机器学习 三、人工智能和机器学习的区别和联系&#xff1f; 一、介绍人工智能 先来说下人工智能&#xff0c;人工智能&#xff08;Artificial Intelligence&#xff09;&#xff0c;英文缩写为AI&#xff0c;通俗来讲就是用机器去做在过去只有…