精华内容
下载资源
问答
  • 1.可以理解为客户端行为,客户端发起一次请求,服务器端给出一次响应,但这个响应包含下一次客户端需要访问服务器端处理程序地址,客户端再次发起请求,将会得到处理结果,也就意味着重定向客户端至少发起两次...

    一、请求转发与重定向区别

    重定向:

    1.可以理解为是客户端行为,客户端发起一次请求,服务器端给出一次响应,但这个响应包含下一次客户端需要访问的服务器端处理程序的地址,客户端再次发起请求,将会得到处理结果,也就意味着重定向客户端至少发起两次请求

    2.当使用了重定向跳转页面后,在其客户端路径栏显示的应该是其重定向的路径,客户端是可以观察到页面地址变化的,重定向是客户端至少做了两次访问请求的

    在这里插入图片描述

    请求转发:

    1.可以理解是服务器端行为,客户端发起一次请求,这个请求在整个服务器端可以被多次传递,但都是由服务器端的处理程序传递给另一个处理程序,客户端不需要发起二次请求,无论这个请求经历过多少个处理程序,始终都是同一个请求,也就意味着,这个请求中的数据经历过的每一个处理程序都可以使用

    2.中间传递的是自己容器的request,客户端的路径栏显示的还是第一次访问的路径,客户端是感觉不到服务器做了转发的,请求转发客户端是只做了一次请求。

    在这里插入图片描述

    二、使用

    当前后两个页面有数据传递时,例如查询了数据需要在页面显示时,用请求转发

    当没有数据传递,例如做了更新操作跳转到其他页面,就用重定向。

    展开全文
  • 一、目标不同 转发服务器行为,重定向客户端行为 。...重定向的网址可以任何网址,请求转发只能指定网址。 四、导致的结果不同 不做重定向,则用户收藏夹或搜索引擎数据库中旧地址只能让访问客户...

    一、目标不同

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

    二、请求次数不同

    1、重定向是两次request 。

    第一次,客户端request一个网址,服务器响应,并response回来,告诉浏览器,你应该去别一个网址。

    2、请求转发只有一次请求

    在这里插入图片描述

    三、网址定位不同

    重定向的网址可以是任何网址,请求转发只能是指定网址。

    四、导致的结果不同

    不做重定向,则用户收藏夹或搜索引擎数据库中旧地址只能让访问客户得到一个404页面错误信息,访问流量白白丧失;再者某些注册了多个域名的网站,也需要通过重定向让访问这些域名的用户自动跳转到主站点等。

    1、网站调整(如改变网页目录结构);

    2、网页被移到一个新地址;

    3、网页扩展名改变(如应用需要把.php改成.Html或.shtml)。

    转发和重定向的图解
    在这里插入图片描述

    两种跳转获得对象的方式

    //获得转发对象getRequestDispatcher()
    HttpServletRequest(httpServletRequest).getRequestDispatcher
    ServletContext.getRequestDispatcher();
     
    //获得重定向对象sendRedirect()
    HttpServletResponse(httpServletResponse).sendRedirect();
    

    转发和跳转的小结
    1、转发使用的是getRequestDispatcher()方法;重定向使用的是sendRedirect();

      2、转发:浏览器URL的地址栏不变。重定向:浏览器URL的地址栏改变;
    
      3、转发是服务器行为,重定向是客户端行为;
    
      4、转发是浏览器只做了一次访问请求。重定向是浏览器做了至少两次的访问请求;
    
      5、转发2次跳转之间传输的信息不会丢失,重定向2次跳转之间传输的信息会丢失(request范围)。
    

    转发和重定向的选择
    1、重定向的速度比转发慢,因为浏览器还得发出一个新的请求,如果在使用转发和重定向都无所谓的时候建议使用转发。

    2、因为转发只能访问当前WEB的应用程序,所以不同WEB应用程序之间的访问,特别是要访问到另外一个WEB站点上的资源的情况,这个时候就只能使用重定向了。

    转发和重定向的应用场景
    在上面我已经提到了,转发是要比重定向快,因为重定向需要经过客户端,而转发没有。有时候,采用重定向会更好,若需要重定向到另外一个外部网站,则无法使用转发。另外,重定向还有一个应用场景:避免在用户重新加载页面时两次调用相同的动作。

    例如,当提交产品表单的时候,执行保存的方法将会被调用,并执行相应的动作;这在一个真实的应用程序中,很有可能将表单中的所有产品信息加入到数据库中。但是如果在提交表单后,重新加载页面,执行保存的方法就很有可能再次被调用。同样的产品信息就将可能再次被添加,为了避免这种情况,提交表单后,你可以将用户重定向到一个不同的页面,这样的话,这个网页任意重新加载都没有副作用;

    但是,使用重定向不太方便的地方是,使用它无法将值轻松地传递给目标页面。而采用转发,则可以简单地将属性添加到Model,使得目标视图可以轻松访问。由于重定向经过客户端,所以Model中的一切都会在重定向时丢失。但幸运的是,在Spring3.1版本以后,我们可以通过Flash属性,解决重定向时传值丢失的问题。

    要使用Flash属性,必须在Spring MVC的配置文件中添加一个。然后,还必须再方法上添加一个新的参数类型:org.springframework.web.servlet.mvc.support.RedirectAttributes。

       如下所示:
    
    @RequestMapping(value="saveProduct",method=RequestMethod.POST)
    public String saveProduct(ProductForm productForm,RedirectAttributes redirectAttributes){
     
         //执行产品保存的业务逻辑等
      
         //传递参数
           redirectAttributes.addFlashAttribute("message","The product is saved successfully");
       
         //执行重定向
          return "redirect:/……";
    

    例子:
    response.sendRedirect(“loginsuccess.jsp”);
    例子:
      RequestDispatcher dis=request.getRequestDispatcher(“loginsuccess.jsp”);
       dis.forward(request,response);

    展开全文
  • 什么这样说呢,这就要看个动作工作流程: 转发过程:客户浏览器发送http请求——》web服务器接受此请求——》调用内部一个方法在容器内部完成请求处理和转发动作——》将目标资源发送给客户;在这里,转发...

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

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

    为什么这样说呢,这就要看两个动作的工作流程:

    • 转发过程:客户浏览器发送http请求——》web服务器接受此请求——》调用内部的一个方法在容器内部完成请求处理和转发动作——》将目标资源发送给客户;在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。

    • 重定向过程:客户浏览器发送http请求——》web服务器接受后发送302状态码响应及对应新的location给客户浏览器——》客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址——》服务器根据此请求寻找资源并发送给客户。在这里location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。

    重定向时浏览器上的网址改变
    转发是浏览器上的网址不变

    2、重定向是两次request,请求转发是一次request

    • 重定向,其实是两次request
      第一次,客户端request A,服务器响应,并response回来,告诉浏览器,你应该去B。这个时候IE可以看到地址变了,而且历史的回退按钮也亮了。重定向可以访问自己web应用以外的资源。在重定向的过程中,传输的信息会被丢失。

    例子:
    response.sendRedirect(“loginsuccess.jsp”);

    请求转发是服务器内部把对一个request/response的处理权,移交给另外一个

    对于客户端而言,它只知道自己最早请求的那个A,而不知道中间的B,甚至C、D。传输的信息不会丢失。

    例子:
    RequestDispatcherdis=request.getRequestDispatcher(“loginsuccess.jsp”);
    Dis.forward(request,response);

    重定向实际上产生了两次请求
    转发只有一次请求

    重定向:

    发送请求 -->服务器运行–>响应请求,返回给浏览器一个新的地址与响应码–>浏览器根据响应码,判定该响应为重定向,自动发送一个新的请求给服务器,请求地址为之前返回的地址–>服务器运行–>响应请求给浏览器

    转发:

    发送请求 -->服务器运行–>进行请求的重新设置,例如通过request.setAttribute(name,value)–>根据转发的地址,获取该地址的网页–>响应请求给浏览器

    3、重定向时的网址可以是任何网址; 转发的网址必须是本站点的网址

    二、重定向与请求转发使用

    • 前后两个页面 有数据传递用请求转发,没有则用重定向。
    • 比如servlet查询了数据需要在页面显示,就用请求转发。
    • 比如servlet做了update操作跳转到其他页面,就用重定向。
    展开全文
  • 重定向请求转发区别

    千次阅读 2020-09-10 16:53:52
    浏览器发起:两次请求,两次响应 浏览器先访问servlet1,没有想要资源,再返回了302重定向码,和location(另一个servlet地址) 浏览器拿到这两个参数后,再访问servlet2。 且地址栏会变化。 图解: 代码如下: ...

    重定向与请求转发的区别

    首先要知道,什么是重写向,什么是请求转发!

    重定向

    浏览器发起:两次请求,两次响应

    浏览器先访问servlet1,没有想要的资源,再返回了302重定向码,和location(另一个servlet地址)

    浏览器拿到这两个参数后,再访问servlet2。

    且地址栏会变化。

    图解:

    在这里插入图片描述

    代码如下:

    package com.lbl.servlet;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @WebServlet("/SendRedirect01Servlet")
    public class SendRedirect01Servlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.sendRedirect("/Day04_war_exploded/SendRedirect02Servlet");
        }
    }
    
    package com.lbl.servlet;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @WebServlet("/SendRedirect02Servlet")
    public class SendRedirect02Servlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.getWriter().println("success");
        }
    }
    

    效果图:

    在这里插入图片描述

    请求转发

    浏览器发起:一次请求,一次响应

    浏览器访问servlet1,然后servlet1请求转发到servlet2,此时requst和response域会传给servlet2,最后由servlet2响应浏览器。

    地址栏不变化

    图解:

    在这里插入图片描述

    代码如下:

    package com.lbl.servlet;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @WebServlet("/dispatcher01Servlet")
    public class Dispatcher01Servlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //将游戏本添加到requst域中
            request.setAttribute("name","游戏本");
            request.getRequestDispatcher("/dispatcher02Servlet").forward(request,response);
        }
    }
    
    package com.lbl.servlet;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @WebServlet("/dispatcher02Servlet")
    public class Dispatcher02Servlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //1.获取值
            String name = (String) request.getAttribute("name");
            //2.组装标签后,响应给浏览器
            response.setContentType("text/html;charset=utf-8");
            response.getWriter().println("<font color='red'>"+name+"</font>");
        }
    }
    

    效果图:

    在这里插入图片描述

    展开全文
  • 请求转发 重定向 地址栏是否改变 不变 改变 ...是否保留第一次请求数据 ...请求次数 ...跳转发生位置 ...为什么重定向会丢失request域?...重定向客户端请求两次,而request有效期在一次请求响应中有效。 ...
  • javaweb请求转发和重定向的区别 区别 重定向 请求准发 第二次请求谁请求 浏览器 服务器 浏览器发送了几次请求 两次以上 一次 servlet可以共享request 不可以 可以 地址栏发生改变了 否 浏览器...
  • 先说一下这概念: 转发过程:客户浏 览器发送http请求----》web服务器接受此请求--》调用内部一个方法在容器内部...在客户浏览器路径栏显 示仍然其第一访问路径,也就是说客户感觉不到服务器做了转
  • 什么是url重定向

    2021-01-04 20:15:25
    0X00: 什么是url重定向?...1、属于转发,也服务器跳转,也可以叫做内部重定向,相当于方法调用,在执行当前文件过程中转向执行目标文件,个文件(当前文件和目标文件)属于同一次请求,前后页共用一个reques
  • 1、二者的区别 重定向的特点:response.sendRedirect(); 1. 地址栏发生变化 2.... 3. 重定向是两次请求。不能使用request对象来共享数据 转发的特点:request.getRequestDispatcher("").forward(req...
  • Servlet 中请求转发 什么是请求转发? 请求转发指服务器收到请求后,从一次资源跳转到另一个资源操作叫请求转发。...个程序次请求 他们共享Request域中数据 可以转发到WEB-INF目录下 不可以访
  • 重定向是两次请求,转发一次请求,因此转发速度要快于重定向重定向之后地址栏上地址会发生变化,变化成第二次请求地址,转发之后地址栏上地址不会变化,还是第一次请求地址。 重点:重定向和请求转发...
  • 转发不会改变地址栏,重定向会. 转发是请求一次,重定向请求两次. ...重定向的第2个请求请求方式是什么,get. 转发中第2个servlet(jsp)是什么请求方式?第一个servlet是什么第2个就是什么. ...
  • 转发和重定向的区别和使用

    万次阅读 多人点赞 2019-03-19 15:26:24
    如果是同一次请求是可以取出来的。 转发与重定向的作用 在Servlet中实现页面的跳转有种方式:转发和重定向 什么是转发 概念 由服务器端进行的页面跳转 原理图 转发的方法 案例 需求 ​ 实现从OneServle...
  • 两次请求,两次响应 重定向不携带数据 重定向地址栏发生改变 (2)转发 一次请求,一次响应 转发需要携带数据,请求域中数据不会丢失 转发地址栏不会发生变化 疑问 问:什么时候使用转发,什么时候使用重定向? ...
  • 重定向是两次不同请求。 4.转发不会执行转发后代码;重定向会执行重定向之后代码。 5.forward将当前request和response对象保存,交给指定url处理。并没有表示页面跳转,所以地址栏不会有变化。而...
  • 重定向和转发

    2016-09-25 00:09:54
    问题: 将转发与重定向做对比,有什么异同?... 重定向: 两次请求 转发: 一次请求 2.浏览器的地址发生变化吗? 重定向: 会发生变化 转发: 不会发生变化 3.会改变请求方式吗? 重定向: 未必.重定向的第2次请求一定get
  • 关于iOS的重定向

    千次阅读 2016-12-27 11:44:26
    就让我们找B公司,结果B公司给我设计好了,所以我们会对外宣称B公司给我们设计名片,(所以我们就相当于发送了两次次请求,URL地址栏里就从A变成了B公司)一、ios webview怎么判断http是重定向
  • SpringMVC中转发和重定向

    千次阅读 2017-01-09 10:45:42
    3.转发同一次请求,重定向是两次请求 4.转发地址栏没有变化,重定向有变化 5.转发在同一台服务器,重定向不必。 具体举个例子,转发速度快,一般默认情况下用转发。但是有一些场景却不能用转发,比如我们登陆...
  • 转发与重定向的区别

    2020-09-08 18:44:24
    转发与重定向的区别: 二、本质区别 解释一 一句话,转发服务器行为,重定向客户端行为。为什么这样说呢,这就要看个动作的工作流程: 转发过程:客户浏览器发送http请求——》web服务器接受此请求——》调用...
  • 超链接也是重定向

    2013-04-19 09:23:58
    重定向应该有两次请求吧,但我用httpwatch观察,超链接只有一次请求,也就是只有一个request,response,然后我在服务器端试试获取页面设置request域值,也不能获取,那么超链接到底一个什么过程啊?
  • 转发重定向

    2020-09-09 08:00:20
    转发与重定向的区别: 二、本质区别 解释一 一句话,转发服务器行为,重定向客户端行为。为什么这样说呢,这就要看个动作的工作流程: 转发过程:客户浏览器发送http请求——》web服务器接受此请求——》调用...
  • 请求转发 什么是请求转发? 请求转发指:服务器收到请求后,从一个资源跳转到另一个资源操作叫请求转发。 请求转发特点 浏览器地址栏没有发生变化; 他们一次请求;...两次请求; 不能共享Req
  • 转发和重定向

    2020-07-26 19:36:02
    **重定向过程:**客户浏览器发送http请求,web服务器接受后发送302状态码响应及对应新location给客户浏览器,客户浏览器发现302响应,则自动再发送一个新...重定向行为浏览器做了至少两次的访问请求的。response.s
  • 目录 页面的跳转:转发 疑问 转发与重定向的作用 案例 转发的特点 ...什么是重定向 ...如果是同一次请求是可以取出来的 转发与重定向的作用 在Servlet中实现页面的跳转有种方式:转发和重定向 什
  • 重定向与转发

    2018-12-10 22:01:44
    2、重定向:向A中发出请求,A返回一个结果,这个结果中包含要重定向的资源,这个时候,浏览器会发出第二次请求过来给B,是两个请求。个请求的话,A中获取到的信息,B中获取不到的。 3、重定向 (1)...
  • 第二次请求谁请求? 浏览器 服务器 浏览器发送了几次请求? 2次以上 1次 servlet可以共享request吗? 不可以 可以 地址栏是否发生改变? 否 浏览器地址栏显示哪一次访问地址? 最后一次 第一次 ...

空空如也

空空如也

1 2 3 4 5 6
收藏数 114
精华内容 45
关键字:

重定向的两次请求是什么