Spring MVC 中的 forward 和 redirect

        Spring MVC 中,我們在返回邏輯視圖時,框架會通過 viewResolver 來解析得到具體的 View,然後向瀏覽器渲染。假設邏輯視圖名爲 hello,通過配置,我們配置某個 ViewResolver 如下: 
Xml代碼  收藏代碼
  1. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  2.     <description>  
  3.         假如邏輯試圖名爲 "hello",因此 viewResolver 將解析成 /WEB-INF/jsp/hello.jsp  
  4.     </description>  
  5.     <property name="order" value="10" />  
  6.     <property name="prefix" value="/WEB-INF/jsp/" />  
  7.     <property name="suffix" value=".jsp" />  
  8. </bean>  

        實際上,框架還是通過 forward 的方式轉發到了 /WEB-INF/jsp/hello.jsp。如果邏輯視圖名是 /hello,實際還是轉發到了 /WEB-INF/jsp/hello.jsp,即 /WEB-INF/jsp//hello.jsp 等同於 /WEB-INF/jsp/hello.jsp。 

        現在有個問題,如果 /hello 就是某個 controller 的映射,我想轉發到這個 controller,怎麼辦?我們可以通過forward 前綴來達到轉發到其它資源的目的: 
Java代碼  收藏代碼
  1. public String handle() {  
  2.     // return "forward:/hello" => 轉發到能夠匹配 /hello 的 controller 上  
  3.     // return "hello" => 實際上還是轉發,只不過是框架會找到該邏輯視圖名對應的 View 並渲染  
  4.     // return "/hello" => 同 return "hello"  
  5.     return "forward:/hello";  
  6. }  


        同理,如果我們想重定向到某個資源,我們可以通過 redirect 前綴來達到重定向到其它資源的目的: 
Java代碼  收藏代碼
  1. public String handle() {  
  2.     // 重定向到 /hello 資源  
  3.     return "redirect:/hello";  
  4. }  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章