【轉發與重定向的區別 】

轉發是服務器行爲,重定向是客戶端行爲web

1.轉發在服務器端完成的;重定向是在客戶端完成的
2.轉發的速度快;重定向速度慢
3.轉發的是同一次請求;重定向是兩次不一樣請求
4.轉發不會執行轉發後的代碼;重定向會執行重定向以後的代碼
5.轉發地址欄沒有變化;重定向地址欄有變化
6.轉發必須是在同一臺服務器下完成;重定向能夠在不一樣的服務器下完成
瀏覽器

servlet中調用轉發、重定向的語句以下:服務器

  1. request.getRequestDispatcher("new.jsp").forward(request, response);//轉發到new.jsp  
    併發


  2. response.sendRedirect("new.jsp");//重定向到new.jspjsp

複製代碼ide

轉發過程:客戶瀏覽器發送http請求,web服務器接受此請求,調用內部的一個方法在容器內部完成請求處理和轉發動做,將目標資源發送給客戶;在這裏,轉發的路徑必須是同一個web容器下的url,其不能轉向到其餘的web路徑上去,中間傳遞的是本身的容器內的request。在客戶瀏覽器路徑欄顯示的仍然是其第一次訪問的路徑,也就是說客戶是感受不到服務器作了轉發的。轉發行爲是瀏覽器只作了一次訪問請求。post

重定向過程:客戶瀏覽器發送http請求,web服務器接受後發送302狀態碼響應及對應新的location給客戶瀏覽器,客戶瀏覽器發現是302響應,則自動再發送一個新的http請求,請求url是新的location地址,服務器根據此請求尋找資源併發送給客戶。在這裏location能夠重定向到任意URL,既然是瀏覽器從新發出了請求,則就沒有什麼request傳遞的概念了。在客戶瀏覽器路徑欄顯示的是其重定向的路徑,客戶能夠觀察到地址的變化的。重定向行爲是瀏覽器作了至少兩次的訪問請求的。重定向,實際上是兩次request,url

第一次,客戶端request   A,服務器響應,並response回來,告訴瀏覽器,你應該去B。這個時候IE能夠看到地址變了,並且歷史的回退按鈕也亮了。重定向能夠訪問本身web應用之外的資源。在重定向的過程當中,傳輸的信息會被丟失。以下舉例:spa

登錄頁面:login.jsporm

  1. <body>


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


  3.           用戶名:<input type="text" name="userName"  value=""/>


  4.       <br/>


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


  6.       <br/>


  7.        <input type="submit" value="登錄"/>


  8.    </form>


  9. </body>

複製代碼

跳轉頁面:control.jsp

轉發

  1. <body>


  2.    <%


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


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


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


  6.         //轉發:不須要項目名


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


  8.       } else {


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


  10.       }


  11.   %>


  12. </body>


複製代碼

重定向:

  1. <body>


  2.    <%


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


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


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


  6.         //重定向


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


  8.       } else {


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


  10.       }


  11.   %>


  12. </body>

複製代碼

歡迎界面:welcome.jsp

  1. <body>


  2.    <br /> 歡迎您


  3.    <%


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


  5. %>


  6.    <%=name%>


  7. </body>

複製代碼

相關文章
相關標籤/搜索