springboot静态资源的配置方式

 更新时间:2024年05月20日 08:57:23   作者:龙兄你好呀  
这篇文章主要介绍了springboot静态资源的配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

springboot静态资源的配置

1. springboot默认的静态资源存放路径

静态资源的存放路径为classpath,也就是resources目录下的:

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

如下所示的CLASSPATH_RESOURCE_LOCATIONS数组存放的是静态资源的访问路径。

public class ResourceProperties {
    private static final String[] CLASSPATH_RESOURCE_LOCATIONS = new String[]{"classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/"};
    private String[] staticLocations;
    private boolean addMappings;
    private final ResourceProperties.Chain chain;
    private final ResourceProperties.Cache cache;
    ......

2.静态资源的访问顺序

默认情况下是按照存放静态资源路径的数组顺序访问的。

也即按照下面的访问顺序:

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

如上图所示,在这种情况下,访问index.html。那么访问的是- /META-INF/resources里面的index.html。

结论:springboot会查找优先级高的文件,从高到低,一直找到所需要的静态资源为止。

3.配置springboot项目首页

静态资源文件夹下的所有 index.html 被称为静态首页或者欢迎页,它们会被 /** 映射,换句话说就是,当我们访问"localhost:8080"时,都会跳转到静态首页(欢迎页)。

静态首页映射的原理是Spring Boot去扫描静态资源目录下的index.html页面,同时遵循静态资源优先级原则。

4.springboot 配置

# 默认值为    /**
spring.mvc.static-path-pattern=
# 默认值为   classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/ 
spring.resources.static-locations=这里设置要指向的路径,多个使用英文逗号隔开
  • spring.mvc.static-path-pattern指定了访问项目静态资源的url地址,默认是/**。
  • spring.resources.static-locations指定了静态资源的存放位置。

springboot静态资源目录的配置

通过配置文件配置

配置节点:spring.web.resources.static-locations

值为要配置的静态资源存放目录

如:

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

以上配置中,设置静态资源目录为src/main/resources/test/目录。

假如在test目录下存放文件test.txt,程序启动后,便能通过浏览器访问ip:port/test.txt访问文件。

通过config类配置

新建WebMvcConfig类,继承WebMvcConfigurationSupport类,并添加注解@Configuration。

重写WebMvcConfigurationSupport类的addResourceHandlers方法。

通过参数ResourceHandlerRegistry的addResourceHandler方法和addResourceLocations添加访问路径与资源目录的映射。

如:

@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/test/**").addResourceLocations("classpath:/test/");
    }
}

上述配置代码中,添加了路径/test/**对资源目录src/main/resources/test/的映射。

假如在test目录下存放文件test.txt,程序启动后,便能在浏览器访问ip:port/test/test.txt访问文件内容

区别:

  • 通过配置文件配置时,只能覆盖默认配置设置一个静态资源目录(默认目录为static),但无需添加根目录名即可访问。如“一”中访问test.txt时,并没有/test/路径,而是直接访问test.txt。
  • 通过代码配置时,可以配置多对访问路径和资源目录的映射,但访问路径需要包含根目录名。如“二”中,访问test.txt时,需要添加/test/路径。

共同点:

  • 以上两种方法,一旦选择其一进行配置,默认配置(static)目录即失效。
  • 当同时使用两种方法时,配置文件方法失效,仅代通过配置类配置的方法生效。

总结

这些仅为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java设计模式中的装饰器模式简析

    Java设计模式中的装饰器模式简析

    这篇文章主要介绍了Java设计模式中的装饰器模式简析,装饰模式能够实现动态的为对象添加功能,是从一个对象外部来给对象添加功能,通常给对象添加功能,要么直接修改对象添加相应的功能,要么派生对应的子类来扩展,抑或是使用对象组合的方式,需要的朋友可以参考下
    2023-12-12
  • SpringMVC @NotNull校验不生效的解决方案

    SpringMVC @NotNull校验不生效的解决方案

    这篇文章主要介绍了SpringMVC @NotNull校验不生效的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • 浅谈Java内存泄露

    浅谈Java内存泄露

    内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。下面我们来一起了解如何解决
    2019-05-05
  • Java中使用ForkJoinPool的实现示例

    Java中使用ForkJoinPool的实现示例

    ForkJoinPool是一个功能强大的Java类,用于处理计算密集型任务,本文主要介绍了Java中使用ForkJoinPool的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • IntelliJ IDEA 2020下载与安装教程图文详解

    IntelliJ IDEA 2020下载与安装教程图文详解

    这篇文章主要介绍了IDEA 2020下载与安装的教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • SpringBoot自定义Redis代码实践指南

    SpringBoot自定义Redis代码实践指南

    文章主要介绍了如何通过自定义RedisCacheConfiguration和RedisCacheManager来解决Spring Boot整合Redis过程中出现的序列化问题、Key命名冗余和缺乏过期限制等问题,通过这些定制,可以实现规范化的缓存存储策略,感兴趣的朋友跟随小编一起看看吧
    2025-12-12
  • nacos服务注册命名空间指定方式

    nacos服务注册命名空间指定方式

    文章介绍了Nacos服务注册命名空间的用途,以及如何创建和指定命名空间,命名空间用于隔离不同项目的服务和配置,避免冲突,通过在配置文件中指定命名空间ID,服务会注册到相应的命名空间中,这样可以更好地管理不同环境下的配置文件
    2024-12-12
  • Java将不同的List集合复制到另一个集合常见的方法

    Java将不同的List集合复制到另一个集合常见的方法

    在Java中,有时候我们需要将一个List对象的属性值复制到另一个List对象中,使得两个对象的属性值相同,这篇文章主要介绍了Java将不同的List集合复制到另一个集合常见的方法,需要的朋友可以参考下
    2024-09-09
  • Java中ModelMapper 的高级使用

    Java中ModelMapper 的高级使用

    本文主要介绍了Java中ModelMapper 的高级使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • 浅谈几种Java自定义异常处理方式

    浅谈几种Java自定义异常处理方式

    在Java中,异常是一种常见的处理机制,本文主要介绍了浅谈几种Java自定义异常处理方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05

最新评论