Servlet JSP 之間的跳轉 response.sendRedirect()和RequestDispatcher().forward的比較

來源:互聯網
上載者:User

來自:http://blog.csdn.net/JavaEETeacher/archive/2009/06/23/4291523.aspx

 

Java Web開發中,採用MVC模式的時候,在控制器完成模型的調用之後會選擇介面對使用者響應,用常有兩種方式:

1、通過response對象的sendRedirect方法。

2、通過RequestDispatcher對象的forward方法。

例如要跳轉登入介面login.jsp,可以使用下面的兩種方式:

1、使用response

response.sendRedirect("login.jsp");

2、使用RequestDispatcher

RequestDispatcher rd = request.getRequestDispatcher("login.jsp");

rd.forward(request,response);

這兩種方式有什麼區別?什麼情況下應該使用哪一種方式呢?

首先介紹兩者的區別。

第一點區別,過程不同:第一種方式相當於瀏覽器接收到了響應之後又向伺服器發送了一次請求,所以相當於兩次請求。第二種方式相當於方法調用,在執行當前檔案的過程中轉向執行目標檔案,兩個檔案(當前檔案和目標檔案)屬於同一次請求,最本質的特點就是兩次請求共用了reques對象和response對象。

第二點區別,地址欄不同:第一種方式下使用者在瀏覽器地址欄中看到的是目標檔案的地址,第二種方式下使用者在瀏覽器地址欄中看到的是當前檔案的地址。這一點也非常重要,後面介紹。

在使用的時候具體應如何選擇呢?

如果兩個檔案的關係非常密切,則應該使用RequestDispatcher,如果兩個檔案沒有直接的關聯關係,則應該使用response的sendRedirect方法。什麼樣的關係算是關係密切,什麼樣的關係算是沒有直接的關聯關係呢?例如查詢的控制器和查詢的結果介面之間就應該算是關係密切,因為查詢控制器處理完之後肯定要轉向查詢結果介面。再例如添加資訊的控制器和查詢控制器之間的關係就是沒有直接關係,通常在添加資訊之後會跳轉到列表介面的控制器然後再跳轉到列表介面,修改資訊或者刪除資訊之後也可能會跳轉到列表介面的控制器然後再跳轉到列表介面。

下面是兩個比較特殊的應用:

1、如果希望通過request把當前在控制器中擷取的資訊傳遞給目標檔案(通過request.setAttribute和request.getAttribute),這時候應該選擇RequestDispatcher。因為需要當前檔案和目標檔案共用request對象。通常用於查詢。

2、對資料進行修改(包括刪除和添加操作)的功能的控制器與之後的介面或者控制器應該採用response.sendRedirect方式。如果採用了RequestDiapatcher的forward方式,會產生嚴重錯誤。因為地址欄是修改資訊的控制器,如果使用者在重新整理的時候,會重新發送一次對資料進行修改的請求,這不是使用者想看到的結果。所以有同學在做添加功能的時候,每重新整理一次就添加一條。

如何採用第二種方式,如何傳遞資料呢?有兩種方式:

1、可以選擇session,但是在第二個檔案中一定要刪除。

2、可以在請求字串中編寫,例如login.jsp?info="使用者不存在!"

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.