【SpringBoot Web开发之静态资源访问】笔记

news2024/9/19 1:17:34

详细内容见官方文档:Static Content
在这里插入图片描述

SpringBoot Web开发之静态资源访问

    • 1.准备工作:创建WebDemo
    • 2.静态资源目录
      • 2.1官网原文
      • 2.2静态资源目录
        • 第一步:依照上面2.1官网原文中创建如下目录
        • 第二步:复制粘贴图片到静态资源目录中
        • 第三步:浏览器测试访问静态资源目录下的图片
        • 第四步:静态资源访问前缀
        • 第四步:改变静态资源位置

1.准备工作:创建WebDemo

创建一个SpringBoot的WebDemo,创建WebDemo具体步骤—>【如何创建一个SpringBoot的WebDemo】笔记方法二使用Spring Initializr创建一个Spring Boot项目
按照上述链接笔记中的步骤创建好WebDemo后测试正常运行后再进行下面的步骤,
此时项目的默认端口号应该为8080

2.静态资源目录

2.1官网原文

By default, Spring Boot serves static content from a directory called /static (or /public or /resources or /META-INF/resources) in the classpath or from the root of the ServletContext. It uses the ResourceHttpRequestHandler from Spring MVC so that you can modify that behavior by adding your own WebMvcConfigurer and overriding the addResourceHandlers method.

默认情况下,Spring Boot从类路径中名为/static(或/public或/resources或/META-INF/resources)的目录或ServletContext的根目录提供静态内容。 它使用Spring MVC中的ResourceHttpRequestHandler,因此您可以通过添加自己的WebMvcConfigurer并覆盖addResourceHandlers方法来修改该行为。

2.2静态资源目录

第一步:依照上面2.1官网原文中创建如下目录
  • static
  • /public
  • /resources
  • /META-INF/resources
    选中resources鼠标右键创建上述文件夹
    在这里插入图片描述
第二步:复制粘贴图片到静态资源目录中

任意的选几个图片复制粘贴到目录中
在这里插入图片描述

第三步:浏览器测试访问静态资源目录下的图片

测试结果:在第二步中我们添加的四个图片均能访问
总结

  • 在默认情况下我们访问静态资源的格式为:当前项目根路径/ + 静态资源名,例如虚下面的四个图片的访问
  • 原理: 静态映射/**。
    请求进来,先去找Controller看能不能处理。不能处理的所有请求又都交给静态资源处理器。静态资源也找不到则响应404页面
    http://127.0.0.1:8080/1.jpg
    在这里插入图片描述
    http://127.0.0.1:8080/2.jpg
    在这里插入图片描述
    http://127.0.0.1:8080/3.jpg
    在这里插入图片描述
    http://127.0.0.1:8080/4.jpg
    在这里插入图片描述
    上面我们说了原理,接下来验证一下:
    创建一个Controller,来映射"1.jpg"
package org.example.webdemo.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
    @GetMapping("/1.jpg")
    public String hello(){
        return "hello cxk";
    }
}

此时我们再来访问127.0.0.1:8080/1.jpg,发现不再显示图片,服务端响应的是我们自定义字符串。
在这里插入图片描述

第四步:静态资源访问前缀

By default, resources are mapped on /** , but you can tune that with the spring.mvc.static-path-pattern property. For instance, relocating all resources to /resources/** can be achieved as follows:

默认情况下,资源映射在/**上,但您可以使用spring.mvc.static-path-pattern属性进行调整。 例如,将所有资源转移到/resources/**可以通过以下方式实现:
在application.yaml中做如下配置

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

此时再去访问127.0.0.1:8080/2.jpg,发现报404了
在这里插入图片描述
访问127.0.0.1:8080/res/2.jpg,发现必须在我们配置res前缀下才能访问静态资源
在这里插入图片描述

第四步:改变静态资源位置

You can also customize the static resource locations by using the spring.web.resources.static-locations property (replacing the default values with a list of directory locations). The root servlet context path, “/”, is automatically added as a location as well.

您还可以使用spring.web.resources.static-locations属性(将默认值替换为目录位置列表)自定义静态资源位置。 根servlet上下文路径"/"也会自动添加为位置。

  • 创建一个hello12345目录,放入一个hello.jpg
    在这里插入图片描述
  • application.yaml配置静态资源位置,将静态资源目录改为hello12345
server:
  port: 8080
spring:
  mvc:
    static-path-pattern: "/res/**"
  web:
    resources:
      static-locations: classpath:/hello12345/

在这里插入图片描述

  • 浏览器访问静态资源
    http://127.0.0.1:8080/res/2.jpg,访问2.jpg已经访问不到了
    在这里插入图片描述
    http://127.0.0.1:8080/res/hello.jpg,访问成功静态资源目录位置修改成功
    在这里插入图片描述
    实际上可以配置多个静态资源位置的,下面这种数组的形式就可以映射多个静态资源目录
    static-locations: [classpath:/hello12345/,classpath:/nihao123/]
server:
  port: 8080
spring:
  mvc:
    static-path-pattern: "/res/**"
  web:
    resources:
      static-locations: [classpath:/hello12345/,classpath:/nihao123/]

在这里插入图片描述
http://127.0.0.1:8080/res/nihao.jpg
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二叉树的前、中、后序遍历(递归法、迭代法)leetcode144/94/145

leetcode144、二叉树的前序遍历 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例 1: 输入:root [1,null,2,3] 输出:[1,2,3] 示例 2: 输入:root [] 输出:[] 示例 3:…

海外媒体发稿-瑞典SEO破茧成蝶:从0到10的实战精要-大舍传媒

海外媒体发稿-瑞典SEO破茧成蝶:从0到10的实战精要 一、迷茫与意义的探寻 有一天我找了王老师聊天,谈到生活迷茫和人生的意义。老师说了一段话:当全情投入于一件事情时,是没有时间去迷茫或思索人生意义的。我感触很深,当总感到迷…

UI设计中的响应式布局策略:让您的界面在各种设备上都表现出色

UI界面设计它是人与机器之间交互的媒介,也是客户体验的媒介(UX)一个组成部分。操作界面由两个主要部分组成:视觉设计(即传达产品的外观和感觉)和交互设计(即元素功能和逻辑组织)。用…

自定义注解 + Redis 实现业务的幂等性

1.实现幂等性思路 实现幂等性有两种方式: ⭐ 1. 在数据库层面进行幂等性处理(数据库添加唯一约束). 例如:新增用户幂等性处理,username 字段可以添加唯一约束. ⭐ 2. 在应用程序层面进行幂等性处理. 而在应用程序…

Go语言并发编程-Channel通信_2

Channel通信 Channel概述 不要通过共享内存的方式进行通信,而是应该通过通信的方式共享内存 这是Go语言最核心的设计模式之一。 在很多主流的编程语言中,多个线程传递数据的方式一般都是共享内存,而Go语言中多Goroutine通信的主要方案是Cha…

人工智能算法工程师(高级)课程1-单类目标识别之人脸检测识别技术MTCNN模型介绍与代码详解

大家好,我是微学AI,今天给大家介绍一下人工智能算法工程师(高级)课程1-单类目标识别之人脸检测识别技术MTCNN模型介绍与代码详解。本文深入探讨了基于PyTorch的人脸检测与识别技术,详细介绍了MTCNN模型、Siamese network以及center loss、sof…

趣谈linux操作系统 9 网络系统-读书笔记

文章目录 网络协议栈基础知识回顾网络分层网络分层的目的各层作用简介延伸-ip地址,有类,无类,cidr socket实现分析tcp/udp回顾socket编程回顾TCP编程回顾UDP编程回顾差异 socket相关接口实现浅析sokcet实现解析创建socket的三个参数socket函数定义及其参数创建socket结构体关联…

element UI :el-table横向列内容超出宽度,滚动条不显示问题

是否能解决你问题的前提 **看到这篇文章的解决问题的方案之前,请先回忆你是否在项目中的全局样式或者私有组件中去单独设置过滚动条样式。如果有 请继续往下看:**单独设置过滚动条样式代码实例: ::-webkit-scrollbar {/*滚动条整体样式*/wi…

STM32智能家居电力管理系统教程

目录 引言环境准备智能家居电力管理系统基础代码实现:实现智能家居电力管理系统 4.1 数据采集模块 4.2 数据处理与控制模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景:电力管理与优化问题解决方案与优化收尾与总结 1. 引言 智能家居电…

代码随想录——最后一块石头的重量(Leetcode1046)

题目链接 class Solution {public int lastStoneWeight(int[] stones) {int len stones.length;if(len 1){return stones[0];}if(len 2){return Math.abs(stones[0] - stones[1]);}while(true){Arrays.sort(stones);if(stones[len - 2] 0){break;}stones[len - 1] stone…

一维差分的实现

这是C算法基础-基础算法专栏的第十三篇文章,专栏详情请见此处。 引入 上次我们学习了前缀和的实现,它可以快速解决求区间和问题。这次我们要学习差分,它是前缀和的逆运算,可以快速解决对序列的一个区间同时加或减一个数这样的问题…

LabVIEW在CRIO中串口通讯数据异常问题

排查与解决步骤 检查硬件连接: 确保CRIO的串口模块正确连接,并且电缆无损坏。 确认串口模块在CRIO中被正确识别和配置。 验证串口配置: 在LabVIEW项目中,检查CRIO目标下的串口配置,确保波特率、数据位、停止位和校验…

用杰理芯片发不出100hz~1200hz频率的PWM波

思路: 问原厂工程师 回复: 看下是不是数据做除法的时候越界了,如果有用户手册,直接看下那几个定时器的寄存器算下就知道为什么 芯片: AD155A 行动: 相关文档和代码: TMR_PR:1…

云计算安全流程与管控要求的全面解析

华为云安全流程与管控要求的全面解析 引言 在云计算技术迅猛发展的背景下,云安全问题日益凸显其重要性。华为云作为行业的领军企业,其安全流程与管控要求不仅关乎自身的服务稳定性,更直接影响到广大用户的业务安全。本文将深入解析华为云的安…

win注册表怎么打开

注册表怎么打开 在使用Windows电脑时,有时我们可能需要访问注册表(Registry Editor),以进行一些高级的系统设置和调整。注册表包含了系统的配置信息和设置选项,因此在操作时需格外小心谨慎。现在,让我来教你…

npm install时报错 reason: certificate has expired

在VS code中导入新项目,执行npm install时报错: npm warn old lockfile Could not fetch metadata for antv/g3.4.10 FetchError: request to https://registry.npm.taobao.org/antv%2fg failed, reason: certificate has expirednpm warn old lockfile …

「C++系列」判断

文章目录 一、判断1. if 语句2. if-else 语句3. if-else if-else 语句链4. switch 语句注意事项 二、应用场景1. 用户输入验证2. 决策逻辑3. 循环控制4. 排序算法 三、相关链接 一、判断 在C中,判断通常是通过条件语句来实现的,这些语句允许程序根据特定…

UDP报文结构详解:一篇文章带你搞懂

大家好呀!我是你们的老朋友小米,一个活泼开朗的29岁技术达人。今天我们来聊聊网络基础中的一个重要概念——UDP报文格式。相信很多小伙伴在学习网络编程或者网络协议时,都接触过UDP这个名词。UDP,全称是User Datagram Protocol(用户数据报协议),是一种无连接的传输层协议…

CTF-Web习题:[BJDCTF2020]ZJCTF,不过如此

题目链接:[BJDCTF2020]ZJCTF,不过如此 解题思路 访问靶场链接,出现的是一段php源码,接下来做一下代码审阅,发现这是一道涉及文件包含的题 主要PHP代码语义: file_get_contents($text,r); 把$text变量所…

物理站群多ip服务器如何租用

物理站群多IP服务器的租用是企业或网站管理者为了提升SEO排名、分散风险、增加网站稳定性和提高访问速度而采用的一种策略。下面是一套详细的科普指南,帮助你理解如何租用物理站群多IP服务器: 1. 需求分析 首先,明确你的具体需求,…