请求重定向(redirect)和请求转发(forward)的区别详解(看这一篇就够了)

在Java中进行页面跳转的方式有两种:重定向和请求转发,但是两者的内部实现是完全不一样的,主要区别分为以下5种:

  1. 定义不同
  2. 请求方式不同
  3. 数据共享不同
  4. 最终 URL 地址不同
  5. 代码实现不同

1,定义不同

请求重定向(redirect)

请求重定向指的是客户端(浏览器)向服务器发送一个请求时,服务器会给客户端返回一个临时响应头,响应头里面记录着客户端需要再次发起请求的URL地址,此时客户端会再次将请求发送给这个新的地址上,这个就叫做请求重定向!例如:小明(客户端)找妈妈(服务器1)要一个礼物,妈妈给了小明钱(响应头中的URL)让小明自己去超市(服务器2)买。

 请求转发(forward)

请求转发指的是客户端(浏览器)向服务器发送一个请求时,服务器会自动帮客户端将请求转发到目标地址,再将目标地址的响应结果返回给客户端,这一整个过程都是发生在服务器的内部;作为客户端不需要关心服务器内部具体执行过程,只需要接收响应即可!例如:小明(客户端)找妈妈(服务器)要一个礼物,妈妈去超市(目标地址)给小明买了一个礼物给了小明。

2,请求方式不同

请求重定向(redirect)

请求重定向是客户端的行为,客户端需要访问两次服务器(这两次的服务器不是同一个服务器),访问详情如下:

 请求转发(forward)

请求转发是服务器的行为,客户端不关心服务器如何工作,只需要接收响应即可,访问详情如下:

3,数据共享不同

请求转发(forward)

请求重定向是服务器内部实现的,自动帮客户端定位到新的目标地址,在整个交互过程中使用的都是同一份Request请求对象和同一份Response响应对象,所以整个请求过程中,数据都是共享的。

请求重定向(redirect)

请求转发客户端需要访问两次不同的服务器,发送了两次请求,每次发送请求给指定服务器的时候都是使用的是不同的Request请求对象和Response响应对象,所以整个请求过程中,数据是不共享的。

4,最终URL地址不同

请求转发(forward)

请求重定向服务器自动帮助客户端发送请求给新的目标服务器,客户端只需要接收响应结果即可,所以整个访问过程中的URL地址都是不会发生变化的。

请求重定向(redirect)

请求转发客户端发送了两次请求,所以第二次访问新的目标地址的时候,相对于第一次的URL地址是不同的。

5,代码实现不同

请求重定向(redirect)

@RequestMapping("/rt")
public void redirect(HttpServletRequest request, HttpServletResponse response) throws IOException {
    response.sendRedirect("/index.html");
}

请求转发(forward)

@RequestMapping("/fw")
public void forward(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.getRequestDispatcher("/index.html").forward(request, response);
}

请求转发和请求重定向的核心区别就是,请求重定向需要访问两次服务器(即需要发送两次请求),而请求转发客户端只需要发送一次请求,服务器内部会帮我们自动跳转到目标服务器,客户端不需要关心执行过程!

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值