javaweb中的幾種跳轉

初衷:將登錄用戶的用戶名 密碼form提交到頁面2(jsp就是servlet  提交到servlet的就不說了) 由頁面2判斷用戶名密碼的正確性繼而決定跳轉的方向 下面是幾種實現方法

使用href超鏈接標記      客戶端跳轉

使用javascript               客戶端跳轉

提交表單                        客戶端跳轉

使用response對象      客戶端跳轉

使用forward總做標記  服務器跳轉

使用requestDispatcher類 服務器跳轉

頁面1

[html] view plaincopy
  1. <form name="form1" method="POST" action="login02.jsp">  
  2.    <input type="text" name="name">  
  3.    <input type="text" name="psd">  
  4.    <input type="submit" value="提交">  
  5.    <input type="reset" value="重置">  


頁面2

[html] view plaincopy
  1. <%response.setCharacterEncoding("utf-8");  
  2. response.setHeader("iso-8859-1","utf-8");  
  3. request.setCharacterEncoding("utf-8");  
  4.     String name = request.getParameter("name");  
  5.     String psd  = request.getParameter("psd");  
  6.     if(name.equals("admin")&&psd.equals("123")){%>  
  7.     <script type="text/javascript">  
  8.     window.location="login03.jsp";  
  9.     </script>  
  10.    <% }  
  11.    else{  %>  
  12.          <script type="text/javascript">  
  13.          window.location="http://www.baidu.com";  
  14.          alert(window.location.href);  
  15.          </script>  
  16.    <% }%>  


頁面1提交到頁面2之後 java代碼負責判斷 然後通過js代碼進行跳轉

 

頁面3

[html] view plaincopy
  1. <%response.setCharacterEncoding("utf-8");  
  2. response.setHeader("iso-8859-1","utf-8");  
  3. request.setCharacterEncoding("utf-8");  
  4.     String name = request.getParameter("name");  
  5.     String psd  = request.getParameter("psd");  
  6.       if(name.equals("admin")&&psd.equals("123")){  
  7.       response.sendRedirect("http://www.baidu.com");//路徑001  
  8.       return;  
  9.       }  
  10.       else{  
  11.       response.sendRedirect("login01.jsp");  
  12.       return;  
  13.       }  
  14.     %>  


頁面1提交到頁面3之後通過 response對象的sendredirect()方法 重定向

在上段代碼的路徑001中說明一點 sendredirect()中的URL是可以帶參數 eg sendredirect("url?name="+name);

重定向 順便傳遞參數 sendredirect注意的第二點:一般此句之後緊跟一句 return;(原因:通過sendredirect方法做重定向是在頁面處理完之後纔會有實際動作的,譬如上個例子裏 頁面的用戶名 密碼輸入完畢 點擊提交 然後後一個頁面判斷 判斷完即處理完 頁面3是不需要輸出的 也是輸不出來東西的 沒有return再有別的輸出是沒有意義的 而且有的時候芳兒因爲無意義的輸出而報錯)

使用 response對象實現頁面的跳轉有2中方法 上面是一種 下面這種是是利用 setHeader()方法

還是頁面1提交 把頁面3的代碼修改一下就可以了:

[html] view plaincopy
  1. <%response.setCharacterEncoding("utf-8");  
  2.   response.setHeader("iso-8859-1","utf-8");  
  3.   request.setCharacterEncoding("utf-8");  
  4.       String name = request.getParameter("name");  
  5.       String psd  = request.getParameter("psd");  
  6.         if(name.equals("admin")&&psd.equals("123")){  
  7.       //  response.sendRedirect("http://www.baidu.com");  
  8.      //   return;  
  9.      response.setHeader("Refresh","1;url=http://www.baidu.com");  
  10.         }  
  11.         else{  
  12.        // response.sendRedirect("login01.jsp");  
  13.        // return;  
  14.        response.setHeader("Refresh","1;url=login01.jsp");  
  15.         }  
  16.       %>  


response.setHeader("Refresh","等待的秒數;url=絕對路徑或者相對路徑"); 路徑問題sendredirect也一樣 絕對路徑相對路徑都沒意見 上例都是等待1秒之後跳轉

 

response重定向和forward跳轉的區別

response:1執行完所有的代碼再跳轉到目標頁 2跳轉到目標頁後瀏覽器的URL會改變 3在瀏覽器中重定向 4可以跳轉到其他服務器上的頁面 eg:百度。

forward跳轉:1直接跳轉到目標網頁 其後的代碼不再執行 2跳轉到目標頁後URL不變 雖然URL顯示的是index1.jsp 但其實你看的index2。jsp的內容 3在服務器端重定向 4無法跳轉到其他服務器上的頁面

 

RequestDispatcher類

基本方法

RequestDispatcher  rd = request.getRequestDispatcher("目標頁面");

rd.forward(response,request);

使用 RequestDispatcher跳轉與forward動作標記實現頁面跳轉的基本原理是一樣的。

RequestDispatcher與response重定向跳轉的區別:1執行完所有代碼再跳轉到目標頁 2跳轉到目標頁後URL不變 雖然URL顯示的是index1.jsp 但其實你看的index2.jsp的內容 3在服務器端重定向 4無法跳轉到其他服務器上的頁面

RequestDispatcher與forward動作標記跳轉的區別:forward 1 forward動作標記之後的代碼不再執行 立即跳轉到目標頁面 2指定目標頁面時既可以用絕對路徑也可以用相對路徑

RequestDispatcher跳轉 1執行完所有代碼 包括RequestDispatcher之後的所有代碼再跳轉到目標頁面 2指定目標頁面時只能用絕對路徑

 

 Servlet可通過兩種方式得到RequestDispatcher對象:調用ServletContext的getRequestDispatcher(String path)方法,path參數指定目標組件的路徑。調用ServletRequest的getRequestDispatcher(String path)方法以上兩種方式的區別在於,前者的path參數必須是絕對路徑,而後者的path參數可以是絕對路徑,也可以是相對路徑。所謂絕對路徑,就是指以符號"/"開頭的路徑,"/"表示當前web應用的URL入口。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章