请求转发与重定向


一、请求转发

是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器。浏览器根本不知道服务器发送的内容从哪里来的,因为这个跳转过程实在服务器实现的,并不是在客户端实现的所以客户端并不知道这个跳转动作,所以它的地址栏还是原来的地址。

在这里插入图片描述

二、重定向

是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,所以地址栏显示的是新的URL。

转发是服务器行为,重定向是客户端行为。

在这里插入图片描述

三、请求转发与重定向的区别

1. 处理方式:

  • 请求转发是服务器内部的操作。当一个Servlet通过调用request.getRequestDispatcher().forward(request, response)来请求转发时,请求将直接发送给目标Servlet,目标Servlet的处理结果会被发送回给客户端,但客户端并不知道请求发生了转发,它仍然认为只是与初始URL打交道。
  • 重定向是通过向客户端返回一个特殊的HTTP响应码来实现的,通常是HTTP 302 Found。这会告诉客户端浏览器重新发送一个新的请求,客户端会发起一个新的请求去访问重定向的URL,因此在客户端浏览器中,URL会改变为重定向的URL。

2. URL改变:

  • 请求转发不会改变浏览器的URL,因为它在服务器内部进行,客户端并不知道请求发生了转发,仍然保持原来的URL。
  • 重定向会改变浏览器的URL,因为客户端会收到一个新的URL作为响应,然后发起新的请求访问这个URL。

3. 数据共享:

  • 请求转发是服务器端实现的,所以整个执行流程中,客户端(浏览器端)只需要发送一次请求,因此整个交互过程中使用的都是同一个 Request 请求对象和一个 Response 响应对象,所以整个请求过程中,请求和返回的数据是共享的;
  • 而请求重定向客户端发送两次完全不同的请求,所以两次请求中的数据是不同的。

4. 请求次数

  • 请求转发是一次请求一次响应
  • 重定向是两次请求两次响应

5. 适用场景:

  • 请求转发通常用于将请求传递给同一个Web应用程序内的另一个Servlet或JSP页面,以实现模块化和代码重用。
  • 重定向通常用于将请求发送到另一个Web应用程序,或者用于在请求处理后重定向到另一个页面,比如处理表单提交后的重定向,以防止用户重复提交表单数据。

总结

总体来说,请求转发在服务器内部完成,效率较高,适用于在同一Web应用程序内部进行组件间的数据交互;而重定向则是通过客户端重新发起请求来实现的,适用于跨域或不同Web应用程序之间的请求处理和页面跳转。选择使用哪种技术取决于你的具体需求和场景。

  1. 重定向: 仅仅只是地址调整,不传递数据
  • reposne对象
  • 地址发送改变,并且不能带回数据。
  • 两次请求,两次响应
  1. 请求转发:需要数据传递时
  • request对象
  • 地址不改变,可以传递数据
  • 一次请求,一次响应
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值