Spring Boot 中的静态资源配置

Spring Boot 实战(3)静态资源配置 第一种: 在Springboot中可以直接在配置文件中覆盖默认的静态资源路径的配置信息:#配置定义的资源位置#配置定义的请求url规则第二种: 在SpringBoot开发中,可以在Java代码中覆盖默认静态资源配置@Overrideif(!自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。 阅读详情

本文受作者江南一点雨授权转载,转载请联系原文作者
原文链接:http://www.imooc.com/article/293622

前言

当我们使用 SpringMVC 框架时,静态资源会被拦截,需要添加额外配置,之前老有小伙伴在微信上问松哥 Spring Boot 中的静态资源加载问题:“松哥,我的 HTML 页面好像没有样式?”,今天我就通过一篇文章,来和大伙仔细聊一聊这个问题。

1. SSM 中的配置

要讲 Spring Boot 中的问题,我们得先回到 SSM 环境搭建中,一般来说,我们可以通过 <mvc:resources /> 节点来配置不拦截静态资源,如下:

<mvc:resources mapping="/js/**" location="/js/"/>
<mvc:resources mapping="/css/**" location="/css/"/>
<mvc:resources mapping="/html/**" location="/html/"/>

由于这是一种Ant风格的路径匹配符,/** 表示可以匹配任意层级的路径,因此上面的代码也可以像下面这样简写:

<mvc:resources mapping="/**" location="/"/>

这种配置是在 XML 中的配置,大家知道,SpringMVC 的配置除了在XML中配置,也可以在 Java 代码中配置,如果在 Java 代码中配置的话,我们只需要自定义一个类,继承自 WebMvcConfigurationSupport 即可:

@Configuration
@ComponentScan(basePackages = "org.javaboy.javassm")
public class SpringMVCConfig extends WebMvcConfigurationSupport {
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**").addResourceLocations("/");
    }
}

重写 WebMvcConfigurationSupport 类中的 addResourceHandlers 方法,在该方法中配置静态资源位置即可,这里的含义和上面 xml 配置的含义一致,因此无需多说。

这是我们传统的解决方案,在 Spring Boot 中,其实配置方式和这个一脉相承,只是有一些自动化的配置了。

2. Spring Boot 中的配置

在 Spring Boot 中,如果我们是从 https://start.spring.io 这个网站上创建的项目,或者使用 IntelliJ IDEA 中的 Spring Boot 初始化工具创建的项目,默认都会存在 resources/static 目录,很多小伙伴也知道静态资源只要放到这个目录下,就可以直接访问,除了这里还有没有其他可以放静态资源的位置呢?为什么放在这里就能直接访问了呢?这就是本文要讨论的问题了。

2.1 整体规划

首先,在 Spring Boot 中,默认情况下,一共有 5 个位置可以放静态资源,五个路径分别是如下 5 个:

  1. classpath:/META-INF/resources/
  2. classpath:/resources/
  3. classpath:/static/
  4. classpath:/public/
  5. /

前四个目录好理解,分别对应了 resources 目录下不同的目录,第 5 个 / 是啥意思呢?我们知道,在 Spring Boot 项目中,默认是没有 webapp 这个目录的,当然我们也可以自己添加(例如在需要使用JSP的时候),这里第 5 个 / 其实就是表示 webapp 目录中的静态资源也不被拦截。如果同一个文件分别出现在五个目录下,那么优先级也是按照上面列出的顺序。

不过,虽然有 5 个存储目录,除了第 5 个用的比较少之外,其他四个,系统默认创建了 classpath:/static/ , 正常情况下,我们只需要将我们的静态资源放到这个目录下即可,也不需要额外去创建其他静态资源目录,例如我在 classpath:/static/ 目录下放了一张名为 1.png 的图片,那么我的访问路径是:

http://localhost:8080/1.png

这里大家注意,请求地址中并不需要 static,如果加上了 static 反而多此一举会报 404 错误。很多人会觉得奇怪,为什么不需要添加 static 呢?资源明明放在 static 目录下。其实这个效果很好实现,例如在 SSM 配置中,我们的静态资源拦截配置如果是下面这样:

<mvc:resources mapping="/**" location="/static/"/>

如果我们是这样配置的话,请求地址如果是 http://localhost:8080/1.png 实际上系统会去 /static/1.png 目录下查找相关的文件。

所以我们理所当然的猜测,在 Spring Boot 中可能也是类似的配置。

2.2 源码解读

胡适之先生说:“大胆猜想,小心求证”,我们这里就通过源码解读来看看 Spring Boot 中的静态资源到底是怎么配置的。

首先我们在 WebMvcAutoConfiguration 类中看到了 SpringMVC 自动化配置的相关的内容,找到了静态资源拦截的配置,如下:

图片描述

可以看到这里静态资源的定义和我们前面提到的 Java 配置 SSM 中的配置非常相似,其中,this.mvcProperties.getStaticPathPattern() 方法对应的值是 /**,this.resourceProperties.getStaticLocations() 方法返回了四个位置,分别是:

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

然后在 getResourceLocations 方法中,又添加了 / ,因此这里返回值一共有 5 个。其中, / 表示 webapp 目录,即 webapp 中的静态文件也可以直接访问。静态资源的匹配路径按照定义路径优先级依次降低。因此这里的配置和我们前面提到的如出一辙。这样大伙就知道了为什么 Spring Boot 中支持 5 个静态资源位置,同时也明白了为什么静态资源请求路径中不需要 /static ,因为在路径映射中已经自动的添加上了 /static了。

2.3 自定义配置

当然,这个是系统默认配置,如果我们并不想将资源放在系统默认的这五个位置上,也可以自定义静态资源位置和映射,自定义的方式也有两种,可以通过 application.properties 来定义,也可以在 Java 代码中来定义,下面分别来看。

2.3.1 application.properties

在配置文件中定义的方式比较简单,如下:

spring.resources.static-locations=classpath:/
spring.mvc.static-path-pattern=/**

第一行配置表示定义资源位置,第二行配置表示定义请求 URL 规则。以上文的配置为例,如果我们这样定义了,表示可以将静态资源放在 resources 目录下的任意地方,我们访问的时候当然也需要写完整的路径,例如在 resources/static 目录下有一张名为 1.png 的图片,那么访问路径就是 http://localhost:8080/static/1.png ,注意此时的 static 不能省略。

2.3.2 Java 代码定义

当然,在 Spring Boot 中我们也可以通过 Java 代码来自定义,方式和 Java 配置的 SSM 比较类似,如下:

@Configuration
public class WebMVCConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**").addResourceLocations("classpath:/aaa/");
    }
}

这里代码基本和前面一致,比较简单,不再赘述。

3. 总结

这里需要提醒大家的是,松哥见到有很多人用了 Thymeleaf 之后,会将静态资源也放在 resources/templates 目录下,注意,templates 目录并不是静态资源目录,它是一个放页面模板的位置(你看到的 Thymeleaf 模板虽然后缀为 .html,其实并不是静态资源)。好了,通过上面的讲解,相信大家对 Spring Boot 中静态资源的位置有一个深刻了解了,应该不会再在项目中出错了吧!

最后,求一波支持

解释Spring Boot中静态资源映射的配置。 虽然Spring Boot提供了便利的默认配置,但在某些情况下,你可能需要对静态资源的映射进行更精细的控制。这可以通过修改Spring Boot的配置来实现。使用application.properties或application.yml配置你可以在或文件中使用属性来自定义静态资源的位置。上述配置表示除了默认位置外,还会从类路径下的目录和文件系统中的目录加载静态资源。使用Java配置如果你需要更加灵活地配置静态资源映射,可以使用Java配置来覆盖默认设置。例如,你可以创建一个实现了接口的类,并重写。 阅读详情

相关推荐

Spring Boot2 系列教程(十一)Spring Boot 中的静态资源配置

当我们使用 SpringMVC 框架时,静态资源会被拦截,需要添加额外配置,之前老有小伙伴在微信上问松哥 Spring Boot 中的静态资源加载问题:“松哥,我的 HTML 页面好像没有样式?”,今天我就通过一篇文章,来和大伙仔细聊一聊这个问题。 1. SSM 中的配置 要讲 Spring Boot 中的问题,我们得先回到 SSM 环境搭建中,一般来说,我们可以通过 <mvc:reso...

weixin_44626952的博客 166

Spring boot项目设置加载静态资源的路径(spring.resources.static-locations)

默认Springboot将从如下位置按如下顺序加载jar包对应前端静态资源: 1.jar包同级static目录 2.jar包同级public目录 3.jar包同级resource目录 4.jar包/META-INF/resources 在调试模式下,Springboot将从class目录中按如下顺序加载对应前端静态资源 1.class目录下static目录 2.class目录下public目录 3...

南熏门前一只喵 2万+

Springboot 静态资源路径配置 实例介绍

这里主要介绍使用yml去配置静态资源路径,会由简单慢慢到详细地去介绍怎么使用yml来配置静态资源 示例: 单独配置了静态资源的访问路径 ,这个配置项相当于重新定义该项目的静态资源文件夹路径 spring: resources: static-locations: classpath:html/ 然后咱们在resources文件夹路径下,新建文件夹html ,放入一个简单...

默默不代表沉默 5293

SpringBoot中配置Web静态资源路径——详解

介绍: 本文章主要针对web项目中的两个问题进行详细解析介绍:1- 页面跳转404,即controller转发无法跳转页面问题;2- 静态资源文件路径问题。 项目工具: Intelij Idea, JDK1.8, SpringBoot 2.1.3 正文: 准备工作:通过Idea创建一个SpringBoot-web项目,此过程不做赘述,创建完成后项目结构如下图: 1- 创建一个contr...

wangxin1949的博客 9万+

SpringBoot 教程:SpringBoot多种方式实现静态Html页面跳转

本教程介绍了 Spring Boot 中实现静态 Html 页面跳转的常用方法,包括重定向跳转、直接返回 ModelAndView 对象以及使用 Thymeleaf 模板引擎。如果你的项目中使用了 Thymeleaf 模板引擎,那么可以利用它来实现静态页面的跳转。对于静态的 Html 页面,我们可以使用多种方式来实现跳转功能。重定向是一种常见的页面跳转方式,它通过发送 HTTP 重定向响应头来告知浏览器跳转到指定的页面。在 Spring Boot 中,我们可以将视图名称设置为静态页面的路径。

2301_79325657的博客 2448

spring boot实战之配置静态资源路径

1.SpringBoot配置文件 spring: mvc: static-path-pattern: /** resources: static-locations: classpath:/static 第一个指定的static-path-pattern为访问静态资源的路径,这个只能配置一个 第二个static-locations指定静态资源在服务器上的位置 cl...

蛐蛐的博客 1868

Spring Boot 配置静态资源处理

先讲几点有关嵌入式 Tomcat 运行的事项 request.getSession().getServletContext().getRealPath(“/”),这个不用多说了,总之很重要,先将其简称为 docBase,即 “文档根目录” 当项目中不存在 src/main/webapp 目录时,docBase 为C盘临时目录,例如 C:\Users\Administrator\AppData\...

pomer_huang的博客 5981

[Java实战]Spring Boot 静态资源配置(十三)

在spring:web:resources:- classpath:/assets/ # 自定义目录- file:/opt/static/ # 外部目录(优先级高于 classpath)目录规范:按类型组织资源(如/static/js环境区分:开发环境禁用缓存,生产环境启用压缩和版本控制。监控优化:使用工具(如 Lighthouse)分析资源加载性能。安全防护:避免敏感文件暴露在静态目录中。扩展思考:如何结合 Spring Boot 与 WebAssembly 实现高性能前端?

曼岛_的博客 1347

spring mvc thymeleaf配置404_Spring Boot2 系列教程(十一)Spring Boot 中的静态资源配置

当我们使用 SpringMVC 框架时,静态资源会被拦截,需要添加额外配置,之前老有小伙伴在微信上问松哥 Spring Boot 中的静态资源加载问题:“松哥,我的 HTML 页面好像没有样式?”,今天我就通过一篇文章,来和大伙仔细聊一聊这个问题。1. SSM 中的配置要讲 Spring Boot 中的问题,我们得先回到 SSM 环境搭建中,一般来说,我们可以通过 <mvc:resource...

weixin_35140642的博客 665

Spring AI 实战:5 分钟搭建你的第一个 AI 应用(含完整代码)

能力关键 API适用场景基础对话简单问答、文本生成流式输出实时打字机效果@Bean模型需要调用外部工具结构化输出需要返回 Java 对象多轮对话聊天机器人场景Spring AI 让 Java 开发者可以用最熟悉的方式(Spring Boot + Maven)进入 AI 应用开发领域,不用学新语言,不用换框架,这是它最大的优势。但目前为止,我们的 AI 应用只能回答"它脑子里已有的知识"。如果让它读懂你自己的技术文档、公司内部知识库呢?这就是下一篇文章的主题——RAG(检索增强生成)实战。

qq_17204557的博客 642

保姆级教程:在DolphinScheduler 3.x中配置Apache SeaTunnel任务(Flink/Spark双引擎)

本文提供了一份详细的教程,指导如何在DolphinScheduler 3.x中配置Apache SeaTunnel任务,支持Flink和Spark双引擎。从环境准备、脚本选择到配置文件编写和任务调度优化,涵盖了所有关键步骤和常见问题解决方案,帮助用户高效集成SeaTunnel到海豚调度系统中。

weixin_42524945的博客 194

spring boot静态资源配置(二)

spring boot静态资源配置以及引入thymeleaf 模块(二) 1.pom.xml引入thymeleaf 模块 <!-- 引入 thymeleaf 模板依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>...

BushRo 3962

Python CalmAn(Calcium Imaging Analysis)神经生物学工具包安装及环境配置过程

CalmAn是一个用于大规模钙成像数据分析和行为分析的Python工具箱。CaImAn实施了大规模钙成像数据分析管道中所需的一套基本方法。针对多天的运动校正、源提取、尖峰反褶积和分量配准,实现了快速且可扩展的算法。它适用于双光子和单光子荧光显微镜数据,可以在批处理和在线模式下运行;CaImAn还包含一些分析摄像机行为的例程。

Fine的优快云博客 3557

springboot static访问不到_Spring Boot2 系列教程(十一)Spring Boot 中的静态资源配置

当我们使用 SpringMVC 框架时,静态资源会被拦截,需要添加额外配置,之前老有小伙伴在微信上问松哥 Spring Boot 中的静态资源加载问题:“松哥,我的 HTML 页面好像没有样式?”,今天我就通过一篇文章,来和大伙仔细聊一聊这个问题。1. SSM 中的配置要讲 Spring Boot 中的问题,我们得先回到 SSM 环境搭建中,一般来说,我们可以通过 节点来配置不拦截静态...

weixin_39715538的博客 536

硬件工程师的蜗牛成长路

1、《模拟电路课程》R/L/C/继电器/光耦/二极管/三极管/MOS管磁珠/ESD/TVS/肖特基二极管/稳压二极管/保险丝/GDT/TSS/光耦/MOS/运放/BJT比较器/面板开关/按键开关/拨码开关/BUCK/LDO/电源防护器件LM5069单输出PLL/多路输出PLL/单端晶振/差分晶振/晶体(这方面不熟悉,待以后补充)1)速度传感器2)温度传感器3)倾斜角传感器4)火焰传感器5)红外传感器6)呼吸心跳采集chaunganqi1)数字隔离 电平转换芯片/磁隔离/专用隔离芯片。

caozhaokun的博客 1978

TI毫米波雷达人体生命体征(呼吸、心跳)信号提取算法(IWR6843ISK+DCA1000EVM)

本篇内容介绍的算法主要为传统的提取算法,但可实现在1m内呈现良好的检测效果,能够提取出非常可观的呼吸和心跳波形,但在超出1m的距离后便不适用这个算法了。远距离检测呼吸和心跳始终是这个领域一个很大的挑战。要实现远距离检测可在提取相位信号、分离呼吸和心跳信号上进行改进处理,例如线性解调提取相位、改进的VMD分离呼吸和心跳算法。

m0_61934621的博客 3万+

Spring Boot拦截器配置静态资源

Spring Boot拦截器的配置 踩了很多坑,自己也还是个小菜鸟,总结一下 以上这是我存放静态资源的文件夹,在使用的初期我也在网页上进行查找,我选择了一下比较简单的这款: public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new LoginHandler...

weixin_45294248的博客 386

从SPI到JTAG:玩转FT2232H的MPSSE多协议切换指南(附配置代码)

本文详细介绍了如何利用FT2232H芯片的MPSSE技术实现SPI与JTAG协议的无缝切换,提供配置代码和调试技巧。通过解析MPSSE引擎架构和硬件特性,帮助开发者灵活应对多种串行协议需求,提升嵌入式开发效率。特别适合FPGA调试和物联网设备开发场景。

sun99的博客 254

spring boot配置静态资源

1.spring boot不在xml里面配置2.第一种方法最基本的是放在web应用下,系统会自动访问到。不要放在WEB-INF下,那个是访问不到的3.第二种方法最简单的是在application.properties里面配置#不要为我们工程中的资源文件建立映射 #spring.resources.add-映射=假 spring.mvc.static路径图案= / ** #这里设置要指向的路径,多...

大鸡腿的博客 868

MATLAB 与 STK 互联的两种连接方式详解

批量仿真推荐使用方法一;交互分析推荐使用方法二。可以根据具体任务灵活切换,也可以同时使用两种方式,提升建模与仿真的效率。

weixin_52370774的博客 1566

手把手保姆级|Python爬取微信公众号文章完整版,反反爬策略拉满,附可运行完整代码(永久可用)

做Python爬虫的朋友都知道,爬取微信公众号文章 绝对是爬虫领域的「香饽饽」也是「硬骨头」。一方面,微信公众号的文章是极具价值的数据源:不管是自媒体从业者做竞品分析、新媒体运营者整理干货、还是个人学习收集资料,都需要批量爬取公众号文章;另一方面,微信的反爬机制堪称全网最严苛之一 ——腾讯对微信生态的风控做到了极致,动态渲染页面、高频IP封禁、Cookie短时效失效、请求头严格校验、自动化工具秒识别、频繁请求直接拉黑,这些反爬手段让90%的爬虫新手望而却步:要么爬了几篇就被封IP,要么Cookie失效爬取中

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2624

Spring Boot配置静态资源实现文件上传在线查看

spring.mvc.static-path-pattern 代表的含义是我们应该以什么样的路径来访问静态资源,换句话说,只有静态资源满足什么样的匹配条件,Spring Boot才会处理静态资源请求。 spring.resources.static-locations 用于告诉Spring Boot应该在何处查找静态资源文件,这是一个列表性的配置,查找文件时会依赖于配置的先后顺序依次进行。 spr...

付士山哥 2801

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Spring Boot自动配置静态资源

如果进入SpringMVC的规则为/时,SpringBoot的默认静态资源的路径为: spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/ 进入规则为*.xxx 或者不指定静态文件路径时...

赵钦的博客 192

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Spring Boot模板配置和静态资源映射规则

Spring Boot模板配置与静态资源映射规则 在学习Spring Boot的过程中,静态资源的处理与模板的配置是非常重要的部分。这篇文章将引导你了解如何实施Spring Boot中的模板配置和静态资源映射规则。通过一系列步骤,你将学会如何设置和使用模板引擎以及如何正确映射静态资源。 流程概述 下面的表格展示了实现Spr...

weixin_40526870的博客 185

Spring Boot web开发(静态资源、配置视图 jsp + thymeleaf )

Spring Boot web开发(静态资源、配置视图 jsp + thymeleaf ) 1. 静态资源 web开发中的静态资源:图片,视频,css,html(不带引擎表达式),音频,js src/main/resources是存放资源文件的目录(application.yml,或者其他目录static,templates) src/main/resources/static是用于存放网...

cjy_lean的博客 367
上一篇: 年过35岁的程序员爆料:大龄程序员们的花样出路
下一篇: 阿里规定超过3张表,禁止join,为何?
androidstarjack
博客等级 码龄12年 3277粉丝 697原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值