【Spring boot 静态资源处理】

news2024/11/26 18:43:45
默认静态资源处理
Spring Boot 默认为我们提供了静态资源处理,使用 WebMvcAutoConfiguration 中的配置各种属性。
建议大家使用 Spring Boot 的默认配置方式,如果需要特殊处理的再通过配置进行修改。
如果想要自 己 完 全 控 制 WebMVC ,就需要在 @Configuration 注解的配置类上 增 加 @EnableWebMvc
( @SpringBootApplication 注解的程序入 口 类 已 经 包 含 @Configuration ), 增 加 该 注 解 以 后
WebMvcAutoConfiguration 中配置就不会生效,你需要自己来配置需要的每一项。这种情况下的配置还是要多看
一下 WebMvcAutoConfiguration 类。
我们既然是快速使用 Spring Boot,并不想过多的自己再重新配置。本文还是主要针对 Spring Boot 的默认处理方
式,部分配置在 application 配置文件中(.properties 或 .yml)
默认资源映射
我们在启动应用的时候,可以在控制台中看到如下信息:
2016-01-08 09:29:30.362 INFO 24932 ---[ main]o.s.w.s.handler.SimpleUrlHandlerMapping :
MappedURLpath[/webjars/**]ontohandleroftype[class
org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2016-01-08 09:29:30.362 INFO 24932 ---[ main]o.s.w.s.handler.SimpleUrlHandlerMapping :
MappedURLpath[/**]ontohandleroftype[class
org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2016-01-08 09:29:30.437 INFO 24932 ---[ main]o.s.w.s.handler.SimpleUrlHandlerMapping :
MappedURLpath[/**/favicon.ico]ont
其中默认配置的 /** 映射到 /static (或/public、/resources、/META-INF/resources)
其中默认配置的 /webjars/** 映射到 classpath:/META-INF/resources/webjars/
PS:上面的 static、public、resources 等目录都在 classpath: 下面(如 src/main/resources/static)。
如果我按如下结构存放相同名称的图片,那么 Spring Boot 读取图片的优先级是怎样的呢?
如下图:

当我们访问地址 http://localhost:8080/test.jpg 的时候,显示哪张图片?这里可以直接告诉大家,优先级顺序为:
META/resources > resources > static > public ( 已进行测试 )
如果我们想访问 test2.jpg ,请求地址 http://localhost:8080/img/test2.jpg
自定义静态资源处理
面我们介绍了 Spring Boot 的默认资源映射,一般够用了,那我们如何自定义目录?
这些资源都是打包在 jar 包中的,然后实际应用中,我们还有很多资源是在管理系统中动态维护的,并不可能在
程序包中,对于这种随意指定目录的资源,如何访问?
自定义目录
以增加 /myres/ * 映射到 classpath:/myres/* 为例的代码处理为:
实现类继承 WebMvcConfigurerAdapter 并重写方法 addResourceHandlers (对于访问 myres 文件夹中的
test.jpg 图片的地址为 http://localhost:8080/myres/test.jpg
package org .springboot.sample.config ;
import org .springboot.sample.interceptor.MyInterceptor 1 ;
import org .springboot.sample.interceptor.MyInterceptor 2 ;
import org .springframework.context.annotation.Configuration ;
import org .springframework.web.servlet.config.annotation.InterceptorRegistry ;
import org .springframework.web.servlet.config.annotation.ResourceHandlerRegistry ;
import org .springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter ;
@Configuration
public class MyWebAppConfigurer
extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry .addResourceHandler ( "/myres/**" ) .addResourceLocations ( "classpath:/myres/" ) ;
super .addResourceHandlers (registry) ;
}
}
访问 myres 文件夹中的 test.jpg 图片的地址为 http://localhost:8080/myres/test.jpg
这样使用代码的方式自定义目录映射,并不影响 Spring Boot 的默认映射,可以同时使用。
如果我们将/myres/ * 修改为 /* 与默认的相同时,则会覆盖系统的配置,可以多次使用 addResourceLocations 添
加目录,优先级先添加的高于后添加的。
其 中 addResourceLocations 的 参 数 是 动 参 ,可以这 样 写 addResourceLocations(“classpath:/img1/”,
“classpath:/img2/”, “classpath:/img3/”);
使用外部目录
如果我们要指定一个绝对路径的文件夹(如 D:/data/api_files ),则只需要使用 addResourceLocations 指定即可。
// 可以直接使用 addResourceLocations 指定磁盘绝对路径,同样可以配置多个位置,注意路径写法需要
加上 file:
registry .addResourceHandler ( "/api_files/**" ) .addResourceLocations ( "file:D:/data/api_files" ) ;

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

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

相关文章

快速创建django项目管理系统流程

首先创建django project,虚拟环境选择我已经有的虚拟环境,下面是创建后的画面,简单的框架模板,需要配置改动一些代码参数,才能适合我自己的习惯。 这里我经常用到的习惯必须导入的是simpleui库,还有django的…

基于STM32-Socket-Qt 遥控小车(一代)

文章目录一、项目分析1. 项目简介2. 知识储备3. 硬件选择二、STM32部分三、QT部分四、遥控小车演示程序源码一、项目分析 1. 项目简介 本项目本质为客户端与服务器之间的通信,通过发送不同的指令,服务器和客户端进行不同的操作。 客户端:基…

声学特征提取

声学特征提取流程图 语谱图 语谱图的横坐标是时间,纵坐标是频率,坐标点值为语音数据能量。由于是采用二维平面表达三维信息,所以能量值的大小是通过颜色来表示的,颜色深,表示该点的语音能量越强。 语谱图形成过程 …

zabbix监控Linux

1. 环境配置: 主机名主机地址操作系统角色zabbix192.168.188.201Rocky Linux release 8.6zabbix-servernode1192.168.188.111CentOS7zabbix-agent 2. 配置zabbix客户端: 1>. 下载并安装zabbix客户端: [rootnode1 ~]# wget https://mi…

Ubuntu 22.04安装Cuda11.7和cudnn

安装显卡驱动 打开‘软件和更新。 点击附加驱动安装显卡驱动 如果已经安装显卡驱动,请忽略上面的步骤。 安装gcc 新安装的Ubuntu22.04 没有安装gcc,需要安装gcc。在终端输入gcc -version 查看有没有gcc。 执行命令 sudo apt install gcc安装CUDA …

什么是蜂窝移动网络?

文章目录前言移动网络 vs WIFI蜂窝移动通信网蜂窝网络实现移动上网通信网架构总结前言 本博客仅做学习笔记,如有侵权,联系后即刻更改 科普: 移动网络 vs WIFI 计网课外实验月,我走在宿舍一楼正数着AP有多少个,突然W…

待业将近一个月,晚上11点接到面试邀约电话,我却拒绝了...

前言 一位测试朋友最近一直在找工作,前两天刚拒绝了一个面试。那天晚上11点多,他接到一个HR的面试电话,让他第二天早上10点去公司面试。朋友和HR聊了两句,了解到这位HR经常加班,于是果断拒绝了这个面试。我还为他可惜&…

LongAdder的源码学习与理解

👨‍💻个人主页: 才疏学浅的木子 🙇‍♂️ 本人也在学习阶段如若发现问题,请告知非常感谢 🙇‍♂️ 📒 本文来自专栏: Java基础 ❤️ 支持我:👍点赞 &#x1…

Android Studio开发之使用内容组件Content获取通讯信息讲解及实战(附源码 包括添加手机联系人和发短信)

运行有问题或需要源码请点赞关注收藏后评论区留言 一、利用ContentResolver读写联系人 在实际开发中,普通App很少会开放数据接口给其他应用访问。内容组件能够派上用场的情况往往是App想要访问系统应用的通讯数据,比如查看联系人,短信&#…

Linux top命令的cpu使用率和内存使用率

文章目录前言一、cpu使用率1.1 top简介1.2 cpu使用率的来源二、内存使用率2.1 总内存有关的数据2.2 进程使用内存有关的数据2.3 内存使用率的来源三、 pmap参考资料前言 NAMEtop - display Linux processes一、cpu使用率 1.1 top简介 top程序提供当前运行系统的动态实时视图…

网络协议:一文搞懂Socket套接字

本篇内容包括:Socket 套接字的简介、Socket 套接字的分类、Java 中的 Socket 即 java.net.ServerSocket、java.net.Socket 的使用,以及Java 使用套接字 Scoket 编程的Demo。 一、Socket 简介 TCP(传输控制协议)是一种面向连接的、…

Qt编写跨平台RTSP/RTMP/HTTP视频流播放器

一、前言 很早以前就做过这款播放器的入门版本,最开始用的ffmpeg去解析,后面陆续用vlc播放器、mpv播放器来做,毕竟播放器提供的接口使用也很方便,而且功能强大,后面发现播放器主要的应用场景是播放视频文件&#xff0…

安装配置Anaconda3

1.装anaconda,就不需要单独装python了 2、 下载Anaconda Anaconda | Anaconda Distribution 3、 安装Anaconda 其他默认 4、配置Anaconda环境变量 此电脑——属性——高级系统设置——环境变量——path——编辑——新建 C:\ProgramData\Anaconda3 C:\ProgramDa…

mybatis 自动化处理 mysql 的json类型字段 终极方案

文章目录mybatis 自动化处理 mysql 的json类型字段 终极方案mysql 建表 json 字段,添加1条json 数据对应的java对象 JsonEntitymybatis,不使用 通用mapper手动自定义1个类型处理器,专门处理 JsonNode 和Json 的互相转化将 自定义的类型处理器…

Java笔记(十二)

文献种类:专题技术总结文献 开发工具与关键技术: IntelliJ IDEA、Java 语言 作者: 方建恒 年级: 2020 撰写时间: 2022 年 11 月 8 日 Java笔记(十二) 今天我给大家继续分享一下我的Java笔记, 我们继续来了…

使用前缀和数组解决“区间和查询“问题

本文已收录到 GitHub AndroidFamily,有 Android 进阶知识体系,欢迎 Star。技术和职场问题,请关注公众号 [彭旭锐] 进 Android 面试交流群。 前言 大家好,我是小彭。 今天分享到一种非常有趣的数据结构 —— 前缀和数组。前缀和…

每日一题|2022-11-8|1684. 统计一致字符串的数目|哈希表|Golang

1684. 统计一致字符串的数目 思路1:丢人做法 哈希记录allowed,暴力遍历words所有字母,如果有不在哈希表里的,计数。最后用words的长度减去 计数 就行。 func countConsistentStrings(allowed string, words []string) int {has1 : make(map[…

如何判断一段程序是否是裸机程序?

在嵌入式MCU领域,一般将不移植操作系统直接烧录运行的程序称为裸机程序。 一般来说,非易失性存储,时钟,图形显示,网络通讯,用户I/O设备…都需要硬件依赖。 基于硬件基础,内存管理、文件系统、…

【API部署】fastapi与nuitka打包py项目

提示:分两部分:fastapi接口调用,与nuitka快速打包 功能:作为一名算法工程师,训练机器学习模型只是为客户提供解决方案的一部分。 除了生成和清理数据、选择和调整算法之外,还需交付和部署结果,…

130道基础OJ编程题之: 29 ~ 38 道

130道基础OJ编程题之: 29 ~ 38 道 文章目录130道基础OJ编程题之: 29 ~ 38 道0. 昔日OJ编程题:29. BC23 时间转换30. BC24 总成绩和平均分计算31. BC30 KiKi和酸奶32. BC31 发布信息33. BC3 输出学生信息34. BC33 计算平均成绩35. BC34 进制AB36. BC37 网购37.BC39 争夺前五名38…