spring中Model,ModelMap,以及ModelAndView之间的区别

概述

随着SSM框架的流行开展,肯定会涉及到SpringMVC.

表现层的设计一般都使用 MVC 模型。( MVC 是表现层的设计模型,和其他层没有关系)

  1. 获取请求数据

  2. 调用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返回的是对象.

个人座右铭:

把简单的事做好,就是不简单.坚持努力是自信的源头!!!

猜你喜欢

转载自blog.csdn.net/JinKin_OldWang/article/details/83052454