【SpringMVC】记录一次Bug——mvc:resources设置静态资源不过滤导致WEB-INF下的资源无法访问

SpringMVC 记录一次bug

其实都是小毛病,但是为了以后再出毛病,记录一下:

mvc:resources设置静态资源不过滤问题

SpringMVC中配置的核心Servlet------DispatcherServlet,为了可以拦截到所有的请求(JSP页面除外),并将这些请求发送给对应的处理器(Handler)处理,我们将mapping部分的url-pattern设置为<url-pattern>/</url-pattern>,这样就可以匹配到根目录下的所有资源,具体原因可以去看这篇文章:彻底理解servlet匹配顺序 / 和 /*的区别_default-wrapper-CSDN博客,为了可以访问到静态资源,我们需要通过以下配置去访问到我们的静态资源:

xml 复制代码
<!-- 设置静态资源不过滤 -->
<mvc:resources location="/css/" mapping="/css/**"/>  <!-- 样式 -->
<mvc:resources location="/img/" mapping="/img/**"/>  <!-- 图片 -->
<mvc:resources location="/js/" mapping="/js/**"/>  <!-- javascript -->

但是如果配置了这个,我就没法访问到WEB-INF下面的文件了,很奇怪,按理说这段配置应该是不影响程序内部对WEB-INF下资源的访问的,于是我去搜了一下,还真的有和我类似的情况,原来是没有添加SpringMVC的注解支持:<mvc:annotation-driven/>,那么为什么会这样呢??这个涉及到Spring的源码,我搜了几篇博客,大概的意思就是说:

在不配置<mvc:annotation-driven/>的情况下配置 <mvc:resources>标签的话,我们的所有静态资源,包括JSP都被SpringMVC注册为静态资源交给ResourceHttpRequestHandler处理,而不是交给DispatcherServlet处理,那么就导致了JSP被当作静态页面,那我又没有在 <mvc:resources>中配置静态资源的具体路径,那自然就找不到位置了。

相关推荐
xcl092519 分钟前
商超智能运营实战:数据驱动提升门店效率与体验指南
java·mfc·宠物
Flynt2 小时前
OpenJDK禁AI代码半年了,现在执行得怎么样?答案是:全靠自觉
java·开源·ai编程
古法安卓7 小时前
Android-日志系统源码解析
android·java·android studio
小夏coding9 小时前
从"一把梭"到"精妙拆解" —— 滑动窗口计时框架的设计演进
java·后端
MacroZheng10 小时前
同事问我:"Claude Code经常失忆,不怕它把项目搞炸?",我:"怕,三个Markdown文件给它装个永不丢失的外置大脑!"
java·人工智能·后端
十年Java程序媛11 小时前
深度实战:JDK21 虚拟线程 + HikariCP 生产正确配比、坑点、监控全套
java·spring boot
xiaoqiMikko11 小时前
有人在搜一个不存在的 Tomcat 版本
java·tomcat
用户31268748772015 小时前
ConcurrentHashMap 怎么保证线程安全?从分段锁到 CAS+synchronized
java
vipxieliang15 小时前
ValidX vs Apache Commons Validator:功能与性能对比
java·spring boot
SimonKing15 小时前
升级Spring Boot 4后,从 Jackson 2 到 3,到底有哪些变化
java·后端·程序员