springmvc-Model和ModelAndView的区别以及和request的区别

 

前言

        用过springMvc的小伙伴都知道,一般而言我们返回页面视图的时候会有两种可能,就是本文题目中的两个类。其实本文就是想要对比一下这两个类在spring的视图解析中的作用以及区别。

区别

        就我个人而言,我自己觉得这两者之间是没有什么区别的?实际上,这两者之间有着很大的区别,具体就表现在Model只是用来传输数据的,并不会进行业务的寻址。但是,ModelAndView却是可以进行业务寻址的,就是设置对应的要请求的静态文件,这里的静态文件指的是类似jsp的文件。当然,两者还有一个最大的区别,那就是Model是每一次请求都必须会带着的,但是ModelAndView是需要我们自己去新建的。

代码示例

        首先是Model传递数据。

@Controller
public class FreemarkerController {
    @SuppressWarnings("unchecked")
    @RequestMapping(method = RequestMethod.POST, value = "/freemarker")
    public String getFtl(Model model) {
        // 构造填充数据的Map
        Map map = new HashMap();
        List<TestVo> testVos = new ArrayList<>();
        TestVo testVo = new TestVo();
        testVo.setName("fulei");
        TestVo testVo1 = new TestVo();
        testVo1.setName("wangmeng");
        testVos.add(testVo);
        testVos.add(testVo1);
        map.put("user", "love");
        map.put("url", "http://www.baidu.com/");
        map.put("name", "百度");
        map.put("testVos", testVos);
        model.addAllAttributes(map);
        return "test";
    }
}

        其次就是ModelAndView。

    @RequestMapping(method = RequestMethod.POST, value = "/freemarker")
    public ModelAndView getFtlByModelAndView() {
        ModelAndView modelAndView = new ModelAndView();
        // 构造填充数据的Map
        Map map = new HashMap();
        List<TestVo> testVos = new ArrayList<>();
        TestVo testVo = new TestVo();
        testVo.setName("fulei");
        TestVo testVo1 = new TestVo();
        testVo1.setName("wangmeng");
        testVos.add(testVo);
        testVos.add(testVo1);
        map.put("user", "love");
        map.put("url", "http://www.baidu.com/");
        map.put("name", "百度");
        map.put("testVos", testVos);
        modelAndView.addAllObjects(map);
        return modelAndView;
    }

        从上面我们可以看得出来这两个之间还是有一定的区别的,当然具体的区别也就如我上面所描述的那样了。

Model

其实model和session都是存放信息的地方,不同的地方就是他们的生命周期不同,model是request级别的。

ModelandView是将  视图信息和数据封装到一起的,spring来解析ModelandView中的信息,包括视图和数据 ,然后将数据set到request里面,并且根据model里面的视图信息以及spring mvc的配置让request进行跳转。

springMVC的工作原理如下:

  • springmvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。 

  • DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller。

  • DispatcherServlet请请求提交到目标Controller 。

  • Controller进行业务逻辑处理后,会返回一个ModelAndView 。

  • Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象 。

  • 视图对象负责渲染返回给客户端。

        

猜你喜欢

转载自blog.csdn.net/qq_35568099/article/details/83277027