default-servlet-handler 无法访问html,default-servlet-handler不生效原因,springmvc静态资源拦截方案比较...

本文探讨了SpringMVC为何会拦截静态资源,并提供了两种解决方案。一种是使用DefaultServletHttpRequestHandler,另一种是通过配置ResourceHandlerRegistry来直接访问静态资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

springmvc为什么要拦截静态资源?

简单来说,为了请求的url不带类似*.action,*.do,比如http://localhost:8080/system/index.action,spring团队统一风格,而web项目配置的web.xml中,所有请求都必须走过DispatcherServlet,当然就包括了静态资源,比如http://localhost:8080/html/index.html,为了解决这个问题,spring给了两种方案,下面我们一起来讨论下两种方案的使用和区别,给新手同学们一个很自白,清晰的认识!

解决办法

说解决办法之前,咱先来聊下web项目的结构,如下图所示,大家可以看到默认webapp下有个WEB-INF文件夹,这个文件夹是提升文件安全级别的,如果不设置,是访问不到的,所以大家一般看到的资源文件(jsp,css,jss)都在WEB-INF文件夹下。

988d40968585be116477e77584ed75e4.png

解决办法1:

如果项目是这样配置的,你访问不到WEB-INF/css/下的文件,因为springmvc上下文定义了一个DefaultServletHttpRequestHandler用于处理静态文件的,他做的工作是转发给Spring默认处理器DispatcherServlet,DispatcherServlet能处理webapp下没有权限目录文件,它不能处理WEB-INF文件夹,也就是说你配置了,你能够访问html下的文件,但是你访问不了WEB-INF/css/下的文件,这可能是文件夹权限原因,根据官方文档说明,这样配置可以与解决方法2共存。下面我们来看看方法2。

解决办法2:

location:对应是根路径

mapping:映射是访问路径

通过http://localhost:8080/css/index.css就可以访问到被拦截的资源了。这种方式能解决方法1的局限情况。

总结

做个总结吧,我推荐这种方式2来解决访问静态资源拦截问题,我觉得方法1可以不写,就按方法2做配置,够用了。方法2可能配置的多一些,但是看起来比较清晰,更容易理解。谢谢童鞋们的观看,如果喜欢或有疑惑,请点赞和留言哦!我是叫练,边叫边练。

文章来源: blog.51cto.com,作者:叫练,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.51cto.com/14883474/2561085

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值