重定向和转发的区别

在Web开发中,重定向和转发是我们进行页面跳转所使用的两种方式,那么它们之间有什么区别呢?
我们先看看他们的写法

//重定向
response.sendRedirect("URL");

//转发
request.getRequestDispatcher("URL").forward(request, response);

重定向的执行过程:

客户端向服务器端发送一个请求----->web服务器向浏览器发送一个响应----->浏览器根据此响应再发送一个新的请求到服务器------->服务器根据此请求寻找资源并发送给浏览器。它可以重定向到任意的URL,不能共享request范围内的数据。

转发的执行过程:

客户端发送请求到服务器端-------->Web服务器调用内部的方法在容器内部完成请求处理和转发动作------->将目标资源发送给客户端。它只能在同一个Web应用中使用,可以共享request范围内的数据。

总结区别

重定向

  1. 地址栏上显示的是最后的那个资源的路径地址
  2. 请求次数最少有两次, 服务器在第一次请求后,会返回302 以及一个地址, 浏览器在根据这个地址,执行第二次访问。
  3. 可以跳转到任意路径。 不是自己的工程也可以跳。(可以跨程序访问资源)
  4. 效率稍微低一点, 执行两次请求。
  5. 后续的请求,没法使用上一次的request存储的数据,或者 没法使用上一次的request对象,因为这是两次不同的请求。
  6. 是客户端行为

转发

  1. 地址上显示是原来的地址。 会返回200 ok
  2. 请求次数只有一次, 因为是服务器内部帮客户端执行了后续的工作。
  3. 只能跳转自己项目的资源路径 。 (不可以跨程序访问资源)
  4. 效率上稍微高一点,因为只执行一次请求。
  5. 可以使用上一次的request对象。
  6. 是服务端行为

最后在举一个较为生动的例子

重定向:

小宇去A部门盖章,A部门并不能解决这件事情,A部门告诉小宇:“我们并不能解决这件事情,但B部门可以,你去找它吧,B部门在XXXXXXXXXX。”然后小宇就去找B部门,B部门也解决了小宇的事情。 在这个过程中,小宇问了(请求)两次,得到了两次的答复(响应)。

转发

小宇去A部门盖章,A部门并不能解决这件事情,但是B部门可以,于是A部门就帮小宇把文件拿到B部门那里盖好章,在拿回来给小宇。在这个过程中,小宇一次请求得到了一次响应。

转载自 https://blog.csdn.net/weixin_44665028/article/details/96778622

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值