4.2 静态资源访问
作者:互联网
Spring Boot 中对于SpringMVC 的自动化配置都在WebMvcAuto Configuration 类中,在WebMvcAutoConfiguration 类中有一个静态内部类WebM vcAutoConfigurationAdapter , 实现
了WebMvcConfigurer 接口。
WebMvcConfigurer 接口中有一个方法addResourceHandlers,是用来配置静态资源过滤的。
public void addResourceHandlers(ResourceHandlerRegistry registry) { ... String staticPathPattern = this.mvcProperties.getStaticPathPattern(); if (!registry.hasMappingForPattern(staticPathPattern)) { custornizeResourceHandlerRegistration( registry.addResourceHandler(staticPathPattern) .addResourceLocations(getResourceLocations( this.resourceProperties.getStaticLocations())) .setCachePeriod(getSeconds(cachePeriod)) .setCacheControl(cacheControl)); } }
staticPathPattern 默认定义在WebMvcProperties 中,定义内容如下:
private String staticPathPattern = "/**",
this.resourceProperties.getStaticLocations() 获取到的默认静态资源位置定义在ResourceProperties
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = { ”classpath:/META-INF/resources/”,”classpath:/resources/”, ”classpath:/static/”,”classpath:/public/”};
在一个新创建的Spring Boot 项目中, 添加了spring-boot-starter-web 依赖之后, 在resources 目录下分别创建4 个目录, 4 个目录中放入同名的静态资源
此时, 在浏览器中输入“ http://localhost: 8080/p 1. png ”即可看到classpath:/META-INF /resources/目录下的p1.png,如果将classpath :/META-INF /resources/目录下的p1.png 删除,就会访问到classpath: /resources/目录下的p1.png,以此类推。
如果开发者使用IntelliJ IDEA 创建Spring Boot 项目, 就会默认创建出classpath:/static/ 目录,
静态资源一般放在这个目录下即可。
4.2.2. 自定义策略
方法1. 在自己置文件中定义
可以在appIication.properties中直接定义过滤规则和静态资源位置
spring.mvc.static-path-pattern = /static/** spring.resources.static-locations=classpath:/static/
过滤规则为 /static/**, 静态资源位置为 classpath:/static/。
重新启动项目, 在浏览器中输入“ http://localhost:8080/static/p1.png ” ,即可看到classpath :/static/目录下的资源。
方法2. Java 编码定义
只需要实现WebMvcConfigurer 接口即可, 然后实现该接口的addResourceHandlers 方法
@Configuration public class MyWebMvcConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry){ registry.addResourceHandler("/static/**") .addResourceLocations("classpath:/static/"); }
}
标签:4.2,静态,classpath,访问,static,png,目录,resources 来源: https://www.cnblogs.com/ShengLiu/p/16449268.html