Java中轉寄與重新導向的區別

來源:互聯網
上載者:User

標籤:

                       轉寄與重新導向的區別

轉寄是伺服器行為,重新導向是用戶端行為

1.轉寄在伺服器端完成的;重新導向是在用戶端完成的
2.轉寄的速度快;重新導向速度慢
3.轉寄的是同一次請求;重新導向是兩次不同請求
4.轉寄不會執行轉寄後的代碼;重新導向會執行重新導向之後的代碼
5.轉寄地址欄沒有變化;重新導向地址欄有變化
6.轉寄必須是在同一台伺服器下完成;重新導向可以在不同的伺服器下完成

在servlet中調用轉寄、重新導向的語句如下:

request.getRequestDispatcher("new.jsp").forward(request, response);//轉寄到new.jsp  

response.sendRedirect("new.jsp");//重新導向到new.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應用以外的資源。在重新導向的過程中,傳輸的資訊會被丟失。

 

如下舉例:

登陸頁面:login.jsp

<body>

    <form name="form1" method="post" action="Control.jsp">

          使用者名稱:<input type="text" name="userName"  value=""/>

      <br/>

       密碼:<input type="text" name="userPwd"/>

      <br/>

       <input type="submit" value="登陸"/>

   </form>

</body>

跳轉頁面:control.jsp

轉寄

<body>

   <%

      String name = request.getParameter("userName");

      String pwd = request.getParameter("userPwd");

      if (name.equals("admin") && pwd.equals("admin")) {

        //轉寄:不需要項目名

   request.getRequestDispatcher("/result.jsp").forward(request, response);

      } else {

        response.sendRedirect(path + "/Login.jsp");

      }

  %>

</body>

重新導向:

<body>

   <%

      String name = request.getParameter("userName");

      String pwd = request.getParameter("userPwd");

      if (name.equals("admin") && pwd.equals("admin")) {

        //重新導向

        response.sendRedirect(path+"/result.jsp");

      } else {

        response.sendRedirect(path + "/login.jsp");

      }

  %>

</body>

歡迎介面:welcome.jsp

<body>

   <br /> 歡迎您

   <%

   String name = request.getParameter("userName");

%>

   <%=name%>

</body>

Java中轉寄與重新導向的區別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.