zoukankan      html  css  js  c++  java
  • 内部跳转(请求转发)和外部跳转(重定向)的区别?

    比喻:
    请求转发:A向B发送请求,想让B帮忙完成一项工作,当B接收到请求后发现自己完成不了,于是B请C帮忙,C接收到B的请求后最终完成了该项工作,并把最后的结果返回给A。此过程A只发送了一次请求给B,A只知道把请求发给B,至于B是怎么完成的A并不关心,他只等待最终的结果。
    重定向:A向B发送请求,想让B帮忙完成一项工作,当B接收到请求后发现自己无法完成,就立即告诉A情况,并向A推荐C可以完成该项工作,于是A就找C帮忙,C最终完成该项工作,返回给A。
     
    不同点:
    1、浏览器地址栏显示不同(表面区别):  
     无论进行多少次请求,如果使用请求转发来实现,浏览器地址栏中只显示第一次发送请求的地址;
    如果使用重定向来实现,浏览器地址栏显示的是每次请求的新地址。这只是表面上看到的不同地方。 
     
    2、组件之间可否共享信息不同(本质区别)  
     从本质上讲,请求转发时,从发送第一次到最后一次请求的过程中,WEB容器只创建一次request和response对象,请求之间始终共享这两个对象,所以每个请求可以访问他之前请求中的参数和属性的值;
    而重定向时,浏览器每发送一次请求,WEB容器都会重新创建新的request和response对象,所以请求之间不能共享信息,即不能在请求中访问到他之前请求中的参数和属性的值。  
     
    3、实现方式不同:
    3.1 请求转发的实现步骤:
    1)说明将要转发的资源; 
    2)获取请求转发的对象; 
    3) 调用请求转发对象中forward()方法
      Java代码 
      1). String forward = "/a.jsp"; 
      2). RequestDispatcher rd = request.getRequestDispatcher(forward);
     3). rd.forward(request, reponse); 
    综合:request.getRequestDispatcher("/a.jsp").forward(request,response);
     
     
    3.2  重定向的实现步骤: 
      1) 说明将要重定向的资源; 
     2) 调用response对象中sendRedirect方法 
      Java代码 
      1. String resource = request.geContextPath() + "/a.jsp"; 
      2. response.sendRedirect(resource);
    综合:response.sendRediect(request.geContextPath() + "/a.jsp");
     
     4、知情人不同 
     请求转发的过程只有WEB服务器知道,而浏览器不知道进行了多少次转发,以及都转发给哪些组件(servlet,JSP),它只是在等待WEB服务器最终的结果。
    而重定向时,每发送一次请求,WEB服务器都会通知浏览器的,所以重定向了几次请求以及每次都向哪个组件发送的请求,浏览器很清楚,当让WEB服务器也很明白。 
     
     
    相同点: 两者都可以进行多次请求的转发。
     
     
    总结:什么情况下使用重定向,什么情况下请求转发,这个不是看我们的习惯,而是什么情况下必须用什么:
    重定向:之前的request中存放的变量全部失效并进入一个新session的作用域;
    请求转发:之前的request中存放的变量没有失效,就想把两个页面拼在一起
  • 相关阅读:
    HDU 1874 畅通工程续(dijkstra)
    HDU 2112 HDU Today (map函数,dijkstra最短路径)
    HDU 2680 Choose the best route(dijkstra)
    HDU 2066 一个人的旅行(最短路径,dijkstra)
    关于测评机,编译器,我有些话想说
    测评机的优化问题 时间控制
    CF Round410 D. Mike and distribution
    数字三角形2 (取模)
    CF Round410 C. Mike and gcd problem
    CF Round 423 D. High Load 星图(最优最简构建)
  • 原文地址:https://www.cnblogs.com/houji/p/5198601.html
Copyright © 2011-2022 走看看