首页 > 其他分享 >03-SpringBoot 静态资源访问

03-SpringBoot 静态资源访问

时间:2022-11-11 22:44:05浏览次数:68  
标签:03 SpringBoot 静态 路径 classpath static resources 资源

静态资源访问

类路径的根路径 /

拓展知识:类路径的根路径 / 是什么?

答:简单来说,可以认为 image-20221111103322381 文件夹所代表的路径就是类路径的根路径。

image-20221111095401335.

静态资源目录(路径)

基本介绍

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.

以上是SpringBoot官网对静态资源目录的解释.

默认情况,只要静态资源放在类路径下的 /static/public/resources/META-INF/resources 文件夹。就可以通过:当前项目根路径/ + 静态资源名 的方式来访问。

eg. http://localhost:8080/beans.xml

原理分析

原理:默认静态映射 /**

解释:请求进来后,先去找对应的 Controller 处理,如果有对应的 Controller 则直接处理(不会再将请求交给静态资源处理器处理);

如果没有对应的 Controller 处理请求,则由静态资源处理器处理请求,静态资源处理器处理请求的操作很简单,就是去找有没有相对应的静态资源,如果有,返回静态资源。没有就响应 404 页面。

案例:假如有一个处理 /bean.xml 请求的 Controller 以及有一个 bean.xml 的静态资源,则 http://localhost:8080/beans.xml 返回的结果是什么?

@GetMapping("/beans.xml")
public String getBeansXml() {
    return "getBeansXml()";
}

答:返回 getBeansXml() 字符串,而不是 bean.xml 文件的内容。

解析:按照通配符规则,越详细的优先级越高,所有优先匹配 /bean.xmlController,而不是匹配 /** 的静态资源处理器。

修改静态资源存放路径

改变默认的静态资源存放目录(路径)

默认是 /static/public/resources/META-INF/resources 文件夹。

spring:
  resources:
    static-locations: [classpath:/rnny/]

注意:

  1. static-locations 的值需要用数组写法。
  2. 注意数组的每个元素的书写格式。classpath:/{dir1}/{dir2}/.../
    • classpath: 必须要写,且 :/之间没有空格
    • 最后要以 / 结尾。
  3. 修改之后的路径依旧包括 /META-INF/resources 文件夹(具体原因不详!)。

为什么?底层源码就是这么写的。

private static final String[] CLASSPATH_RESOURCE_LOCATIONS = { "classpath:/META-INF/resources/","classpath:/resources/", "classpath:/static/", "classpath:/public/" };

静态资源访问前缀

默认无访问前缀。

默认静态资源访问路径为:当前项目 + 静态资源名。eg. http://localhost:8080/静态资源名

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

修改之后的静态资源访问路径:当前项目 + static-path-pattern + 静态资源名

eg. http://localhost:8080/res/静态资源名

webjar

webjar实际用处不是很大,但是对于路径的理解还是有点帮助的。

默认自动映射 /webjars/**

https://www.webjars.org/

<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>jquery</artifactId>
    <version>3.5.1</version>
</dependency>

访问地址:http://localhost:8080/webjars/jquery/3.5.1/jquery.js 后面地址要按照依赖里面的包路径

image-20221111113535746.

欢迎页支持

静态资源路径下,index.html

  • 可以配置静态资源路径
  • 但是不可以配置静态资源的访问前缀。否则导致 index.html 不能被默认访问。
spring:
#  mvc:
#    static-path-pattern: /res/**   这个会导致 welcome page 功能失效
  resources:
    static-locations: [classpath:/hehe/]

提示:Controller 能处理 /index

自定义 Favicon

favicon.ico 放在静态资源目录下即可。

spring:
#  mvc:
#    static-path-pattern: /res/**   这个会导致 Favicon 功能失效

通配符

通配符匹配规则如下:

  1. 符号 “ * ” 匹配任意字符,符号 “ ** ” 匹配任意路径,符号 “ ? ” 匹配单个字符。
  2. 没有通配符的优先级高于有通配符的,比如 /user/add.json/user/*.json 优先匹配。
  3. 有 “ * ” 通配符的优先级高于有 “ ** ” 的。

静态资源目录原理分析.

标签:03,SpringBoot,静态,路径,classpath,static,resources,资源
From: https://www.cnblogs.com/rnny/p/16882285.html

相关文章

  • SpringBoot整合Thymeleaf(十三)
    二八佳人体似酥,腰间仗剑斩愚夫。虽然不见人头落,暗里教君骨髓枯。上一章简单介绍了SpringBoot整合Velocity(十二)如果没有看过,​​请观看上一章​​一.Thymeleaf的介绍Thym......
  • 【框架】SpringBoot
    SpringBoot基础基本工程快速建立SpringBoot工程(SpringIntailizr)工程结构application.properties配置文件templates放web页面static静态资源css、js文件......
  • Java静态代理设计模式模式(多线程Runnable)
    静态代理设计模式,就是代理对象来帮你忙前忙后,你负责出席一下就好了。需要:1.实现相同的接口2.真实角色3.代理角色,里面有一个成员是接口对象(实际上是真实角色----接口实......
  • scrapy框架运行报错:AttributeError: module 'OpenSSL.SSL' has no attribute 'SSLv3_M
    从网上下了爬虫代码,提示:AttributeError:module‘OpenSSL.SSL’hasnoattribute‘SSLv3_METHOD’网上有很多其他找不到模块的解决方法,尝试了都没有用。最后在bing搜......
  • [FastAPI-03]Form表单
    1.安装依赖pipinstall-ihttp://pypi.douban.com/simple/--trusted-hostpypi.douban.compython-multipart2.表单程序.├──post_test_1.py└──templates......
  • 【TS】1103- 30个小知识让你更清楚TypeScript
    TypeScript是Microsoft开发的JavaScript的开源超集,用于在不破坏现有程序的情况下添加附加功能。由于其独特的优势,例如,静态类型和许多速记符号,TypeScript现在被前端和......
  • py-03
    一、用户输入和while循环1、input()函数input()让程序暂停运行,等待用户输入一些文本。获取用户输入后,Python将其存储在一个变量中,以方便你使用 使用int()来获取数......
  • AIR32F103(五) FreeRTOSv202112核心库的集成和示例代码
    目录AIR32F103(一)合宙AIR32F103CBT6开发板上手报告AIR32F103(二)Linux环境和LibOpenCM3项目模板AIR32F103(三)Linux环境基于标准外设库的项目模板AIR32F103(四)2......
  • 在IDEA中新建一个SpringBoot项目(两种方法)
    方法一、使用Springinitializr快速构建1.首先创建一个新的project,点击【File】->【New】->【Project】(如果是最开始进入idea软件界面,就是点击【CreateNewProject】)......
  • GB2312、GB18030、GBK、UNICODE、B…
    1, 常用字符集分类ASCII及其扩展字符集作用:表语英语及西欧语言。位数:ASCII是用7位表示的,能表示128个字符;其扩展使用8位表示,表示256个字符。范围:ASCII从00到7F,扩展从00到FF。......