[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"};    // 原返回值只有 "/"
    }
}

上面的样例只会拦截 /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("/");
    }
}

设置 SpringMVC 配置类扫描范围

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

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值