Servlet 请求转发(forward和include)和重定向(sendRedirect)的工作过程

请求转发

request.getRequestDispatcher(target).forward(request, response);

request.getRequestDispatcher(target).include(request, response);

都是request.RequestDispatcher发起的,include的流程如下图:
在这里插入图片描述
forward的工作流程如下:
在这里插入图片描述

include是在服务器,从servlet1直接转发到servlet2,由2返回结果给1,再由1产生最终返回结果给客户端。

forward是在服务器,从servlet1直接转发到servlet2,并且由2直接返回结果给客户端。

因为请求转发都是在服务器发生,所以导航栏是看不到地址的变化的,对于浏览器来说,它只发起了一次请求,并不清楚服务器内部做了什么。

转发两次跳转之间传输的信息不会丢失,所以可以通过request进行数据的传递,但也只能将请求转发给本站点内部。

重定向

response.sendRedirect(target);

服务器告诉浏览器,你重新发起一个请求,去访问target这个链接。因为是客户端浏览器发起的,因此导航栏可以看到地址的变化。

重定向的工作过程是这样的:
在这里插入图片描述
因此,你可以看到sendRedirect是response调用的,就是用response告诉客户端,让客户端重新向另一个连接发起请求。

因为是浏览器发起的新请求,所以前后两次访问的信息会丢失(request范围内),甚至可以指向任何资源,包括非当前站点,比如重定向到百度。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TandK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值