spring boot中的静态资源加载处理方式
1.springboot默认资源处理
SpringBoot默认为我们提供了静态资源处理,使用WebMvcAutoConfiguration中的配置各种属性。
springboot默认加载文件的路径是:
/META-INF/resources/
/resources/
/static/
/public/
这些目录下面,当然我们也可以从springboot源码也可以看到Java代码:
privatestaticfinalString[]CLASSPATH_RESOURCE_LOCATIONS={"classpath:/META-INF/resources/","classpath:/resources/","classpath:/static/","classpath:/public/"};
上面这几个都是静态资源的映射路径,优先级顺序为:META-INF/resources>resources>static>public
所有本地的静态资源都配置在了classpath下面了,而非在webapp下了。
如果SpringBoot提供的SpingMVC不符合要求,则可以通过一个配置类(注解有@Configuration的类)加上@EnableWebMvc注解来实现完全自己控制的MVC配置。
当然,通常情况下,SpringBoot的自动配置是符合我们大多数需求的。在你既需要保留SpringBoot提供的便利,有需要增加自己的额外的配置的时候,可以定义一个配置类并继承WebMvcConfigurerAdapter,无需使用@EnableWebMvc注解。
如果@EnableWebMvc了,那么就会自动覆盖了官方给出的/static,/public,META-INF/resources,/resources等存放静态资源的目录。
2.自定义资源映射
这里我们提到这个WebMvcConfigurerAdapter这个类,重写这个类中的方法可以让我们增加额外的配置,这里我们就介绍几个常用的。
自定义资源映射addResourceHandlers
比如,我们想自定义静态资源映射目录的话,只需重写addResourceHandlers方法即可。
@Configuration publicclassSimpleWebAppConfigurerextendsWebMvcConfigurerAdapter{ @Override publicvoidaddResourceHandlers(ResourceHandlerRegistryregistry){ registry.addResourceHandler("/myresource/**").addResourceLocations("classpath:/myresource/"); super.addResourceHandlers(registry); } }
通过addResourceHandler添加映射路径,然后通过addResourceLocations来指定路径。
如果我们将/myresource/*修改为/*与默认的相同时,则会覆盖系统的配置,可以多次使用addResourceLocations添加目录,优先级先添加的高于后添加的。
3.使用外部资源
如果我们要指定一个绝对路径的文件夹(如H:/images/),则只需要使用addResourceLocations指定即可。
//可以直接使用addResourceLocations指定磁盘绝对路径,同样可以配置多个位置,注意路径写法需要加上file: registry.addResourceHandler("/myimgs/**").addResourceLocations("file:H:/myimgs/");
通过配置文件配置,上面是使用代码来定义静态资源的映射,其实SpringBoot也为我们提供了可以直接在application.properties(或.yml)中配置的方法。
配置方法如下:
#默认值为/** spring.mvc.static-path-pattern=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/ spring.resources.static-locations=这里设置要指向的路径,多个使用英文逗号隔开
使用spring.resources.static-locations可以重新定义pattern所指向的路径,支持classpath:和file:(上面已经做过说明)
注意spring.mvc.static-path-pattern只可以定义一个,目前不支持多个逗号分割的方式。
以上所述是小编给大家介绍的springboot中的静态资源加载处理方式,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!