专栏首页用户6093955的专栏sendRedirect()和forward()方法的区别

sendRedirect()和forward()方法的区别

之前好像曾经整理过,但忘了放在哪里了,好像压根就没整理过?,博客里也没有,故今天重新整理一下。

我们知道页面之间的跳转有两种方式:重定向与转发

跳转:顾名思义,就是页面跳转。

虽然二者都可以实现获取相应的url资源,但首先要注意的是,重定向由sendRedirect来实现,请求转发由forward来实现。

在跳转范围上forward方法只能重定向到同一个web应用程序中的一个资源,仅仅局限在同一个服务器内;而sendRedirect方法不仅可以在位于同一主机上的不同web应用程序之间进行重定向,而且可以将客户端重定向到其它服务器上的web应用程序资源。

先给出sendRedirect方法的工作原理图:

描述一下上图的过程:浏览器先向servlet1发送一次request请求,servlet1让servlet2为客户端服务,servlet1调用sendRedirect方法,将客户端的request请求重定向到servlet2(告诉浏览器servlet2的位置,让浏览器重新访问servlet2,这样就会发现地址栏会发生相应变化,这也是和forward的一个重要区别)。最后servlet2对请求做出响应。上图中产生了两次请求。

下面再给出forward方法的工作原理图:

描述一下上图的过程:浏览器先向servlet1发送请求,servlet1让servlet2为客户端服务,servlet1调用forward方法,将客户端的请求转发给servlet2处理(这里浏览器地址栏是不会变化的,因为没告诉浏览器),servlet2对请求做出响应。

对重定向和请求转发的使用分别举个实例,如下:

//重定向到index.jsp页面
response.sendRedirect("/ServletStudy/index.jsp");
//如果你不想写前面的项目名,可以写成下面这样
response.sendRedirect(request.getContextPath() + "/index.jsp");
//获取到requestDispatcher对象,跳转到index.jsp
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/index.jsp");
//调用requestDispatcher对象的forward实现转发,传入request和response方法
requestDispatcher.forward(request,response);

把上面这些话用一个表格表示,如下:

区别

forward

sendRedirect

是否可转向本web应用之外的页面或网站

实际发生位置

服务端

客户端

用法

request.getRequestDispatcher("/资源名").forward(request,response)(注意:转发时"/"代表的是本应用程序的根目录,比如"/web应用名")

response.sendRedirect("/web应用/资源名") (重定向时"/"代表的是webapps目录,这个目录在tomcat那个目录下)

传送数据的类型

转发的request对象可以传递各种类型的数据,包括对象

重定向只能传递字符串,就是在路径后面加

跳转时间

转发时:执行到跳转语句后就会立即跳转

重定向:整个页面执行完成后才执行跳转,也就是说其后的代码有执行机会

在跳转前request对象setAttribute();的值是否会丢失

不会

转向速度

地址栏

不变

应用场景

访问Servlet处理业务逻辑,然后forward到jsp显示处理结果

提交表单,处理成功后redirect到另一个jsp,防止表单重复提交

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 数据结构期末复习——树与二叉树一些知识点

    _DIY
  • JfreeChart 乱码问题处理

    _DIY
  • 【表达式转换 (25 分)】

    首先规定优先级,括号为最高优先级,乘号或除号为次优先级,加或减号为最低优先级,至于数字,碰到就直接输出即可。 既然是数字,就有小数,整数,正数,负数之分,还有...

    _DIY
  • 科普常识:视频字幕翻译之原文信息的修改

    例如,因为东方与西方在性方面的文化差异,西方影视作品中大大咧咧说出的「have sex」「make love」常常在中国的字幕里被调整,改为「上床」「嘿咻」「滚...

    朵朵花儿
  • 吴伯凡对话吴军、涂子沛:大数据是智能的母体

    大数据文摘
  • 渗透,持续渗透,后渗透的本质

    -------------------------------------------------------------------------

    用户1631416
  • SAS-如何随心所欲的抽取样本

    我们在处理大样本的时候,往往会遇到随机抽样的需求,在SAS中抽样的方法有一个专门的Proc过程步(Proc surveyselect),这个过程步可以简单快速的...

    Setup
  • Arcgis for js之WKT和GEOMETRY的相互转换

    WKT(Well-known text)是一种文本标记语言,用于表示矢量几何对象、空间参照系统及空间参照系统之间的转换。它的二进制表示方式,亦即WKB(well...

    lzugis
  • Greenplum 架构和核心引擎

    https://www.bilibili.com/video/av81898649?p=1

    小徐
  • Greenplum架构和核心引擎

    https://www.bilibili.com/video/av81898649?p=1

    小徐

扫码关注云+社区

领取腾讯云代金券