Springboot Spring MVC应用静态资源访问配置详解

在基于SpringbootSpring MVC 应用中,静态资源访问配置有以下几种方案 :

  1. 使用缺省位置存取静态资源:classpath静态资源路径
  2. 配置特定路径的资源存取位置:classpath静态资源路径或者文件系统静态资源文件路径

本文基于Springboot + Tomcat + Spring MVC应用来看看以上几种方案如何实施 :

1. 使用缺省位置存取静态资源

缺省情况下,Springboot自动配置为Spring MVC应用指定了缺省的静态资源存放位置如下 :

  • 映射到/**

    • classpath:/META-INF/resources/
    • classpath:/resources/
    • classpath:/static/
    • classpath:/public/
  • 映射到/webjars/**

    • classpath:/META-INF/resources/webjars/

不过需要注意的是这些路径都是classpath路径,也就是说所要访问的静态资源是需要打包到发布包(jar或者war)中的。这种方式对于存在于文件系统中的其他资源文件是不可行的,因为这些文件有可能在应用启动时尚未出现(比如上传的资源文件)。

2. 配置特定路径的资源存取位置

2.1 通过配置参数

除了使用缺省静态资源路径机制,我们可以通过配置指定特定路径的资源存取位置。这就是通过如下两个参数 :

# 指定静态资源路径数组,可以是classpath路径,也可以是文件系统路径
# 不存在表示使用缺省机制,存在则使用并覆盖缺省机制
spring.resources.static-locations 

# 指定 spring.resources.static-locations 设置的静态资源路径内的资源映射到哪个URL路径
# 不存在表示使用缺省机制,存在则使用并覆盖缺省机制
spring.mvc.static-path-pattern 

对于系统缺省配置,相当于如下参数配置 :

spring :
  resources :
    static-locations: classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/
  mvc :
   static-path-pattern : /**

通过使用参数spring.resources.static-locationsspring.mvc.static-path-pattern,可以指定跟缺省机制不同的静态资源文件位置和不同的映射路径,甚至可以是文件系统内的静态资源文件路径 。 我们来看如下例子 :

spring :
  resources :
    static-locations: classpath:/MyStatic/,file:/web_starter_repo/
  mvc :
    static-path-pattern : /my/**

通过该配置,我们将发布包路径/MyStatic/和文件系统路径/web_starter_repo/都映射到了URL路径/my/**。加入系统运行在http://localhost:8080/,并且在发布包内/MyStatic/路径下存在图片p1.png,在文件系统路径/web_starter_repo/存在图片p2.png,则通过如下方式可以访问到这两个图片 :

http://localhost:8080/my/p1.png
http://localhost:8080/my/p2.png

2.2 通过程序化配置

2.1小节介绍的方式是通过配置参数设置静态资源路径和映射路径,实际上同样的效果可以通过程序化配置来实现。对于喜欢通过程序化配置方式的开发人员,可以考虑使用此方式 。对于2.1小节同样的例子,其程序化配置方式如下所示 :

// 注意:
// 1. 在 SpringBoot Web MVC 应用中,一旦使用了 @EnableWebMvc, 
// 则 WebMvcAutoConfiguration 自动配置提供的默认机制会失效,
// 会转而使用此处  @EnableWebMvc + WebMvcConfigurer 的 Spring MVC 配置。
// 2. 如果你只是想在缺省 WebMvcAutoConfiguration 机制之上做部分增量性定制,
// 这里使用 WebMvcConfigurer 但不要使用  @EnableWebMvc 。
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    /**
     * 静态资源文件映射配置
     * @param registry
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 注意 :
        // 1. addResourceHandler 参数可以有多个
        // 2. addResourceLocations 参数可以是多个,可以混合使用 file: 和 classpath : 资源路径
        // 3. addResourceLocations 参数中资源路径必须使用 / 结尾,如果没有此结尾则访问不到

        // 映射到多个静态资源路径到某个URL pattern
        registry.addResourceHandler("/my/**").addResourceLocations(
        	"classpath:/MyStatic/","file:/web_starter_repo/");
    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值