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)目录即失效。
  • 当同时使用两种方法时,配置文件方法失效,仅代通过配置类配置的方法生效。

总结

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

相关文章

  • Mybatis-Plus批量添加或修改数据的3种方式总结

    Mybatis-Plus批量添加或修改数据的3种方式总结

    使用Mybatis-plus可以很方便的实现批量新增和批量修改,不仅比自己写foreach遍历方便很多,而且性能也更加优秀,下面这篇文章主要给大家介绍了关于Mybatis-Plus批量添加或修改数据的3种方式,需要的朋友可以参考下
    2023-05-05
  • Java优先队列的创建与使用详解

    Java优先队列的创建与使用详解

    这篇文章主要介绍了Java优先队列的创建与使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • SpringMVC九大组件之HandlerMapping详解

    SpringMVC九大组件之HandlerMapping详解

    这篇文章主要介绍了SpringMVC九大组件之HandlerMapping详解,HandlerMapping 叫做处理器映射器,它的作用就是根据当前 request 找到对应的 Handler 和 Interceptor,然后封装成一个 HandlerExecutionChain 对象返回,需要的朋友可以参考下
    2023-09-09
  • java状态机方案解决订单状态扭转示例详解

    java状态机方案解决订单状态扭转示例详解

    这篇文章主要为大家介绍了java状态机方案解决订单状态扭转示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • springboot整合EHCache的实践方案

    springboot整合EHCache的实践方案

    EhCache是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。这篇文章给大家介绍了springboot整合EHCache的实践方案,需要的朋友参考下
    2018-01-01
  • SpringBoot 启动方法run()源码解析

    SpringBoot 启动方法run()源码解析

    这篇文章主要介绍了SpringBoot 启动方法run()源码赏析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • Json转list二层解析转换代码实例

    Json转list二层解析转换代码实例

    这篇文章主要介绍了Json转list二层解析转换代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-12-12
  • mybatis-plus 如何配置逻辑删除

    mybatis-plus 如何配置逻辑删除

    这篇文章主要介绍了mybatis-plus 如何配置逻辑删除,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • Spring的RedisTemplate存储的key和value有特殊字符的处理

    Spring的RedisTemplate存储的key和value有特殊字符的处理

    这篇文章主要介绍了Spring的RedisTemplate存储的key和value有特殊字符的处理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Java创建线程池的几种方式代码示例

    Java创建线程池的几种方式代码示例

    这篇文章主要介绍了Java中创建线程池的四种方式,包括使用Executors类、ThreadPoolExecutor类、Future和Callable接口以及Spring的ThreadPoolTaskExecutor,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-01-01

最新评论