0
点赞
收藏
分享

微信扫一扫

放行静态资源

@TOC
原文链接:放行静态资源

问题描述

  • 在开发项目时,不免会用到一些如 CSS、HTML、JS 等静态资源,但是我们在配置 SpringMVC 的拦截路径时,设定的拦截路径为 “/” ,这也就意味着,我们输入地址访问静态资源时也会误认为在 Controller 层定义了相应的映射方法,但实际上我们并没有定义,只是在访问静态路径而已。
    在这里插入图片描述
  • 当访问静态资源时,报 404 错误,这是因为将 "/pages/books.html" 当作了映射路径,想从 Controller 包中找到匹配的映射方法。

    解决方案

  • 新建 SpringMvcSupport 类
    @Configuration
    public class SpringMvcSupport extends WebMvcConfigurationSupport {
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/pages/**").addResourceLocations("/pages/");
        registry.addResourceHandler("/css/**").addResourceLocations("/css/");
        registry.addResourceHandler("/js/**").addResourceLocations("/js/");
        registry.addResourceHandler("/plugins/**").addResourceLocations("/plugins/");
    }
    }
  • 该类继承 WebMvcConfigurationSupport 类,并重写 addResourceHandlers 方法,在方法体中编写放行静态资源的代码。
  • 当请求路径中遇到如 “/pages/**” 时,不会去 Controller 层寻找映射方法,而是映射到 “/pages/” 静态文件下寻找资源。
  • 因为是和表现层相关的配置类,所以需要在 SpringMvcConfig 配置类中加载该配置类,使其生效。
    @Configuration
    @ComponentScan({"qdxorigin.controller","qdxorigin.config"})
    @EnableWebMvc
    public class SpringMvcConfig {
    }
  • 我使用的是扫描包的方式,只要能让配置类生效,大家也可以选择其他方式。
  • 此时,我们重启 tomcat 后,再次访问静态资源就可以成功访问了。

在这里插入图片描述

举报

相关推荐

0 条评论