前言:關於轉發和重定向的問題是JavaWeb後端開發面試中比較容易被問到的問題,有時候容易弄混淆,今天翻了翻之前的教課書,打算寫一篇博客來對這兩者的區別做一個比較詳細的講解,希望能夠幫助到閱讀的人!
轉發:request.getRequestDispatcher (“demo.jsp"). forward(request, response);
(jsp中可以使用jsp動作指令來實現)<jsp:forward page="demo.jsp"></jsp:forward>
重定向:response.sendRedirect(“demo.jsp");
兩者的區別:
I.從瀏覽器的地址顯示上
forward方法屬於服務器端去請求資源,服務器直接訪問目標地址,並對該目標地址的相應內容進行讀取,再把讀取的內容發給瀏覽器,因此客戶端瀏覽器的地址不變;而redirect是告訴客戶端,使瀏覽器知道去請求哪一個地址,相當於客戶端重新請求一遍,所以地址顯示欄會變。
II.從數據共享來看
forward轉發的頁,以及轉發到的目標7頁面能夠共享request裏面的數據;而redirect轉發的頁及轉發到的目標頁面不能共享request裏面的數據。
III.從功能來看
redirect能夠重定向到當前應用程序的其他資源,還能重定向到同站點的其他應用程序的資源,甚至使用絕對url地址重定向到其他站點的資源;而forward只能在同一個Web應用程序內的資源之間轉發請求,可理解爲服務器內部的一種操作。
IV.從效率來看
forward效率較高,因爲跳轉僅發生在服務器端;redirect相對較低,因爲類似於再進行一次請求