1. 程式人生 > >spring學習之springMVC 返回型別選擇 以及 SpringMVC中model,modelMap.request,session取值順序

spring學習之springMVC 返回型別選擇 以及 SpringMVC中model,modelMap.request,session取值順序

spring mvc處理方法支援如下的返回方式:ModelAndView, Model, ModelMap, Map,View, String, void。下面將對具體的一一進行說明:
ModelAndView

Java程式碼  
  1. @RequestMapping("/show1")  
  2. publicModelAndView show1(HttpServletRequest request,  
  3.            HttpServletResponse response) throwsException {  
  4.        ModelAndView mav = newModelAndView(
    "/demo2/show");  
  5.        mav.addObject("account""account -1");  
  6.        returnmav;  
  7.    }  


通過ModelAndView構造方法可以指定返回的頁面名稱,也可以通過setViewName()方法跳轉到指定的頁面 ,
使用addObject()設定需要返回的值,addObject()有幾個不同引數的方法,可以預設和指定返回物件的名字。
呼叫addObject()方法將值設定到一個名為ModelMap的類屬性,ModelMap是LinkedHashMap的子類,
具體請看類。

Model 是一個介面, 其實現類為ExtendedModelMap,繼承了ModelMap類。


Map  

Java程式碼  
  1. @RequestMapping("/demo2/show")  
  2.     publicMap<String, String> getMap() {  
  3.         Map<String, String> map = newHashMap<String, String>();  
  4.         map.put("key1""value-1");  
  5.         map.put("key2""value-2");  
  6.         returnmap;  
  7.     }  


在jsp頁面中可直通過${key1}獲得到值, map.put()相當於request.setAttribute方法。
寫例子時發現,key值包括 - . 時會有問題.

View 可以返回pdf excel等,暫時沒詳細瞭解。

String 指定返回的檢視頁面名稱,結合設定的返回地址路徑加上頁面名稱字尾即可訪問到。
注意:如果方法聲明瞭註解@ResponseBody ,則會直接將返回值輸出到頁面。
例如:

Java程式碼  
  1. @RequestMapping(value = "/something", method = RequestMethod.GET)  
  2. @ResponseBody
  3. publicString helloWorld()  {  
  4. return"Hello World";  
  5. }  


上面的結果會將文字"Hello World "直接寫到http響應流。

Java程式碼  
  1. @RequestMapping("/welcome")  
  2. publicString welcomeHandler() {  
  3.   return"center";  
  4. }  


對應的邏輯檢視名為“center”,URL= prefix字首+檢視名稱 +suffix字尾組成。

void  如果返回值為空,則響應的檢視頁面對應為訪問地址

Java程式碼  
  1. @RequestMapping("/welcome")  
  2. publicvoidwelcomeHandler() {}  


此例對應的邏輯檢視名為"welcome"。

小結:
1.使用 String 作為請求處理方法的返回值型別是比較通用的方法,這樣返回的邏輯檢視名不會和請求 URL 繫結,具有很大的靈活性,而模型資料又可以通過 ModelMap 控制。
2.使用void,map,Model 時,返回對應的邏輯檢視名稱真實url為:prefix字首+檢視名稱 +suffix字尾組成。
3.使用String,ModelAndView返回檢視名稱可以不受請求的url繫結,ModelAndView可以設定返回的檢視名稱。

Model model,HttpServletRequest request, ModelMap map宣告變數

request.getSession().setAttribute("test", "haiwei2Session");
request.setAttribute("test", "haiwei1request"); 
map.addAttribute("test", "haiweiModelMap");
model.addAttribute("test", "haiweiModel");

我通過${test}這個方式取值,優先取Model和ModelMap的,Model和ModelMap是同一個東西,誰最後賦值的就取誰的,然後是request,最後是從session中獲取