Servlet 使用getRequestDispatcher进行请求转发页面未跳转 后台也未报错的问题的解决方法

本文探讨了在Servlet中使用getRequestDispatcher进行请求转发时遇到的问题。由于Servlet的URL映射不当导致前端页面无法正常显示。文章详细分析了问题原因,并提供了解决方案,同时解释了getPathInfo和ServletPath的工作原理。

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

问题描述:

在Servlet中使用getRequestDispatcher进行请求转发的时候,前端页面空白未出现报错,后台也没有报错。

原因分析:

getRequestDispatcher的路径没有问题 也存在相应的jsp页面 前端没有出现错误 后台也没有报错 非常困扰 后面发现是我的Servlet拦截的url有问题

起初我是想搭一个MVC框架 然后想要使用request.getPathInfo截取请求路径 然后根据这个路径转发到相应的视图,但是getPathInfo这个方法返回的是相对于请求的serlvet的url的路径,因此如果servlet的路径是/的话那么它返回的便是空,因此我想当然的就将servlet的拦截url设置成了/* 认为/*会匹配诸如/login/user…等等这样的路径 却忘记也会拦截*.jsp,*.html 此类路径 因此我的jsp页面被拦截了自然显示不出来

解决方法 :

很简单 将Servlet的url-Pattern设置为/ 不带通配符的这种即可


ps:

关于PathInfo和ServletPath

情况1(path mapping):
@WebServlet("/test1/*")
Request : http://localhost:8080/myapp/test1/first.html
ServletPath : /test1
PathInfo : /first.html

情况2(exact match):
@WebServlet("/test2/t2")
Request : http://localhost:8080/myapp/test2/t2
ServletPath : /test2/t2
PathInfo : null

情况3(extension mapping):
@WebServlet("*.do")
Request : http://localhost:8080/myapp/test3/t3.do
ServletPath : /test3/t3.do
PathInfo : null

情况4(default match):
@WebServlet("/")
Request : http://localhost:8080/myapp/
ServletPath : /
PathInfo : null
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值