Forward與Redirect
在做前臺開發過程中妳可能經常遇到關於轉發頁面得操作,很顯然的就想到了forward和redirect,但是到底用哪壹個呢,他們之間有什麽區別呢,現在我將我自己的理解以及開發的時候怎麽應用寫出來供大家參考壹下:
(1)***同點:
都實現了根據自己的條件實現的頁面得跳轉。
(2)區別
(3)例子:
譬如:client 通過XXX\index.jsp?name=gauss&pwd=123訪問index.jsp,而index.jsp中有<jsp:forward page="login.jsp"/>,則在login.jsp中可以通過request.getParameter()得到name和pwd,而<%response.sendRedirect("login.jsp");%>得不到。
(4) 註意
壹般在index.jsp頁面之前有個提交數據的頁面default.jsp,則defautl.jsp頁面提交的數據就可以在login.jsp頁面得到,而不是得到index.jsp頁面提交的數據,index.jsp頁面只是執行的都是壹個轉發操作當然在裏面可以增加也寫業務操作,他可以得到request的數據,用XXX\index.jsp?name=gauss&pwd=123這種方式登錄就是省略了index.jsp前面的壹個頁面提交數據而已
前者僅是容器中控制權的轉向,在客戶端瀏覽器地址欄中不會顯示出轉向後的地址;後者則是完全的跳轉,瀏覽器將會得到跳轉的地址,並重新發送請求鏈接。這樣,從瀏覽器的地址欄中可以看到跳轉後的鏈接地址。所以,前者更加高效,在前者可以滿足需要時,盡量使用forward()方法,並且,這樣也有助於隱藏實際的鏈接。在有些情況下,比如,需要跳轉到壹個其它服務器上的資源,則必須使用
sendRedirect()方法。
forward是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然後把這些內容再發給瀏覽器,瀏覽器根本不知道服務器發送的內容是從哪兒來的,所以它的地址欄中還是原來的地址。
redirect就是服務端根據邏輯,發送壹個狀態碼,告訴瀏覽器重新去請求那個地址,壹般來說瀏覽器會用剛才請求的所有參數重新請求,所以session,request參數都可以獲取。