springboot中的静态资源规则~

简介: springboot中的静态资源规则~

静态资源处理:

默认的静态资源路径为

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

如果我们将静态资源放置上述四种路径处,那么可以通过项目根路径/静态资源名称的方式访问到,否则会访问不到

举例:

如下所示,我在resources目录下创建了4个不同的目录,它们均可以作为默认的资源路径,并在每个路径下存放了静态资源

客户端,如果我们想访问上述的静态资源,那么只需要通过项目根路径/静态资源名称的形式,如下所示:

那么springboot为什么会知道我们是想找静态资源而不是请求呢?

为了解决这个疑惑,我们可通过创建一个控制器方法,其访问路径与静态资源的访问路径相同,如下所示:

package com.example.demo.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class helloController {
    @RequestMapping("/微信图片_20230716223013.jpg")
    public String showMessage(){
        return "aaa";
    }
}

浏览器访问显示如下所示:

我们可以看出,当静态资源名称和控制器方法相同的情况下,springboot会访问对应的控制器方法而不是静态资源,这其实是与springboot静态映射的原理有关,当客户端发送一个请求,springboot会先去找Controller看是否能进行处理,只有当Controller不能处理的请求才会交给静态资源处理器,如果静态资源处理器也无法处理,则会产生404错误


为了避免发生上述这种当静态资源名称和控制器访问路径名冲突导致静态资源无法正常加载,我们通常需要给静态资源加前缀,例如将静态资源访问路径设置为"/static/**",这样Spring Boot就会将该路径下的请求映射到静态资源上,而不会与其他请求冲突。


举例:


当我们在application.yaml中将静态资源的访问路径设置为如下所示,则表明我们在访问静态资源时,都要在静态资源名称的前面加上/res

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

举例:

未加前缀前的访问路径如下所示:

加前缀之后的访问路径如下所示:

如果我们不想将静态资源放置上述路径下,那么我们可以在application.yaml文件中进行配置,如下所示

spring:
  resources:
    static-locations: classpath:/abc/

有了上述配置之后,则会导致我们在默认路径下的所有资源都不会被访问到

只有abc目录下的静态资源会被访问到,如下所示:

由此说明,一旦我们配置了外部静态资源文件夹,那么默认的静态资源文件夹就无法被访问了

相关文章
|
4月前
|
JavaScript 前端开发 Java
SpringBoot之静态资源规则与定制化
SpringBoot之静态资源规则与定制化
|
4月前
|
移动开发 Java HTML5
Springboot web静态资源配置
Springboot web静态资源配置
57 0
|
5月前
|
XML Java 数据格式
SpringBoot中yaml格式、语法规则及数据读取方式(3种)
SpringBoot中yaml格式、语法规则及数据读取方式(3种)
214 0
|
5月前
|
前端开发 JavaScript Java
Springboot 使用thymeleaf 服务器无法加载resources中的静态资源异常处理
Springboot 使用thymeleaf 服务器无法加载resources中的静态资源异常处理
185 0
|
4月前
|
Java
springboot WebMvcConfigurer详解自定义配置请求静态资源
springboot WebMvcConfigurer详解自定义配置请求静态资源
|
5月前
|
Java
Springboot配置静态资源
Springboot配置静态资源
20 1
|
5月前
|
缓存 前端开发 JavaScript
SpringBoot中静态资源映射处理
SpringBoot中静态资源映射处理
44 0
|
8月前
|
XML 前端开发 JavaScript
SpringBoot中静态资源访问
SpringBoot中静态资源访问
122 0
|
9月前
|
Java Spring
Spring Boot入门(十三) 之 thymeleaf一些常用语法规则
Spring Boot入门(十三) 之 thymeleaf一些常用语法规则
|
21天前
|
Java Linux
Springboot 解决linux服务器下获取不到项目Resources下资源
Springboot 解决linux服务器下获取不到项目Resources下资源