大家好,我是林译川,今天我们来聊聊Spring中Model、ModelMap、ModelAndView这三个小家伙,它们虽然名字相似,但作用却各不相同。别急,听我慢慢道来。
首先,什么是隐含模型?
SpringMVC在每次请求前都会创建一个隐含的数据模型,就像一个背包,用来存放我们请求交互传递的值。这个背包是自动创建的,不管你用不用,它都在那里。
那么,Model和ModelMap有什么区别呢?
Model和ModelMap其实都是用来存放数据的,它们底层都是使用BindingAwareModelMap。简单来说,Model是一个接口,它的实现类为ExtendedModelMap,继承ModelMap类;而ModelMap继承自LinkedHashMap。所以,它们基本没什么区别,都是用来存放数据的。
ModelAndView又是啥?
ModelAndView顾名思义,就是模型和视图的集合。它既包含模型,又包含视图。ModelAndView的实例是开发者自己手动创建的,这是和ModelMap的主要不同点之一。
ModelAndView有两个作用,一个是指定返回页面,另一个是在返回页面的同时添加属性。
下面,我们来举个例子看看它们怎么用。
package com.apress.springrecipes.court.web;
...
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
public class WelcomeController extends AbstractController{
public ModelAndView handleRequestInternal(HttpServletRequest request,
HttpServletResponse response)throws Exception{
Date today = new Date();
return new ModelAndView(
