请求转发与重定向区别

请求转发与重定向区别

学习spring时又想到了javaweb的小知识
我觉得这个问题我们有必要来搞清楚一下。其实理清关系也不是很难。

转发request:

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

在这里插入图片描述

用户在浏览器发送请求,然后到Servlet1,Servlet1可能没有达到目标,内部再转到Servlet2,Servlet2处理,处理完之后将结果返回给浏览器。对服务器而言,用户访问两个Servlet,但对于用户而言,则请求一次,响应一次,这个过程叫转发,用户以为请求了一个资源,而服务器内部又请求了一个资源,url不变。

因为只发一次请求,所以request中的数据是可以共享的。

重定向:

response.sendRedirect(path);
在这里插入图片描述

浏览器发送请求,到Servlet1,Servlet1把结果显示给浏览器,Servlet1告诉浏览器,你访问的资源还是不够,你可以再去访问另外一个资源,Servlet1有一个302告诉浏览器Servlet2地址,浏览器再发一个请求到Servlet2,Servlet2处理完结果再返回给浏览器。浏览器发送两次请求,得到两次响应,url肯定会有变化

浏览器每次发送请求到服务器,都会执行Servlet中服务的方法,服务方法执行之前,都会创建一个用于接受请求的request,和用于响应数据的response,浏览器发送两次请求到服务器,会创建两个新的request,意味着两个request中的数据不能共享。

区别总结:

1.重定向是浏览器发送请求并受到响应以后再次向一个新地址发请求;转发服务器收到请求后为了完成响应转到另一个资源。

2.重定向中有两次请求对象,不共享数据;转发只产生一次请求对象且在组件间共享数据。

3.重定向后地址栏地址改变;而转发则不会。

4.重定向的新地址可以是任意地址;转发必须是同一个应用内的某个资源。

5.转发是服务端行为,重定向是客户端行为

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值