SpringMVC中Model和ModelAndView的区别
两者的区别:
在SpringMVC中,Model和ModelAndView都是用于将数据传递到视图层的对象
Model是”模型“的意思,是MVC架构中的”M“部分,是用来传输数据的。
理解成MVC架构中的”M“和”V“,其中包含”Model“和”View“两部分,主要功能是:设置转向地址,将底层获取的数据进行存储(或者封装),最后将数据传递给View。
Model只是用来传输数据的,并不会进行业务的寻址。ModelAndView 却是可以进行业务寻址的,就是设置对应的要请求的静态文件,这里的静态文件指的是类似JSP的文件。
Model是每次请求中都存在的默认参数,利用其addAttribute()方法即可将服务器的值传递到JSP页面中。
ModelAndView包含Model和View两部分,使用时需要自己实例化,利用ModelMap用来传值,也可以设置View的名称。
其次,两者还有一个最大的区别,每次发起请求后Spring MVC会自动创建Model对象,而ModelAndView需要我们自己创建
总结:
虽然Model和ModelAndView都可以用于将数据传递到视图层,但ModelAndView更加强大,因为它不仅可以传递数据,还可以指定要呈现的视图。如果你只需要传递数据而不关心视图,则可以使用Model。但如果你需要同时传递数据和指定视图,则应该使用ModelAndView。
Model在Controller层的写法
@Controller //代表这个类会被Spring接管,被这个注解的类中所有方法,如果返回值是String,并且有具体的页面可以跳转,那么就会被视图解析器解析
public class IndexController {@RequestMapping("/demo") //意为请求 localhost:8080/demopublic String demo(Model model){//封装数据(向模型中添加数据,可以jsp页面直接取出并渲染)model.addAttribute("Content","Hello");//会被视图解析器处理return "Hello"; //返回到哪个页面 }
}
model方法是可以返回一个对象的。model.addAttribute(String s,Object o),返回对象要创建一个实体对象生成getter和Setter,还有同String()方法
ModelAndView在Controller层的写法
@Controller
@RequestMapping
public class IndexController {@RequestMapping("/demo2")public ModelAndView demo2(){ModelAndView modelAndView = new ModelAndView();//返回到那个前端文件modelAndView.setViewName("hello"); modelAndView.addObject("ContentOne","HelloOne");modelAndView.addObject("ContentTwo","HelloTwo");System.out.println(modelAndView);return modelAndView;}
}