SpringBoot对静态资源的访问

Springboot框架提供了默认的静态资源访问目录,如果你的静态资源是存在这些目录下的话,那么不用过多的配置,直接访问即可

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

那如果你的静态资源不想放在这些提供好的文件夹下,该如何访问呢?比如我想把图片放到一个我新创建的pic文件夹下,那么我就需要进行一些小小的配置才可以访问

1.静态资源匹配(虚拟路径)spring.mvc.static-path-pattern

在properties配置文件中是spring.mvc.static-path-pattern来表示的,它代表该以什么样的请求来匹配访问静态资源,比如一张图片名为1.jpg,默认放在static目录下,那么直接以http://localhost:8080/1.jpg进行访问就可以了。如果我不想以这样的方式进行访问,我想以http://localhost:8080/pic/1.jpg进行访问只需要下列配置

这里表示只有静态资源的访问路径为/pic/**时,才会处理请求
spring.mvc.static-path-pattern = /pic/** 

2.静态资源的位置spring.resources.static-locations

这是一个列表性的配置,用于说明静态资源文件的查找路径,可配置多个路径以逗号隔开,查找文件是会依赖于配置的先后顺序依次进行,默认的官方配置如下:

spring.resources.static-locations = classpath:/static,classpath:/public,classpath:/resources,classpath:/META-INF/resources

如果你想把图片等静态资源放在resources的pic目录下,那么就得在这里进行配置,之后就会从这里查找了

spring.resources.static-locations = classpath:/pic/

如果你的图片等资源不在项目中,你把它们存到硬盘中了,那么也可以进行配置,不过配置路径时需要以file:进行开头

spring.resources.static-locations = file:D:/Data/图片/

注意:如果我们自定义了该配置,上文所说的Springboot默认提供的静态资源访问目录就失效了
使用注解实现静态资源的目录的配置

使用注解实现静态资源目录的配置的好处是可以配置多个虚拟路径,每个虚拟路径都可以对应一个服务器的路径  
下面的例子就是/pic/**=file:d/data...       /static/**=classpath:/public/
//一般不推荐使用这种方式,虽然可以配置多个虚拟路径,但是由于继承WebMvcConfigurationSupport会导致yaml文件的部分MVC配置失效(本人的全局jackson时间格式化就失效了)参考https://www.nhooo.com/note/qa3wc4.html
@Configuration
public class MvcBean extends WebMvcConfigurationSupport {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/pic/**").addResourceLocations("file:d:/data/图片/","classpath:/pic/");
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/public/");
        super.addResourceHandlers(registry);
    }
}

tips:另外如果是老项目的话,TomCat服务器也可以实现直接访问服务器硬盘上的文件

只需要在tomcat的server.xml中的<host></host>标签中添加Context标签即可
tomcat servlet.xml中 Context标签个参数含义

<Context path="/map" docBase="D:/1682" reloadable="true" debug="0" crossContext="true"/>
path 指出你的访问路径
docBase指出你的存放路径
debug 为设定debug的等级0提供最少的信息,9提供最多的信息
reloadable=true时 当web.xml或者class有改动的时候都会自动重新加载不需要从新启动服务
crosscontext="true"表示配置的不同context共享一个session
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值