test.jsp頁面中
1. System.out.println( "before response.sendRedirect ");
2. response.sendRedirect( "/target.jsp ");
3. System.out.println( "after response.sendRedirect ");
為什麼無論如何第三行都會執行呢?
我以為sendRedirect執行了,請求就跳轉了,後面的代碼應該不執行的,但是現在來看是要繼續執行的,明白的幫忙解釋一下,謝謝。
//===================================================================================================
哪裡 說一個方法的結束就是return?
那麼按照您的意思,只要我不加上return,那麼sendRedirect後面的全部代碼都要執行嘍?那什麼時候頁面才跳轉啊?
如你所說的話,這樣的代碼會如何走?
response.sendRedirect( "/a.jsp ");
response.sendRedirect( "/b.jsp ");
response.sendRedirect( "/c.jsp ");
response.sendRedirect( "/d.jsp ");
//===================================================================================================
我同意csdn_pistachio,sendRedirect()也無非只是一個普通的方法調用,
個人認為response.sendRedirect( "/a.jsp ");
response.sendRedirect( "/b.jsp ");
response.sendRedirect( "/c.jsp ");
response.sendRedirect( "/d.jsp ");最後轉到了d.jsp,只不過是讓用戶端瀏覽器發送了三個重新導向的命令而已.對伺服器端沒有什麼影響.所以在後面可以進行資料庫儲存處理都可以.
//===================================================================================================
回wts(天勝)&xchn(xchn)
雖然在調用了sendRedirect()之後就不能再對reponse做任何輸出(包括再次sendRedirect,所以樓上的寫法也是錯的),但此時瀏覽器還沒有真正接收到該指令,重新導向指令是在sendRedirect之後的代碼執行完以後才真正發送到用戶端的,然後用戶端瀏覽器去請求新的url。這就是重新導向的執行過程。
//===================================================================================================
“我以為sendRedirect執行了,請求就跳轉了,後面的代碼應該不執行的,但是現在來看是要繼續執行的,明白的幫忙解釋一下,謝謝。”
不要用傳統java應用程式的行為特徵來看待B/S下的web Application的行為特徵。
其實驗證很簡單,在你的代碼第二次System.out前加入一空迴圈延時一下,看看重新導向頁面先出來還是控制台的 "after response.sendRedirect "現出來就可以判斷了。
加入代碼:
response.sendRedirect( "date.jsp ");
response.flushBuffer();//可以證明即使已經提交,但也並沒有立即發送到用戶端
for (int i=0; i <9999; i++)//數字大小視你的機器效能而定
for (int j=0; j <99999; j++);
System.out.println( "after redirect ");