引:由于springboot架构遇到了图片的上传处理,以及之后的前台显示,所以就理解了一下其中关于静态资源的处理。
默认的静态资源处理
在每次启动springboot的项目的时候,我们都可以在控制台看见下面的语句输出:1
2
32017-10-20 16:06:50.540 INFO 36443 --- [ restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2017-10-20 16:06:50.540 INFO 36443 --- [ restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2017-10-20 16:06:50.569 INFO 36443 --- [ restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
这里面就用到了springboot默认的静态资源处理。
其中默认配置的/**映射到/static(或/public、/resources、/META-INF/resources)
其中默认配置的/webjars/**映射到classpath:/META-INF/resources/webjars/
PS:上面的 static、public、resources 等目录都在 classpath: 下面(如 src/main/resources/static)
在访问静态资源的时候,这些目录也会有一个查找顺序(优先级):这里测试过发现他们的优先级是:META/resources > resources > static > public
自定义静态资源处理
配置方式
- 通过配置文件(application.properties)配置
1
2
3
4# 默认值为 /**
spring.mvc.static-path-pattern=
# 默认值为 classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/
spring.resources.static-locations=这里设置要指向的路径,多个使用英文逗号隔开,
当我们要设置成我们的目录:/myresource/**,我们需要这样设置:1
2spring.mvc.static-path-pattern=/**
spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,classpath:/myresource/
当我们设置过映射路径时候,如果还是/**,那么默认的映射就失效了,我们需要重新把原来的路径也添加上。这里的配置路径只可以设置一个。
- 通过配置类配置
1
2
3
4
5
6
7
8
public class MyWebAppConfigurer extends WebMvcConfigurerAdapter{
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/myresource/**").addResourceLocations("file:/var/alldata/image/");
super.addResourceHandlers(registry);
}
}
可以通过这个方式设置多个配置路径。
配置内外目录
- 内部目录
做法是添加映射路径 classpath:/路径
方式见通过配置文件配置
- 外部目录
想一想如果将上传的图片继续存在jar包中会有那些问题?
- 网络数据与程序代码不能分离
- 数据传到jar里速度慢
- 数据备份麻烦
有了以上的考虑我们会想到将上传的数据放在磁盘的目录上。
做法是添加映射路径 file:/var/alldata/images
方式见通过配置类配置
总结
springboot倡导的是习惯优于配置,大部分时候我们用他默认的配置就好了,但是他也提供了方便的配置类,需要我们好好学习。