Forward & Redirect

博客对比了HttpServletResponse.sendRedirect()和RequestDispatcher.forward()方法。sendRedirect会将新URL发给客户端,产生新请求,使request attributes对象失效,用绝对路径;forward在容器内进行,不发URL给客户端,不产生新请求,attributes对象不失效,用相对路径,二者目的是共享HttpServletRequst对象。

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

1、两者的目的是为了实现HttpServletRequst对象的共享

2、HttpServletResponse.sendRedirect(),容器将把新的URL发送给客户端,客户端将会发生一次新的请求,这样所有的放在HttpServletRequest中的request attributes对象将会失效。

figs/jstr2_0205.gif

而RequestDispatcher.forward()是在容器内发生的,并没有把URL发送给客户端,没有生成一次新的请求,因此原来所有放在HttpServletRequest中的request attributes对象将不会失效。

figs/jstr2_0208.gif

3、URL不同

Redirect因为是客户端,因此是绝对的路径;

String contextPath = req.getContextPath( );
String redirectStr = contextPath + "/result.jsp?username=foo&password=bar";
resp.sendRedirect(resp.encodeRedirectURL(redirectStr));

而Forward因为是在容器内,因此是相对的路径。

String forwardStr = "/result.jsp?username=foo&password=bar";
RequestDispatcher dispatcher = req.getRequestDispatcher(forwardStr);
dispatcher.forward(req, resp);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值