Spring Boot 配置静态资源处理

  • 先讲几点有关嵌入式 Tomcat 运行的事项
    • request.getSession().getServletContext().getRealPath(“/”),这个不用多说了,总之很重要,先将其简称为 docBase,即 “文档根目录”
    • 当项目中不存在 src/main/webapp 目录时,docBase 为C盘临时目录,例如 C:\Users\Administrator\AppData\Local\Temp\tomcat-docbase.2872246570823772896.8080\
    • 当项目中存在 src/main/webapp 目录时
      • 如果该目录存在于 Maven 项目父模块中,则 docBase 为父模块的 src/main/webapp
      • 如果 Maven 项目父模块缺少该目录,此时,即使子模块存在 src/main/webapp 目录,也视为不见,docBase 为C盘临时目录

综上,如果我们想要通过 “文档根目录” 来定位到某些资源的话,首先要保证存在 src/main/webapp 目录,否则,建议直接定位到 classpath 下的资源(即 src/main/resource 目录下的资源),具体配置如下


1.不存在 @EnableWebMVC

  • Spring Boot 的 @EnableAutoConfiguration 会触发自动配置类 WebMvcAutoConfiguration,该类配置了一些默认的静态资源映射
    • 自动映射 localhost:8080/** 为
      • classpath:/resources/
      • classpath:/static/
      • classpath:/public/
      • classpath:/META-INF/resources/
    • 自动映射 localhost:8080/webjars/** 为
      • classpath:/META-INF/resources/webjars/

此时,我们不需要多作些什么,只需要将静态资源放入 src/main/resources 目录下的 resources、static 或 public 文件夹下,可直接通过 url 定位相关资源,例如 localhost:8080/index.html 定位到 src/main/resources/static/index.html

但是,如果使用了以下的自定义配置,则以上默认配置统统无效

@Configuration
public class GoWebMvcConfigurerAdapter extends WebMvcConfigurerAdapter {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        //配置静态资源处理
        registry.addResourceHandler("/**")
                .addResourceLocations("classpath:/resources2/")
                .addResourceLocations("classpath:/static2/")
                .addResourceLocations("classpath:/public2/")
                .addResourceLocations("classpath:/META-INF/resources2/");
    }

}

2.如果存在 @EnableWebMVC

如果使用了 @EnableWebMvc,那么自动配置类 WebMvcAutoConfiguration 会失效,因此官方默认的 /static, /public, META-INF/resources, /resources 都不复存在

这种情况下,我们只能手动添加以下配置,切记,如果不添加 classpath 前缀,则定位到 “文档根目录”(一般是 src/main/webapp 目录)下的资源,此时,我们可以将静态资源放入 src/main/webapp 目录下的 resources、static 或 public 文件夹下,然后通过 url 直接定位相关资源,例如 localhost:8080/index.html 定位到 src/main/webapp/static/index.html

@Configuration
public class GoWebMvcConfigurerAdapter extends WebMvcConfigurerAdapter {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        //配置静态资源处理
        registry.addResourceHandler("/**")
                .addResourceLocations("resources/")
                .addResourceLocations("static/")
                .addResourceLocations("public/")
                .addResourceLocations("META-INF/resources/");
    }

//    @Override
//    public void addResourceHandlers(ResourceHandlerRegistry registry) {
//        //配置静态资源处理
//        registry.addResourceHandler("/**")
//                .addResourceLocations("classpath:/resources/")
//                .addResourceLocations("classpath:/static/")
//                .addResourceLocations("classpath:/public/")
//                .addResourceLocations("classpath:/META-INF/resources/");
//    }

}

你可能感兴趣的:(java,spring-boot)