1. 程式人生 > >Servlet跳轉頁面的幾種方法總結

Servlet跳轉頁面的幾種方法總結

servlet跳轉頁面的方法:
跳轉分為兩部分,一部分發生在servlet,另一部分發生在JSP,JSP就是servlet,但是兩者還是有部分差異。
Servlet:(跳轉發生在doGet,doPost等方法裡)
(1)redirect方式
response.sendRedirect(“/index.jsp”);頁面的路徑是相對路徑。sendRedirect可以將頁面跳轉到任何頁面,不一定侷限於web應用中,如:response.sendRedirect(”http://www.baidu.com“);
跳轉後瀏覽器地址發生變化,只能在url總帶parameter或者放在session中,無法使用request.setAttribute來傳遞值。
(2)forward方式
request.getRequestDispatcher(“/index.jsp”).forward(request,response);頁面的路徑是對路徑。forward方式只能跳轉到本web應用中的頁面上。跳轉後位址列不會發生變化。使用這種方式跳轉,傳值可以使用三種方法:url中帶parameter,session,request.setAttribute

JSP:
(1)response.sendRedirect();
和servlet的response.sendRedirect()方式一樣
跳轉後瀏覽器位址列會變化,如果要跳轉到不同主機下,跳轉後,此語句後面的語句,如同新開了執行緒,但是對response的 操作已經沒有意義了;如果要跳到相同主機下,此語句後面的語句執行完成後才會跳轉;
(2)response.setHeader(“Location”,”“);
跳轉後瀏覽器位址列發生變化,此語句後面的語句執行完成後才能發生調轉
(3)
跳轉後瀏覽器位址列不變,但是隻能跳轉到當前主機下,此語句後面的執行語句執行完成後才會跳轉
請求轉發RequestDispatcher.forward方法和響應(重定向)轉發HttpServletResponse.sendRedirect方法的總結比較:
一、RequestDispatcher.forward方法只能將請求轉發給同一個web應用中的元件,而HttpServletResponse.sendRedirect方法不僅可以重定向到當前應用程式中的其他資源,還可以重定向到同一個站點上的其他應用程式中的資源,甚至是使用絕對URL重定向到其他站點的資源。如果傳遞給HttpServletResponse.sendRedirect方法的相對URL以”/”開頭,它是相對於整個web站點的根目錄;如果建立RequestDispatcher物件時指定的相對URL以”/”開頭,它是相對於當前web應用程式的根目錄。
二、呼叫HttpServletResponse.sendRedirect方法重定向的訪問過程結束後,瀏覽器位址列中顯示的URL會發生改變,由初始的URL地址重定向為目標URL;而呼叫RequestDispatcher.forward方法的請求轉發過程結束後,瀏覽器位址列保持初始的URL地址不變。
三、HttpServletResponse.sendRedirect方法對瀏覽器請求直接作出響應,響應的結果就是告訴瀏覽器重新發出對另一個URL的訪問請求;RequestDispatcher.forward方法在伺服器端內部發生了轉發行為。
四、RequestDispatcher.forward方法的呼叫者與被呼叫者之間共享相同的request物件,它們屬於同一個訪問請求和響應過程;而HttpServletResponse.sendRedirect方法呼叫者與被呼叫者使用各自的request物件和response物件,它們屬於兩個獨立的訪問請求和響應過程。對於同一個web應用程式的內部資源之間的跳轉,特別是跳轉之前要對請求進行一些前期預處理,並使用HttpServletRequest.setAttribute方法傳遞預處理結果,那就應該使用RequestDispatcher.forward方法。不同web應用程式之間的重定向,特別是要重定向到另一個web站點上的資源情況,都應該使用HttpServletResponse.sendRedirect方法。
五、無論哪種方法,在呼叫它們之前,都不能有內容已經被實際輸出到了客戶端。如果緩衝區已 經有了一些內容,這些內容將從緩衝區中清除。

重定向和請求轉發有一個重要的不同:當使用請求轉發時,JSP容器將使用一個內部的方法來呼叫目標頁面,新的頁面繼續處理同一個請求,而瀏覽器將不會知道這個過程。 與之相反,重定向方式的含義是第一個頁面通知瀏覽器傳送一個新的頁面請求。因為,當你使用重定向時,瀏覽器中所顯示的URL會變成新頁面的URL, 而當使用轉發時,該URL會保持不變。重定向的速度比轉發慢,因為瀏覽器還得發出一個新的請求。同時,由於重定向方式產生了一個新的請求,所以經過一次重定向後,request內的物件將無法使用。