forward 轉發,如return "forward:/hello"; 瀏覽器的地址欄不會變,可是有視圖返回來spring
redirect 重定向,如return "redirect:/hello"; 瀏覽器的地址欄會變。瀏覽器
網絡解釋:服務器
spring控制器最後返回一個ModelAndView(urlName),其中urNamel能夠是一個視圖名稱,由視圖解析器負責解析後將響應流寫回客戶端;也能夠經過redirect/forward:url方式轉到另外一個控制器進行處理.網絡
redirect方式至關於」response.sendRedirect()」.這種方式外部特徵就是瀏覽器地址欄最後顯示的路徑是轉發後的新的路徑.工做方式是這樣的, 服務器端會首先發一個response給瀏覽器, 而後瀏覽器收到這個response後再發一個requeset給服務器, 而後服務器發新的response給瀏覽器. 這時頁面收到的request是一個新從瀏覽器發來的.這種方式的結果是:url
A.在轉發先後有兩個不一樣的request對象,轉發先後的兩個控制器在request上的參數(request.getParameter())和request屬性(request.getAttribute())不能共享;spa
B.若是轉發先後的兩個控制器都配置在spring 攔截器範圍內,這樣攔截器會攔截先後兩個request,即會攔截兩次;對象
C.最後返回到瀏覽器後,由於地址欄顯示的是轉發後的url,因此刷新頁面時只會執行後面的url映射的控制器.get
forward方式至關於request.getRequestDispatcher().forward(request,response),這種方式的外部特徵是瀏覽器地址顯示的路徑是轉發前的路徑.工做方式是這樣,forward 發生在服務器內部,在前一個控制器處理完畢後,直接進入下一個控制器處理, 並將最後的response發給瀏覽器. 這種方式的結果是:博客
A.轉發先後是同一個request,後一個控制器可共享前一個控制器的參數與屬性;服務器端
B.由於是同一個request,攔截器只會攔截前一個url,若是前一個url在映射時未配置到攔截器攔截,則攔截後一個url,即只攔截一次;
C.最後返回到瀏覽器後,由於地址欄顯示的是轉發前的url,因此刷新頁面時會依次執行先後兩個控制器.
這是之前在別的文章系統記錄的筆記,如今轉存到博客園
此文章屬轉載他人文章,可是轉載地址之前沒記錄,請筆者原諒,若是有侵犯到您的任何權益請聯繫本人,本人會第一時間刪除