其他分享
首页 > 其他分享> > 4.2 静态资源访问

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