SpringBoot静态资源访问

简介: SpringBoot静态资源访问

一.静态资源目录

当前项目的类路径下只要有/static (or /public or /resources or /META-INF/resources)这些目录,这些目录都能当作静态资源目录。
刚创建的项目以resources作为根目录,其下有一个子目录static
在这里插入图片描述

接下来我们分别创建/public or /resources or /META-INF/resources这些目录:
在这里插入图片描述

这4个目录都能被当作静态资源目录,接下来我们向4个目录中加入不同的图片,来测试一下看能不能访问到静态资源:

在这里插入图片描述
测试结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到这四个目录下的资源都可以直接访问到。
访问的方式为 : 当前项目根路径/ + 静态资源名

二.静态资源访问原理

它的原理是怎么样的呢?现在我们来创建一个Controller让来来处理一个与图片名称相同的rest请求,也就是说动态请求名与静态资源同名了,看看会发生什么事;Controller代码如下:

@RestController
public class HelloController {
    

    @RequestMapping("/xiamu.jpg")
    public String hello(){
    
        return "访问请求!";
    }
}

在这里插入图片描述
可以看到再次访问/xiamu.jpg时,没有出现静态资源中的图片,而是被Controller处理了这次请求,返回了Controller中的字符串。

下面我们来看具体原理:

官方文档中提到说静态资源映射的是/**,也就说是拦截所有的请求,而动态资源也是需要看所有请求的;
那么请求一进来,先去找Controller,看看其中有没有相关的请求,,如果我们的Controller能处理就处理了;
如果不能处理,因为我们的静态资源映射的是/**,所以呢,不能处理的所有请求又都交给静态资源处理器;
然后呢,接下来看我们的静态资源能不能找到,静态资源会在上面提到的那4个目录中按照请求的名字来找;
如果静态资源能找到,那我们访问,如果静态资源也找不到,就会报错404。

如下:
在这里插入图片描述

三.静态资源访问前缀

上面我们提到了静态资源默认访问的是/**,也就是说默认访问的是无前缀的。
如果我们想给它一个前缀,在官网文档中提到说:
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,配置文件如下:
Properties:

spring.mvc.static-path-pattern=/resources/**

Yaml:

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

配置前,我们访问静态资源是当前项目+静态资源名
配置后呢,我们以后访问静态资源就是当前项目+访问前缀+静态资源名

四.改变静态资源路径

上面提到了当前的默认静态资源路径为:/static (or /public or /resources or /META-INF/resources),如果想改变这个静态资源路径,也是可以做到的,我们只需要用到spring.web.resources.static-locations配置。
例如我们把静态资源的路径改为类路径下的ysw目录,那么我们的配置如下:

spring:
  web:
    resources:
      static-locations: classpath:/ysw/

加上我们之间添加前缀的配置,总体的yaml配置文件内容为:

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

  web:
    resources:
      static-locations: classpath:/ysw/

配置后在之前的4个目录下的配置文件就都找不到了,比如public路径下的xiamu_1.jpeg:
在这里插入图片描述

当把public路径下的静态资源也就是图片移到ysw路径下,我们就能够访问了:

在这里插入图片描述
在这里插入图片描述

五.WebJars

1.WebJars简单介绍

对于日常的web开发而言,像css、js、images、font等静态资源文件管理是非常的混乱的、比如jQuery、Bootstrap、Vue.js等,可能每个框架使用的版本都不一样、一不注意就会出现版本冲突或者重复添加的问题。所以出现了一个叫做WebJars的技术。原本我们在进行web开发时,一般上都是讲静态资源文件放置在webapp目录下,在SpringBoot里面,一般是将资源文件放置在src/main/resources/static目录下。而在Servlet3中,允许我们直接访问WEB-INF/lib下的jar包中的/META-INF/resources目录资源,即WEB-INF/lib/{*.jar}/META-INF/resources下的资源可以直接访问。所以其实,WebJars也是利用了此功能,将所有前端的静态文件打包成一个jar包,这样对于引用方而言,和普通的jar引入是一样的,还能很好的对前端静态资源进行管理。WebJars可以让大家以jar包的形式来使用前端的各种框架、组件

2.访问WebJars下的静态资源

以jquery为例,展示访问WebJars的静态资源

到官网查看我们需要导入jquery的依赖:
在这里插入图片描述负责粘贴依赖,导入成功后查看其jar包:

在这里插入图片描述

浏览器访问resources/webjars/jquery/3.5.1/jquery.js(即WebJars下的静态资源):
在这里插入图片描述
目录
相关文章
|
1天前
|
JSON JavaScript 前端开发
springboot中使用knife4j访问接口文档的一系列问题
本文介绍了在Spring Boot项目中使用Knife4j访问接口文档时遇到的一系列问题及其解决方案。作者首先介绍了自己是一名自学前端的大一学生,熟悉JavaScript和Vue,正在向全栈方向发展。接着详细说明了如何解决Swagger请求404错误,包括升级Knife4j依赖、替换Swagger 2注解为Swagger 3注解以及修改配置类中的代码。最后,针对报JS错误的问题,提供了删除消息转换器代码的解决方法。希望这些内容能对读者有所帮助。
|
12天前
|
前端开发 Java 测试技术
深入剖析:Spring Boot Controller中请求处理方法的访问修饰符
【10月更文挑战第21天】 在Spring Boot应用中,Controller类中的请求处理方法通常用于处理HTTP请求。这些方法的访问修饰符(private或public)对方法的行为和可访问性有着重要影响。本文将深入探讨在Controller中使用private和public修饰符的区别,以及它们对Spring MVC框架的影响。
20 8
|
4月前
|
缓存 监控 Java
优化Spring Boot应用的数据库访问性能
优化Spring Boot应用的数据库访问性能
|
2月前
|
Java Spring
springboot静态资源目录访问,及自定义静态资源路径,index页面的访问
本文介绍了Spring Boot中静态资源的访问位置、如何进行静态资源访问测试、自定义静态资源路径和静态资源请求映射,以及如何处理自定义静态资源映射对index页面访问的影响。提供了两种解决方案:取消自定义静态资源映射或编写Controller来截获index.html的请求并重定向。
springboot静态资源目录访问,及自定义静态资源路径,index页面的访问
|
9天前
|
JavaScript 前端开发 Java
SpringBoot_web开发-webjars&静态资源映射规则
https://www.91chuli.com/ 举例:jquery前端框架
10 0
|
1月前
|
前端开发 Java
学习SpringMVC,建立连接,请求,响应 SpringBoot初学,如何前后端交互(后端版)?最简单的能通过网址访问的后端服务器代码举例
文章介绍了如何使用SpringBoot创建简单的后端服务器来处理HTTP请求,包括建立连接、编写Controller处理请求,并返回响应给前端或网址。
51 0
学习SpringMVC,建立连接,请求,响应 SpringBoot初学,如何前后端交互(后端版)?最简单的能通过网址访问的后端服务器代码举例
|
3月前
|
Java Spring
Spring Boot实战:静态资源无法访问
Spring Boot实战:静态资源无法访问
69 0
|
4月前
|
缓存 监控 Java
优化Spring Boot应用的数据库访问性能
优化Spring Boot应用的数据库访问性能
|
5月前
|
前端开发 JavaScript 网络协议
Springboot中为什么你能通过一小段代码来访问网页?
Springboot中为什么你能通过一小段代码来访问网页?
46 7
|
4月前
|
Java
自主定义访问路径-----SpringBoot自主定义静态资源访问路径的方法
自主定义访问路径-----SpringBoot自主定义静态资源访问路径的方法