1.sendRedirect時,服務器端先響應客戶端一個狀態碼(通常是302),告訴客戶端應該向location報頭指定的URL(可以是相對路徑)重新發送請求。然后客戶端按照指示進行第二次請求;
2.forward時,操作完全在服務器端進行,由服務器直接執行新的URL。客戶端甚至毫不知情。
3.由于sendRedirect是由客戶端自動請求的,所以客戶的第一次的請求數據就不能得到保存;相反,在forward的情況,客戶第一次的請求數據得到了保存,即在新的URL里能夠得到原先的請求數據。
4.在相同的情況下,由于sendRedirect相當于客戶的兩次請求,所以forward的效率較sendRedirect要好。
5.sendRedirect()一定要在response對象,別的語言的頭域輸出沒有輸出正文時才能使用,因為按W3C標準,頭域在在輸出后是不許改變狀態的,只有JSP和SERVLET可以改變它,而一但有正文輸出,就會產生BUFFER阻塞.
比如\r
<%
out.println("sss");
response.sendRedirect("url");
%>
這是錯誤的.或者在此之前有HTML
<HTMLMWPW>
<%
response.sendRedirect("url");
%>
這了是錯誤的,因為HTML內容也是out對象輸出的,response對象已經被占用.這時應該用forward()才對.