利用這個方法如果跳轉前有request.setAttribute("a","b")的話,那麼參數是傳不到success.jsp,因爲它在客戶端重定向到success.jsp了,本質上跳了2次。所以參數失效,使用這個的時候會發現瀏覽器的URL地址發生了變化。
方法二:RequestDispatcher rd = getServletContext().getRequestDispatcher("/login.jsp"); rd.forward(request,response); 利用這個方法跳轉,參數可以被正確傳送,而且效率比第一種高,IE的URL地址不變。
在什麼地方用就是看自己的需求了。具體問題具體分析。
response.sendRedirect=把地址發送到瀏覽器端,讓瀏覽器再請求,這是地址欄變的原因
request.getRequestDispatcher().forward=服務端的控制權轉向,等於從一個servletClass跳到另一個servletClass或jsp繼續運行,最後才返回所有的結果,所以地址欄不會變
request中attribute與parameter的有效期是在一次請求後,而實際使用第一種情況後發生了再次請求,所以是attribute與parameter丟失的原因。
效率上講1肯定不如2,但有時候你必須得用1,其他時候用2即可。