• [SpringMVC笔记] SpringMVC-12-放行静态资源访问


    SpringMVC-12-放行静态资源访问

    开发 SpringMVC 时,可能会遇到 html, css, js 等静态资源无法访问的情况

    原因是 Servlet 配置中拦截处理了所有的路径,以至于静态资源的路径被当作 Controller 中的映射路径处理,却无法找到对应的 Controller 方法,下面有两种方法可以解决

    方法1、缩小拦截的路径范围

    刚才说原因是 Servlet 配置中拦截了静态资源的路径经常处理,只要缩小拦截的范围,只处理 Controller 中的路径就可以解决问题

    对 Servlet 容器配置类中的 getServletMappings() 方法进行修改

    public class ServletContainerInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
        // 其余重写的方法省略
        @Override
        protected String[] getServletMappings() {
            return new String[]{"/books", "/users"};    // 原返回值只有 "/"
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    上面的样例只会拦截 /books 和 /users 为前缀的路径,不会再拦截其它的静态路径

    方法2、注册静态资源处理

    新增一个支持类继承自 WebMvcConfigurationSupport,重写其中的 addResourceHandlers() 方法,将静态资源的路径注册在其中,并且要使其能被 SpringMVC 的配置类扫描到

    @Configuration
    public class SpringMvcSupport extends WebMvcConfigurationSupport {
        @Override
        protected void addResourceHandlers(ResourceHandlerRegistry registry) {
            // 前为访问路径,后为资源的文件路径(末尾的 / 不能缺少),前后可以不一致
            registry.addResourceHandler("/pages/**").addResourceLocations("/html/");
            registry.addResourceHandler("/css/**").addResourceLocations("/css/");
            registry.addResourceHandler("/js/**").addResourceLocations("/js/");
            // 所有路径都按照静态资源处理(不常用)
            // registry.addResourceHandler("/**").addResourceLocations("/");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    设置 SpringMVC 配置类扫描范围

    @Configuration
    @ComponentScan({"com.mzz.controller", "com.mzz.config"})    // 刚才新增的类在 config 包下
    @EnableWebMvc
    public class SpringMvcConfig {
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    将所有路径都当作静态资源处理也是可以的,实测不会影响 Controller 中的路径,但有相同的路径时会出现冲突,比如 /books 和 /books.html 同时存在,前者可以正常访问,后者则会报错

  • 相关阅读:
    代码随想录算法训练营第45天 [ 198.打家劫舍 213.打家劫舍II 337.打家劫舍III ]
    新知实验室-基于腾讯云音视频TRTC的微信小程序实践
    安装虚拟机及centos7
    Spring IOC
    6.2. 吴恩达机器学习-Kmeans
    大数据Flink(八十五):Window TVF 支持多维数据分析
    Java8——Lambda、stream API
    低代码开发平台,来自“未来”的软件开发方案
    【vue+蓝牙扫码枪】实现扫码录入发票信息,光标自动聚焦,列表中连续录入
    【Python】封装、继承、多态(21)
  • 原文地址:https://blog.csdn.net/Cey_Tao/article/details/126440625