zoukankan      html  css  js  c++  java
  • 转发和重定向的区别

    示例:
    //获取username信息
      String username=request.getParameter("username");
     //转发与重定向
       if(username.equals("admin")){
      //提示用户已存在,不能注册
          request.setAttribute("message","该用户已存在,不能注册");//添加提示信息,需要在userCreate.jsp页面中进行提示信息展示
          request.getRequestDispatcher("userCreate.jsp").forward(request, response);//转法
       }else{
      //提示注册成功
          request.setAttribute("message","注册成功");
          response.sendRedirect("indext.jsp");//重定向
        }
     

    转发与重定向的区别:
       二、本质区别
          解释一
               一句话,转发是服务器行为,重定向是客户端行为。为什么这样说呢,这就要看两个动作的工作流程:
               转发过程:客户浏览器发送http请求——》web服务器接受此请求——》调用内部的一个方法在容器内部完成请求处理和转发动作——》将目标
               资源发送给客户;在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。
               在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。
               重定向过程:客户浏览器发送http请求——》web服务器接受后发送302状态码响应及对应新的location给客户浏览器——》客户浏览器发现是302响应,
               则自动再发送一个新的http请求,请求url是新的location地址——》服务器根据此请求寻找资源并发送给客户。在这里location可以重定向到任意URL,
               既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。
               重定向行为是浏览器做了至少两次的访问请求的。
          解释二
               重定向,其实是两次request
               第一次,客户端request?? A,服务器响应,并response回来,告诉浏览器,你应该去B。这个时候IE可以看到地址变了,而且历史的回退按钮也亮了。
               重定向可以访问自己web应用以外的资源。在重定向的过程中,传输的信息会被丢失。
                  例子:
                       response.sendRedirect("loginsuccess.jsp");
                       请求转发是服务器内部把对一个request/response的处理权,移交给另外一个
                       对于客户端而言,它只知道自己最早请求的那个A,而不知道中间的B,甚至C、D。传输的信息不会丢失。
                  例子:
                      RequestDispatcher dis=request.getRequestDispatcher(“loginsuccess.jsp”);
                         dis.forward(request,response);
           解释三
               假设你去办理某个执照
               重定向:你先去了A局,A局的人说:“这个事情不归我们管,去B局”,然后,你就从A退了出来,自己乘车去了B局。
               转发:你先去了A局,A局看了以后,知道这个事情其实应该B局来管,但是他没有把你退回来,而是让你坐一会儿,自己
               到后面办公室联系了B的人,让他们办好后,送了过来。

      最后在来一个书面解释加深印象:

            1.重定向的执行过程:Web服务器向浏览器发送一个http响应--》浏览器接受此响应后再发送一个新的http请求到服务器--》

              服务器根据此请求寻找资源并发送给浏览器。它可以重定向到任意URL,不能共享request范围内的数据。

            2.重定向是在客户端发挥作用,通过新的地址实现页面转向。

            3.重定向是通过浏览器重新请求地址,在地址栏中可以显示转向后的地址。

            4.转发过程:Web服务器调用内部方法在容器内部完成请求和转发动作--》将目标资源发送给浏览器,它只能在同一个Web应用中

               使用,可以共享request范围内的数据。

            5.转发是在服务器端发挥作用,通过forward()方法将提交信息在多个页面间进行传递。

            6.转发是在服务器内部控制权的转移,客户端浏览器的地址栏不会显示出转向后的地址。

  • 相关阅读:
    AtCoder Beginner Contest 205
    Codeforces Round #725 (Div. 3)
    Educational Codeforces Round 110 (Rated for Div. 2)【A
    Codeforces Round #722 (Div. 2)
    AtCoder Beginner Contest 203(Sponsored by Panasonic)
    AISing Programming Contest 2021(AtCoder Beginner Contest 202)
    PTA 520 钻石争霸赛 2021
    Educational Codeforces Round 109 (Rated for Div. 2)【ABCD】
    AtCoder Beginner Contest 200 E
    Educational Codeforces Round 108 (Rated for Div. 2)【ABCD】
  • 原文地址:https://www.cnblogs.com/lowerma/p/11264994.html
Copyright © 2011-2022 走看看