response.sendRedirect和request.getRequestDispatcher().forward什么时候用哪个?

JarvisZhang87 2009-05-21 09:10:39
如题。
...全文
1540 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
梦里人 2010-09-10
  • 打赏
  • 举报
回复
受教!UP....
esft 2009-06-25
  • 打赏
  • 举报
回复
up
daerqwert 2009-05-31
  • 打赏
  • 举报
回复
2种的区别楼上的已经说得很清楚了。在什么地方用就是看自己的需求了。具体问题具体分析。
popeyeWong 2009-05-29
  • 打赏
  • 举报
回复
response.sendRedirect是重定向
request.getRequestDispatcher().forward是请求转发
Nalanchuixue 2009-05-28
  • 打赏
  • 举报
回复
1,response.sendRedirect是重定向
2,request.getRequestDispatcher().forward是请求转发

重定向的时候只能通过?后来传值!且只能传一个值;

forward转发是你可一通过request对象来传递一个object类型的值

这就要看你的具体需求了!比如传一个数组或者是个javabean时就需要使用forward了!

个人理解!
zm_hs 2009-05-26
  • 打赏
  • 举报
回复
注意哦。在做删除操作时,千万不能用forward
sutku 2009-05-26
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 yefan00 的回复:]
引用 2 楼 lgq_0714 的回复:
Servlet中的两种跳转方法:
方法一:response.sendRedirect("../success.jsp")
利用这个方法如果跳转前有request.setAttribute("a","b")的话,那么参数是传不到success.jsp,因为它在客户端重定向到success.jsp了,本质上跳了2次。所以参数失效,使用这个的时候会发现浏览器的URL地址发生了变化。
方法二:RequestDispatcher rd = getServletContext().getRequestDispatcher("/login.jsp")…
[/Quote]

支持!!!
icebergzx 2009-05-26
  • 打赏
  • 举报
回复
简单的说,sendRedirect 可以跨站点的
getServletContext().getRequestDispatcher("/login.jsp").forward(request,response) 不可跨站的,只能在本站点内跳转


如楼上的兄弟所说,sendRedirect 后request原先所有的参数和属性丢失,而request.getRequestDispatcher().forward 会保持原先request的参数和数据,向下进一步处理。

云霄飞车 2009-05-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lgq_0714 的回复:]
Servlet中的两种跳转方法:
方法一:response.sendRedirect("../success.jsp")
利用这个方法如果跳转前有request.setAttribute("a","b")的话,那么参数是传不到success.jsp,因为它在客户端重定向到success.jsp了,本质上跳了2次。所以参数失效,使用这个的时候会发现浏览器的URL地址发生了变化。
方法二:RequestDispatcher rd = getServletContext().getRequestDispatcher("/login.jsp"); rd.forward(request,respon…
[/Quote]
顶哈。。。
dinghun8leech 2009-05-22
  • 打赏
  • 举报
回复
response.sendRedirect=把地址发送到浏览器端,让浏览器再请求,这是地址栏变的原因
request.getRequestDispatcher().forward=服务端的控制权转向,等于从一个servletClass跳到另一个servletClass或jsp继续运行,最后才返回所有的结果,所以地址栏不会变
request中attribute与parameter的有效期是在一次请求后,而实际使用第一种情况后发生了再次请求,所以是attribute与parameter丢失的原因。
效率上讲1肯定不如2,但有时候你必须得用1,其他时候用2即可。
_BennyTian 2009-05-22
  • 打赏
  • 举报
回复
最简单的区别:

一个地址栏会变

一个地址栏不变

2:

一个能保持同一个 request

一个保存不了
qq306850549 2009-05-22
  • 打赏
  • 举报
回复
request.getRequestDispatcher().forward
建议用这个
jiangnan_net 2009-05-22
  • 打赏
  • 举报
回复
response.sendRedirect("/*.*")想想参数


request.getRequestDispatcher().forward(request,response)想想参数

知道了吧。。
Study_Work_2009 2009-05-22
  • 打赏
  • 举报
回复
这也有具体情况具体分析,一般用forward就可以
ty_seven 2009-05-22
  • 打赏
  • 举报
回复
一般用forward就行了,但是有时为了防止误刷新需要用redirect
lgq_0714 2009-05-21
  • 打赏
  • 举报
回复
Servlet中的两种跳转方法:
方法一:response.sendRedirect("../success.jsp")
利用这个方法如果跳转前有request.setAttribute("a","b")的话,那么参数是传不到success.jsp,因为它在客户端重定向到success.jsp了,本质上跳了2次。所以参数失效,使用这个的时候会发现浏览器的URL地址发生了变化。
方法二:RequestDispatcher rd = getServletContext().getRequestDispatcher("/login.jsp"); rd.forward(request,response); 利用这个方法跳转,参数可以被正确传送,而且效率比第一种高,IE的URL地址不变。
myairland 2009-05-21
  • 打赏
  • 举报
回复
response.sendRedirect是重定向
request.getRequestDispatcher().forward是请求转发

第一种方法request里的值会丢掉

http://blog.csdn.net/sky840505/archive/2009/01/05/3714909.aspx

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧