Springboot 静态资源路径配置的两种方法

本文介绍如何在SpringBoot中自定义静态资源映射,包括通过配置文件和使用@Configuration注解两种方法。可实现对项目内外部目录的自定义资源映射。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考学习:
http://www.zslin.com/web/article/detail/23
http://blog.youkuaiyun.com/catoop/article/details/50501706

诉求:Spring Boot 默认为我们提供了静态资源处理,而有时我们需要自定义资源映射,可定义项目内部目录,也可定义外部目录。此处举例外部目录映射配置。

方法一:通过配置文件配置

在Springboot中可以直接在配置文件中覆盖默认的静态资源路径的配置信息:
作用在application.yml或application.properties
首先系统有默认配置,其中默认配置的 /** 映射到 /static (或/public、/resources、/META-INF/resources)

默认大概意思如下所示(为了和下面进行对比):
spring:
    mvc:
        static-path-pattern: /**
    resources:
         static-locations: classpath:/META-INF/resources/,classpath:/resources/, classpath:/static/, classpath:/public/

定义 static-path-pattern: /** ,会覆盖默认配置,需要在static-locations添加默认的内部目录和自定义目录,应为

添加自定义外部目录并覆盖默认
spring:
    mvc:
        static-path-pattern: /**
    http:
        multipart:
            location: F://preview
    resources:
        static-locations: classpath:/META-INF/resources/,classpath:/resources/, classpath:/static/, classpath:/public/, file:${spring.http.multipart.location}

如果定义 static-path-pattern: /we/**,则访问static-locations里目录时都应加上”/we/”
spring.mvc.static-path-pattern 只可以定义一个,目前不支持多个逗号分割的方式,

方法二:通过@Configuration配置
@Configuration
public class ApplicationConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        /**
         * 如果我们将/xxxx/** 修改为 /** 与默认的相同时,则会覆盖系统的配置,可以多次使用 addResourceLocations 添加目录,
         * 优先级先添加的高于后添加的。
         *
         * 如果是/xxxx/** 引用静态资源 加不加/xxxx/ 均可,因为系统默认配置(/**)也会作用
         * 如果是/** 会覆盖默认配置,应用addResourceLocations添加所有会用到的静态资源地址,系统默认不会再起作用
         */
        registry.addResourceHandler("/**")
                .addResourceLocations("classpath:/META-INF/resources/")
                .addResourceLocations("classpath:/resources/")
                .addResourceLocations("classpath:/static/")
                .addResourceLocations("classpath:/public/");
        registry.addResourceHandler("/we/**").addResourceLocations("file:F:/preview/");
        super.addResourceHandlers(registry);
    }
}

此方法直接写在代码内,同方法一一样,可以覆盖默认配置,添加自定义映射配置,也可以只添加自定义映射配置,不覆盖默认配置。方法二比之方法一更为灵活。

### Spring Boot 中自定义静态资源路径配置方法 在 Spring Boot 应用程序中,默认情况下,静态资源会被放置在 `src/main/resources/static` 或其他预设目录下。然而,在某些场景下可能需要更改默认的静态资源路径以满足特定需求。以下是实现这一目标的具体方式。 #### 方法一:通过 application.properties 文件配置 可以通过修改 `application.properties` 文件来指定新的静态资源路径。具体来说,可以设置属性 `spring.web.resources.static-locations` 来覆盖默认的静态资源路径: ```properties spring.web.resources.static-locations=classpath:/custom-static/,file:/var/www/html/ ``` 上述配置表示将静态资源加载的位置更改为两个地方:一个是位于类路径下的 `/custom-static/` 目录;另一个是服务器上的绝对路径 `/var/www/html/`[^2]。 如果希望支持多个自定义路径,则可以用逗号分隔不同的路径条目。注意这里的路径前缀如果是 `classpath:` 则代表从类路径读取文件,而如果是 `file:` 前缀则指向本地磁盘的实际文件夹。 #### 方法二:通过 Java 配置类定制化 除了使用 properties 文件外,还可以借助 WebMvcConfigurer 接口扩展功能来自定义静态资源配置逻辑。下面是一个示例代码片段展示如何完成此操作: ```java import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class StaticResourceConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { // 添加对外暴露的URL映射以及对应的物理存储位置 registry.addResourceHandler("/myfiles/**") .addResourceLocations("file:D:/uploads/"); // 可继续添加更多规则... } } ``` 在此例子中,当客户端请求形如 `/myfiles/image.png` 的 URL 时,实际是从 D:\uploads\image.png 提供服务的内容[^3]。 以上两种途径都可以有效改变 Spring Boot 对于前端资产(Assets)定位的行为模式,从而适应更加灵活多变的应用部署环境。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值