重定向和转发的区别

本文详细介绍了HTTP请求处理中的转发和重定向的区别。转发在服务器内部完成,保持一次请求,地址栏不变;重定向由浏览器完成,涉及两次请求,地址栏显示最后的跳转地址。转发适合同一次请求数据传递,重定向避免数据重复提交。选择使用时,考虑数据共享和请求独立性需求。
摘要由CSDN通过智能技术生成

重定向和转发的区别

  1. 在代码上

    • 转发

      • // 第一步:获取请求转发器对象
         	RequestDispatcher dispatcher = request.getRequestDispatcher("/b");
         	// 第二步:调用转发器的forward方法完成跳转/转发
         	dispatcher.forward(request,response);
                   
         	// 第一步和第二步代码可以联合在一起。
         	 request.getRequestDispatcher("/b").forward(request,response);
         	
        //注意:转发的时候是一次请求,会将当前的request和response对象传递给下一个servlet.
                 
        
    • 重定向

      • response.sendRedirect("servlet02/b")
        //注意:重定向地址需要加上 项目名
        //因为浏览器发送请求是需要加上项目名的
        
  2. 在形式上

    • 转发
      • 利用转发跳转页面后,会发现浏览器地址栏上,是第一次的访问地址。
      • 例如:我在AServlet上通过转发的方式跳转到BServlet,浏览器地址栏上写的是localhost:8080/servlet01/a
    • 重定向
      • 利用重定向跳转页面,会发现浏览器地址栏上,是最后一此跳转资源的访问地址
      • 例如:我在AServlet上通过转发的方式跳转到BServlet,浏览器地址栏上写的是localhost:8080/servlet01/b
  3. 在原理上

    • 转发
      • 转发的整个过程其实都是WEB服务器自己所完成,是由WEB服务器自己完成的跳转。浏览器只发送了一次请求
    • 重定向
      • 重定向是浏览器完成的。重定向是一个将地址响应给浏览器的过程,你可以从调方法时用的response对象就可以看出来,重定向是将需要跳转的地址发送给浏览器,浏览器接收到地址后,再次向服务器发送一次跳往该地址的请求。也就是说跳转到一个新的页面,浏览器发送了两次请求
  4. 注意:

    • 转发仍然还在一个请求域当中,而转发的话,到新资源后就不在同一个请求域当中了。
    • 浏览器发送请求地址一定要加项目名,所以在重定向里面写地址时,加上了项目名。
    • 转发在同一个请求当中,也就是说前一个和后一个Servlet必须有相同的处理方式,也就是说都重写了doGet或者都重写了doPost。
    • 而重定向是两次请求,也就是说第一次是get还是post于第二次请求没关系
  5. 如何选择转发和重定向

    • 如果前一个Servlet在请求域中绑定了数据,并且跳转到下一个Servlet需要取这个数据,就用转发
    • 其他情况都用重定向
  6. 转发会出现一个问题,比如有一个Servlet类,完成的是向数据库插入一个数据,插入成功后会跳转到一个新的页面,如果用转发的方式话,在新的页面上刷新浏览器时,会再次插一条数据到数据库当中,转发是一次请求,你在新页面刷新就是重新执行这个请求。 而如果用重定向则不会出现该问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值