JAVA中Forward和Redirect的区别

Forward和Redirect代表了两种请求转发方式:直接转发和间接转发。

用户向服务器发送了一次HTTP请求,这个请求可能被直接请求转发(Forward)和间接请求转发(Redirect),两种转发方式有何区别呢?

直接转发就相当于:“A找B借钱,B没有,B去找C借,并告诉C把钱给A”

间接转发就相当于:"A找B借钱,B没有,告诉A去找C借"

 

直接转发方式(Forward)

客户浏览器发送http请求--->web服务器接受此请求--->调用内部的一个方法在容器内部完成请求处理和转发动作--->将目标资源 发送给客户

  • 转发目标必须是同一个web容器下的url
  • 客户端和浏览器只发出一次请求,Servlet、HTML、JSP或其它信息资源,由第二个信息资源响应该请求,由于在整个定向的过程中用的是同一个request,因此forward会将request的信息带到被重定向的jsp或者servlet中使用。即保存的对象对于每个信息资源是共享的
  • 在客户浏览器路径栏显示的仍然是其第一次访问的路径
  • 转发行为是浏览器只做了一次访问请求。 
  • 一般用于用户登录的时候,根据角色转发到相应的模块
request.getRequestDispatcher("login.jsp").forward(request, response);   
//转发到login.jsp

间接转发方式(Redirect)

客户浏览器发送http请求--->web服务器接受后发送302状态码响应及对应新的location给客户浏览器--->客户浏览器发现 是302响应,则自动再发送一个新的http请求,请求url是新的location地址--->服务器根据此请求寻找资源并发送给客户

 

  • 是客户端的重定向,是完全的跳转。即服务器返回的一个url给客户端浏览器,然后客户端浏览器会重新发送一次请求,到新的url里面,因此浏览器中显示的url网址会发生变化
  • 因为这种方式比forward多了一次网络请求,因此效率会低于forward
  • 在重定向的过程中,传输的信息会被丢失。
  • 一般用于用户注销登录时返回主页面或者跳转到其他网站
response.sendRedirect("login.jsp");   
//重定向到login.jsp

文中的例子和图片摘自如下博主:

https://www.cnblogs.com/selene/p/4518246.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值