Java基础:请求重定向与请求转发的比较

 
发布时间:2007.11.24 04:51 来源:赛迪网技术社区 作者:执木

尽管HttpServletResponse.sendRedirect方法,RequestDispatcher.forward方法都可以让浏览器获得另外一个URL所指向的资源,但两者的内部运行机制有着很大的区别。下面是HttpServletResponse.sendRedirect方法实现的请求重定向与RequestDispatcher.forward方法实现的请求转发的总结比较:

(1)RequestDispatcher.forward方法只能将请求转发给同一个WEB应用中的组件;而HttpServletResponse.sendRedirect 方法不仅可以重定向到当前应用程序中的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。如果传递给HttpServletResponse.sendRedirect 方法的相对URL以“/”开头,它是相对于整个WEB站点的根目录;如果创建RequestDispatcher对象时指定的相对URL以“/”开头,它是相对于当前WEB应用程序的根目录。

(2)调用HttpServletResponse.sendRedirect方法重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL;而调用RequestDispatcher.forward 方法的请求转发过程结束后,浏览器地址栏保持初始的URL地址不变。

(3)HttpServletResponse.sendRedirect方法对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的 访问请求,这个过程好比有个绰号叫“浏览器”的人写信找张三借钱,张三回信说没有钱,让“浏览器”去找李四借,并将李四现在的通信地址告诉给了“浏览器”。于是,“浏览器”又按张三提供通信地址给李四写信借钱,李四收到信后就把钱汇给了“浏览器”。可见,“浏览器”一共发出了两封信和收到了两次回复, “浏览器”也知道他借到的钱出自李四之手。RequestDispatcher.forward方 法在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为。这个过程好比绰号叫“浏览器”的人写信找张三借钱,张三没有钱,于是张三找李四借了一些钱,甚至还可以加上自己的一些钱,然后再将这些钱汇给了“浏览器”。可见,“浏览器”只发 出了一封信和收到了一次回复,他只知道从张三那里借到了钱,并不知道有一部分钱出自李四之手。

(4)RequestDispatcher.forward方法的调用者与被调用者之间共享相同的request对象和response对象,它们属于同一个访问请求和响应过程;而HttpServletResponse.sendRedirect方法调用者与被调用者使用各自的request对象和response对象,它们属于两个独立的访问请求和响应过程。对于同一个WEB应用程序的内部资源之间的跳转,特别是跳转之前要对请求进行一些前期预处理,并要使用HttpServletRequest.setAttribute方法传递预处理结果,那就应该使用RequestDispatcher.forward方法。不同WEB应用程序之间的重定向,特别是要重定向到另外一个WEB站点上的资源的情况,都应该使用HttpServletResponse.sendRedirect方法。

(5)无论是RequestDispatcher.forward方法,还是HttpServletResponse.sendRedirect方法,在调用它们之前,都不能有内容已经被实际输出到了客户端。如果缓冲区中已经有了一些内容,这些内容将被从缓冲区中清除。

转载于:https://blog.51cto.com/515797746/1154709

java中web应用中重定向与转发的区别相关推荐

  1. 重定向与转发的区别与应用

    一.重定向与转发的区别 转发过程: 客户端浏览器发送http请求 → web服务器接受此请求 → 调用内部的一个方法在容器内部完成请求处理和转发动作 → 将目标资源发送给客户. //java代码示例 ...

  2. 重定向和转发的区别+使用情景

    重定向和转发的区别: // 重定向 response.sendRedirect("xxx.jsp或者servlet"); // 转发 request.getRequestDispa ...

  3. JSP重定向和转发的区别

    一.重定向和转发的区别 response.sendRedirect()――重定向 它是在用户的浏览器端工作,sendRedirect()可以带参数传递,比如servlet?name=frank传至下个 ...

  4. springmvc - 重定向与转发的区别

    重定向与转发的区别: 1.重定向访问服务器两次,转发只访问服务器一次. 2.转发页面的URL不会改变,而重定向地址会改变 3.转发只能转发到自己的web应用内,重定向可以重定义到任意资源路径. 4.转 ...

  5. struts result type redirect 重定向和转发的区别

    我们在使用struts2进行配置struts.xml的时候,<result>中有个tyep属性用来配置跳转类型 默认不写时tyep="dispatcher",我们可以根 ...

  6. javaweb重定向和转发的区别

    JavaWeb学习随记 重定向与转发的区别(面试题) 相同点 页面都会实现跳转 不同点 请求转发的时候,url不会产生变化 重定向时候,url地址栏会发生变化 简单的重定向代码: resp.sendR ...

  7. Java中重定向和转发的区别

    重定向的概念: 客户浏览器发送http请求,当web服务器接受后发送302状态码响应及对应新的location给客     户浏览器,客户浏览器发现是302响应,则自动再发送一个新的http请求,请求 ...

  8. Servlet中的重定向和转发的区别

    转发 request.getRequestDispatcher("/index.jsp").forward(request, response);System.out.printl ...

  9. ssm项目中重定向和转发的区别

    在做ssm项目时会有页面跳转,页面跳转就会有重定向和转发这两种不同的方式,在昨天我做了个ssm构建的增删改查的小项目,对这两种方式有了一定的理解,接下来我会讲一下自己的想法. 转发 转发可以在两个页面 ...

最新文章

  1. Spring 4 MVC+Hibernate 4+MySQL+Maven使用注解集成实例
  2. linux下软件的安装[转]
  3. 去除重复数据的SQL语句
  4. python 链表 【测试题】
  5. 搜狐视频如何上传原创视频
  6. -webkit-min-device-pixel-ratio的常见值对照
  7. 综合实例_为啥要做“三维管线综合”?看个实例就明白
  8. 今天,我需要你的支持!
  9. JAVA架构师进阶之路
  10. java自动机字符串匹配_【算法】利用有限自动机进行字符串匹配
  11. 微信小程序echarts问题整理与解决
  12. 小白也会用的情人节表白神器
  13. 如何实现一个二维码支持微信支付和支付宝支付
  14. GeoServer中的WPS服务-概念
  15. [练气期]计算机视觉之从矩阵本质修炼图像几何变换秘籍
  16. 基于Jquery实现登录功能的前端页面
  17. 安装opensips时创建MySQL表_Centos7.6安装opensips并实现通话成功
  18. 高通8996启动流程-3. sbl1启动流程
  19. 【poj 3069】萨鲁曼的大军
  20. 多媒体计算机维修记载,多媒体个人工作总结

热门文章

  1. python测试之道第5章模拟网络请求
  2. 吴恩达机器学习笔记_第三周
  3. 使用多个DNS供应商以缓解DDoS攻击
  4. 【Spring】BeanUtils.copyPorperties()的IllegalArgumentException原因分析
  5. MySQL 架构组成—存储引擎
  6. 使用xtrabackup对MySQL进行备份和恢复
  7. LCS2005客户端配置详解:LCS2005系列之二
  8. 数据中心虚拟化的7大考量要素
  9. php数字加零,php实现数字补零的两种方法
  10. loader.asm 注释