spring中Model,ModelMap,以及ModelAndView之間的區別
概述
隨著SSM框架的流行開展,肯定會涉及到SpringMVC.
表現層的設計一般都使用 MVC 模型。( MVC 是表現層的設計模型,和其他層沒有關係)
-
獲取請求資料
-
呼叫service
3.根據servic返回結果,響應返回資料
下面來說說Model,ModelMap,以及ModelAndView之間的區別
Model
Model是一個介面,實現類為ExtendedModeMap,繼承ModeMap類
public class ExtendedModeMap extends ModelMap implements Model
ModelMap
ModelMap繼承LinkedHashMap
public class ModelMap extends LinkedHashMap<String,Object>
Model和ModelMap的區別
作用:
通過Model與ModelMap可以往request域中儲存資料。
Model與ModelMap作為控制器方法的引數。
共同:
1.Model與ModelMap例項都是springMVC自動建立並作為控制器方法引數傳入,無需使用者建立,且要return指定返回的頁面路徑.
2.檢視原始碼分析底層原理,實際上Model與ModelMap都是通過ExtendedModeMap的子類BindingAwareModeMap實現
區別:
一般來說,可以用Model來接收各種型別的資料,如果接收一組或多個則實際上是ModelMap.
注意:
1. 通過@SessionAttributes 註解可以自動把Model或者ModelMap中的資料放入session。
2. 在頁面上可以通過el表示式獲取域中的資料.
Model的用法
// Model 作為方法引數
@RequestMapping("/model")
public String model(Model model){
model.addAttribute("cn","China");
return "success";
}
ModelMap的用法
// ModelMap 作為方法引數 @RequestMapping("/modelMap") public String modelMap(ModelMap modelMap){ modelMap.addAttribute("usa","American"); return "success"; }
ModelAndView
ModelAndView 是 SpringMVC 為我們提供的一個物件,該物件也可以用作控制器方法的返回值。
該物件中有兩個方法ModelAndView返回結果時候,既可以返回資料(Model),也可以指定跳轉結果頁面(view).
ModelAndView的用法
@RequestMapping("/mv")
public ModelAndView mv(){
// 返回結果
ModelAndView mv = new ModelAndView();
// 設定跳轉的頁面名稱
mv.setViewName("success");
// 資料儲存到域
mv.addObject("cn","China");
return mv;
}
ModelAndView和Model的區別
ModelAndView是方法返回值,例項是使用者手動建立.
Model是方法引數,例項是springMVC自動建立並作為控制器方法引數傳入,無需使用者建立.
Model和ModelMap返回的是頁面的指定路徑,ModelAndView返回的是物件.
個人座右銘:
把簡單的事做好,就是不簡單.堅持努力是自信的源頭!!!