Spring Boot 配置静态资源处理

来源:互联网 发布:163 imap 端口 编辑:程序博客网 时间:2024/06/07 08:50
  • 先讲几点有关嵌入式 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 目录下的资源),具体配置如下

不存在 @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
  • 但是,如果使用了以下的自定义配置,则以上默认配置统统无效
@Configurationpublic 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/");    }}

如果存在 @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
@Configurationpublic 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/");//    }}
原创粉丝点击