为了账号安全,请及时绑定邮箱和手机立即绑定

forward,include,redirect学习

标签:
Java

forward:
有两个接口带有RequestDispatcher getRequestDispatcher(String path)方法
Java代码
javax.servlet.ServletContext.getRequestDispatcher(String path)
javax.servlet.ServletRequest.getRequestDispatcher(String path)

javax.servlet.RequestDispatcher有两个方法:
Java代码
void include(ServletRequest request, ServletResponse response)

其中这里的path必须开始为"/",即这里的path必须相对于context的root.
Java代码
void forward(ServletRequest request, ServletResponse response)

这里的path可以为相对路径,如果path开始为"/",则也认为是从context的root开始的

redirect
Java代码
javax.servlet.http.HttpServletResponse.sendRedirect(String location)

Sends a temporary redirect response to the client using the specified redirect location URL.

区别:
1、forward与include访问获取Request范围内的对象,而sendRedirect只能获取URL后面带的参数,不能获取Request范围其它的对象(例如bean),因为forward是这样传递参数的:
Java代码
<jsp:useBean id="ub" class="UserBean" scope="request"/>
<jsp:setProperty name="ub" property="UserName" value="sa"/>
<jsp:setProperty name="ub" property="Password" value="123"/>
<jsp:forward page="index.jsp">
</jsp:forward>

当然,如果Bean的作用域是Session的话,用sendRedirect也能取到的。

2、forward与include只能访问应用(站点)内的资源,而sendRedirect可以访问内部和外部的资源;貌似forward与include比sendRedirect更安全一些;
3、forward到下一个页面时,客户端不清楚,保留原来的request;而使用sendRedirect时,客户端要再发送一个request来,这样sendRedirect会导致服务器端要处理两个request,效率有点差;但如果是表单提交,完成之后使用forward,就会导致页面内容虽然变了,但浏览器上地址栏地址没有变,再一刷新的话,会有重复的数据产生;

综上:
1、需要使用上一个页面的request的时候,使用forward比较好;而一个业务处理完成,那么使用sendRedirect比较好;
2、当两个页面之间没什么关系,或者需要降低耦合的时候,建议使用sendRedirect,还有就是sendRedirect能够防止刷新和方便用户将页面加入收藏夹,这也是为什么sendRedirect比较流行使用的原因
3、每个方法都有其适用的范围和环境,需求不同时应该使用不同的方法。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
168
获赞与收藏
3550

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消