servlet中的sendRedirect和forward都可以讓浏覽器轉到不同的頁面,他們的差別相差還是很大的。
1.他們的調用方法是不一樣的,假設他們都是在ControlServlet使用這兩種方式,當讓浏覽器轉到MainFrameServlet頁面時,sendRedirect方法需要要web應用名,但forward不需要。
//都是讓浏覽器轉向同一個頁面
response.sendRedirect("/myServlet/MainFrameServlet");
request.getRequestDispatcher("/MainFrameServlet").forward(request,response);
2.forward是發生在web伺服器,也就是說它使用request請求web服務,是以ControlServlet與MainFrameServlet使用的是同一個request和response,也就是說這算一次Http請求,而sendRedirecr發生在浏覽器,它使用的是response對象告訴浏覽器轉到MainFrame頁面,這中間使用Httpfox會發現有兩次請求,狀态碼分别是302和200,是以這算是兩次http請求,是以兩次的request和response不一樣。
3.URL的範圍不一樣,sendRedirect是兩次http請求,是以它可以去往任何界面,但是forward由于是一次http請求,是以隻能去往這個web應用下的資源界面。
4.forward可以使用request.setAttribute()方法将屬性傳遞給下一個界面,因為它們是同一個http請求,Request對象是同一個,但sendRedirect不行,因為它發出的是兩次http請求,上一次的Request對象已經被銷毀。
5.forward方式轉發多次時,浏覽器位址欄中保留的是第一次轉發時的位址URL,而sendRedirect保留的是最後一次的位址URL
特别注意:隻要程式沒有停止,也沒有回到浏覽器,就算一次http請求。