Bootstrap

SpringBoot配置静态资源访问办法

    SpringBoot如果是web项目,其实默认静态资源是放在resources/static/目录下的。这个静态资源其实隐含了一个配置就是spring.mvc.static-path-pattern: /**,如下所示,我们在application.yml中进行配置,还在敲spring.mvc.static的时候,yml自动提示就已经出来了,而且给了默认值:/**。

    这种方式适合传统的前后端不分离的时候的java web项目,里面的静态资源比如图片,样式,脚本等等可以放在这里,页面加载的时候直接挂在页面上。

    还有一种也是通过配置静态资源的方式,就是设置resources.static-locations,这个根据springboot版本不同,有的叫spring.resources.static-locations,有的叫spring.web.resources.static-locations。需要注意一下。

    这个配置也有一个地方需要注意,位置指定的是文件系统的一个路径,这个路径后面需要带上文件分隔符。

spring:
  web:
    resources:
      static-locations:
        - file:e:/tmp/

   我们系统路径下的文件:

 

    启动项目,我们通过浏览器访问 http://localhost:8090/luffy03.webp 

    这种配置方式,需要注意的是,static-locations配置的是一个file:e:/tmp/值,表示文件系统下的e:/tmp/目录,这个目录路径一定要跟上一个文件分隔符"/"。

    这种方式也 有一定的风险,就是相当于把文件系统上的这个目录暴露出去了,只要用户知道路径,就可以套出这个目录下的其他文件。

    这个配置的实现方式,还可以通过代码来实现,就是做一个配置,实现WebMvcConfigure接口。

package com.xxx.hello.config;

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 SpringMvcConfigurer implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/file/**")
                .addResourceLocations("file:e:/tmp/");
    }
}

    这里配置就多了一个路径前缀,我们通过/file/luffy03.webp就能访问e:/tmp/luffy3.webp文件:

 

    这里,通过动态图,我们访问http://localhost:8090/luffy03.webp是访问不了的,这里配置了file前缀,所以,加上file前缀,我们就访问成功了。 

    今天其实讲了两种配置方式来让浏览器访问系统上的静态资源,都是通过浏览器以文件路径的形式访问了文件,第一种无需任何配置,直接把静态资源放在resources/static目录下即可。后面两种方式其实是一样的,就是配置一个文件目录作为静态资源访问的位置,后面可以拼接路径的方式访问系统资源。

;