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

JarvisZhang87 2009-05-21 09:10:39
如题。
...全文
1460 18 打赏 收藏 转发到动态 举报
写回复
用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
课程教学平台设计源码,java实现 <% //设置编码格式 request.setCharacterEncoding("GB18030"); //取到表单中用户填写的username,userpassword,userClass参数的值 String username = request.getParameter("username"); String userpassword = request.getParameter("userpassword"); System.out.println(username); System.out.println(userpassword); int userClass = Integer.parseInt(request.getParameter("userClass")); System.out.println(userClass); //判断参数是否为空,或者是空字符串,如果是返回到index.jsp界面,如果符合标准跳到相应的管理后台界面 if (username == null || username.trim().equals("") || userpassword == null || userpassword.trim().equals("")) { request.getRequestDispatcher("index.jsp").forward(request, response); //response.sendRedirect("index.jsp"); } else { //建立数据库连接,判断用户名和密码是否在数据库user表中存在 Connection conn = DB1.getConn(); System.out.println(conn); Statement stmt = DB1.createStmt(conn); //sql语句,从user表中选择出username和userpassword与用户填入的一样的数据 String sql = "select * from user where username = '" + username + "' and userpassword = '" + userpassword + "'"; ResultSet rs = DB1.executeQuery(stmt, sql); System.out.println(conn); if (rs.next()) { //设置session,把用户名添加到seesion属性中 session.setAttribute("username", username); request.setAttribute("username", username); request.setAttribute("userClass", userClass); //判断登陆用户是那种用户类型,如果是1跳转到学生页面student.jsp, //如果是2跳转到教师页面teacher.jsp,如果是3跳转到管理员界面manager.jsp int uc = rs.getInt(3); if (uc == userClass) { if (uc == 1) { //request.getRequestDispatcher("student.jsp").forward(request, response); response.sendRedirect("student.jsp"); } else if (uc == 2) { //request.getRequestDispatcher("teacher.jsp").forward(request, response); response.sendRedirect("teacher.jsp"); } else if (uc == 3) { //request.getRequestDispatcher("manager.jsp").forward(request, response); response.sendRedirect("manager.jsp"); } } else { //用户身份不正确时,给出相应的提示 out.println("请选择正确的登录身份"); out.println("返回主页"); } } else { //当用户名或密码错误时给出相应的提示 out.println("用户名/密码错误,请输入正确的用户名和密码!"); out.println("返回主页"); } //关闭数据库连接 DB1.close(rs); DB1.close(stmt); DB1.close(conn); } %>

67,512

社区成员

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

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