response.sendRedirect方式的转向与RequestDispatcher的forward方法的比较
来源:互联网 发布:网络精准推广 编辑:程序博客网 时间:2024/05/01 18:18
Java Web开发中,采用MVC模式的时候,在控制器完成模型的调用之后会选择界面对用户响应,用常有两种方式:
1、通过response对象的sendRedirect方法。
2、通过RequestDispatcher对象的forward方法。
例如要跳转登录界面login.jsp,可以使用下面的两种方式:
1、使用response
response.sendRedirect("login.jsp");
2、使用RequestDispatcher
RequestDispatcher rd =request.getRequestDispatcher("login.jsp");
rd.forward(request,response);
这两种方式有什么区别?什么情况下应该使用哪一种方式呢?
首先介绍两者的区别。
第一点区别,过程不同:第一种方式相当于浏览器接收到了响应之后又向服务器发送了一次请求,所以相当于两次请求。第二种方式相当于方法调用,在执行当前文件的过程中转向执行目标文件,两个文件(当前文件和目标文件)属于同一次请求,最本质的特点就是两次请求共享了reques对象和response对象。
第二点区别,地址栏不同:第一种方式下用户在浏览器地址栏中看到的是目标文件的地址,第二种方式下用户在浏览器地址栏中看到的是当前文件的地址。这一点也非常重要,后面介绍。
在使用的时候具体应如何选择呢?
如果两个文件的关系非常密切,则应该使用RequestDispatcher,如果两个文件没有直接的关联关系,则应该使用response的sendRedirect方法。什么样的关系算是关系密切,什么样的关系算是没有直接的关联关系呢?例如查询的控制器和查询的结果界面之间就应该算是关系密切,因为查询控制器处理完之后肯定要转向查询结果界面。再例如添加信息的控制器和查询控制器之间的关系就是没有直接关系,通常在添加信息之后会跳转到列表界面的控制器然后再跳转到列表界面,修改信息或者删除信息之后也可能会跳转到列表界面的控制器然后再跳转到列表界面。
下面是两个比较特殊的应用:
1、如果希望通过request把当前在控制器中获取的信息传递给目标文件(通过request.setAttribute和request.getAttribute),这时候应该选择RequestDispatcher。因为需要当前文件和目标文件共享request对象。通常用于查询。
2、对数据进行修改(包括删除和添加操作)的功能的控制器与之后的界面或者控制器应该采用response.sendRedirect方式。如果采用了RequestDiapatcher的forward方式,会产生严重错误。因为地址栏是修改信息的控制器,如果用户在刷新的时候,会重新发送一次对数据进行修改的请求,这不是用户想看到的结果。所以有同学在做添加功能的时候,每刷新一次就添加一条。
如何采用第二种方式,如何传递数据呢?有两种方式:
1、可以选择session,但是在第二个文件中一定要删除。
2、可以在请求字符串中编写,例如login.jsp?info="用户不存在!"
- response.sendRedirect方式的转向与RequestDispatcher的forward方法的比较
- response.sendRedirect方式的转向与RequestDispatcher的forward方法的比较
- response.sendRedirect方式的转向与RequestDispatcher的forward方法的比较
- response.sendRedirect方式的转向与RequestDispatcher的forward方法的比较
- response.sendRedirect方式的转向与RequestDispatcher的forward方法的比较
- requestDispatcher.forward()与response.sendRedirect()的区别
- Response.sendRedirect()与RequestDispatcher.forward()方法区别
- 请求重定向与请求转发的比较(HttpServletResponse.sendRedirect方法和RequestDispatcher.forward方法)
- RequestDispatcher.forward() 与 HttpServletResponse.sendRedirect()的区别
- HttpServletResponse.sendRedirect()与RequestDispatcher.forward()的区别
- HttpServletResponse.sendRedirect()与RequestDispatcher.forward()的区别
- RequestDispatcher.forward() 与 HttpServletResponse.sendRedirect()的区别
- HttpServletResponse.sendRedirect()与RequestDispatcher.forward()的区别
- HttpServletResponse.sendRedirect()与RequestDispatcher.forward()的区别
- HttpServletResponse.sendRedirect()与RequestDispatcher.forward()的区别
- Servlet JSP 之间的跳转 response.sendRedirect()和RequestDispatcher().forward的比较
- requestdispatcher.forward 和response的sendredirect的路径问题
- Response.sendRedirect()与RequestDispatcher.forward()
- 桃花坞-程序员版
- JDk安装及环境变量的配置
- 分享正在执行的事务的基本情况
- NSRunLoop中Autorelease pool 管理
- [VC6] RadioBox使用入门
- response.sendRedirect方式的转向与RequestDispatcher的forward方法的比较
- 基于jquery的循环左右滚动和上下滚动效果(备用记录)
- STM学习资料下载链接
- cocos2d坐标系
- 告别ide 之UEdit32的Java环境配置
- 关于oracle远程1521不通的问题
- oracle数据库连接信息的初始用户名和口令
- Sql Server参数化查询之where in和like实现详解
- 计算广告学习笔记 4.4竞价广告系统-流量预测