静态资源访问

类路径的根路径 /

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

答:简单来说,可以认为 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. 有 “ * ” 通配符的优先级高于有 “ ** ” 的。

静态资源目录原理分析.

原文地址:http://www.cnblogs.com/rnny/p/16882285.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性