springboot静态资源的配置方式
作者:龙兄你好呀
springboot静态资源的配置
1. springboot默认的静态资源存放路径
静态资源的存放路径为classpath,也就是resources目录下的:
- /META-INF/resources
- /resources
- /static
- /public
如下所示的CLASSPATH_RESOURCE_LOCATIONS数组存放的是静态资源的访问路径。
public class ResourceProperties { private static final String[] CLASSPATH_RESOURCE_LOCATIONS = new String[]{"classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/"}; private String[] staticLocations; private boolean addMappings; private final ResourceProperties.Chain chain; private final ResourceProperties.Cache cache; ......
2.静态资源的访问顺序
默认情况下是按照存放静态资源路径的数组顺序访问的。
也即按照下面的访问顺序:
- /META-INF/resources
- /resources
- /static
- /public
如上图所示,在这种情况下,访问index.html。那么访问的是- /META-INF/resources里面的index.html。
结论:springboot会查找优先级高的文件,从高到低,一直找到所需要的静态资源为止。
3.配置springboot项目首页
静态资源文件夹下的所有 index.html 被称为静态首页或者欢迎页,它们会被 /** 映射,换句话说就是,当我们访问"localhost:8080"时,都会跳转到静态首页(欢迎页)。
静态首页映射的原理是Spring Boot去扫描静态资源目录下的index.html页面,同时遵循静态资源优先级原则。
4.springboot 配置
# 默认值为 /** spring.mvc.static-path-pattern= # 默认值为 classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/ spring.resources.static-locations=这里设置要指向的路径,多个使用英文逗号隔开
- spring.mvc.static-path-pattern指定了访问项目静态资源的url地址,默认是/**。
- spring.resources.static-locations指定了静态资源的存放位置。
springboot静态资源目录的配置
通过配置文件配置
配置节点:spring.web.resources.static-locations
值为要配置的静态资源存放目录
如:
spring: web: resources: static-locations: classpath:/test/
以上配置中,设置静态资源目录为src/main/resources/test/目录。
假如在test目录下存放文件test.txt,程序启动后,便能通过浏览器访问ip:port/test.txt访问文件。
通过config类配置
新建WebMvcConfig类,继承WebMvcConfigurationSupport类,并添加注解@Configuration。
重写WebMvcConfigurationSupport类的addResourceHandlers方法。
通过参数ResourceHandlerRegistry的addResourceHandler方法和addResourceLocations添加访问路径与资源目录的映射。
如:
@Configuration public class WebMvcConfig extends WebMvcConfigurationSupport { @Override protected void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/test/**").addResourceLocations("classpath:/test/"); } }
上述配置代码中,添加了路径/test/**对资源目录src/main/resources/test/的映射。
假如在test目录下存放文件test.txt,程序启动后,便能在浏览器访问ip:port/test/test.txt访问文件内容
区别:
- 通过配置文件配置时,只能覆盖默认配置设置一个静态资源目录(默认目录为static),但无需添加根目录名即可访问。如“一”中访问test.txt时,并没有/test/路径,而是直接访问test.txt。
- 通过代码配置时,可以配置多对访问路径和资源目录的映射,但访问路径需要包含根目录名。如“二”中,访问test.txt时,需要添加/test/路径。
共同点:
- 以上两种方法,一旦选择其一进行配置,默认配置(static)目录即失效。
- 当同时使用两种方法时,配置文件方法失效,仅代通过配置类配置的方法生效。
总结
这些仅为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。