为什么Spring MVC要有Model、ModelMap和ModelAndView?区别全解析

 更新时间:2026年07月24日 10:36:51   作者:txxs  
还在纠结Spring MVC控制器里用Model、ModelMap还是ModelAndView吗?本文清晰对比了三者的区别与用法,帮你理解Model是接口,ModelMap实现Map,而ModelAndView则同时包含数据和视图,看完这篇,你就能根据场景选择最合适的返回方式了

近来在看代码,发现controller里有不同的处理返回数据的方式,而自己一直在用ModelAndView在处理数据,对于其他的方式也零星用过,但是总感觉不明白其中的区别,也就写了这篇博客总结一下:

简单来说

Model是包含四个addAttribute 和一个  merAttribute方法的接口。

  • ModelMap :实现了Map接口,包含Map方法。视图层通过request找到ModelMap中的数据。
  • ModelAndView:是包含ModelMap 和视图对象的容器。正如名字暗示的一样既包含模型也包含视图,而ModelMap只是包含模型的信息。

ModelAndView的例子

台后

public class CarListController implements Controller {
	public ModelAndView handleRequest(HttpServletRequest arg0,
			HttpServletResponse arg1) throws Exception {
		CarManager carManager = new CarManager();
		ModelAndView modelAndView = new ModelAndView("carList");
		modelAndView.addObject("carList", carManager.getCarList());
		return modelAndView;
	}
}

ModelAndView的例子

前台view

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<body>
	<h1>Car List</h1>
	<c:forEach items="${carList}" var="car">
		${car.brand.name} ${car.model}: ${car.price}
		<br />
	</c:forEach>
 </body>
<html>

ModelMap的例子

public String testMethod(String someparam,ModelMap model)
{
     //省略方法处理逻辑若干
      //将数据放置到ModelMap对象model中,第二个参数可以是任何java类型
      model.addAttribute("key",someparam);
     ......     //返回跳转地址
      return "test/test";
}

或者直接使用接口:

public String toProvinceView(Model model, HttpSession session,) {
			model.addAttribute("colModel", colModel);
			model.addAttribute("colNames", colNames);
			model.addAttribute("buttonName", buttonName);
			return "statistic/StatisticChart";

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • idea maven项目不支持发行版本问题及解决过程

    idea maven项目不支持发行版本问题及解决过程

    这段描述主要讲解了解决Maven项目中JDK版本问题的方法,包括修改环境变量、配置IDEA编译器版本以及调整pom.xml文件等内容,通过这些步骤,可以有效解决项目运行中的兼容性问题
    2026-06-06
  • Java中动态地改变数组长度及数组转Map的代码实例分享

    Java中动态地改变数组长度及数组转Map的代码实例分享

    这篇文章主要介绍了Java中动态地改变数组长度及数组转map的代码分享,其中转Map利用到了java.util.Map接口,需要的朋友可以参考下
    2016-03-03
  • 分布式Netty源码分析概览

    分布式Netty源码分析概览

    这篇文章主要为大家介绍了分布式Netty源码分析概览,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • 解决SpringBoot中MultipartResolver和ServletFileUpload的冲突问题

    解决SpringBoot中MultipartResolver和ServletFileUpload的冲突问题

    这篇文章主要介绍了解决SpringBoot中MultipartResolver和ServletFileUpload的冲突问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • Javaweb基础入门HTML之table与form

    Javaweb基础入门HTML之table与form

    HTML的全称为超文本标记语言,是一种标记语言。它包括一系列标签.通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字,图形、动画、声音、表格、链接等
    2022-03-03
  • Java实现图片模糊效果详解

    Java实现图片模糊效果详解

    图片模糊是图像处理中的一种常见效果,它通过平均周围像素的颜色来使图像变得模糊,下面我们来看看如何使用Swing库实现图片模糊效果吧
    2025-02-02
  • Java构造函数的相互调用代码示例

    Java构造函数的相互调用代码示例

    这篇文章主要介绍了Java构造函数的相互调用代码示例,分享了两段代码示例,通过this关键字实现对的构造函数的调用,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • Spring Boot 2.6.x整合Swagger启动失败报错问题的完美解决办法

    Spring Boot 2.6.x整合Swagger启动失败报错问题的完美解决办法

    这篇文章主要给大家介绍了关于Spring Boot 2.6.x整合Swagger启动失败报错问题的完美解决办法,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-03-03
  • java oshi如何查看cpu信息

    java oshi如何查看cpu信息

    这篇文章主要介绍了java oshi如何查看cpu信息,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 基于@AliasFor注解的用法及说明

    基于@AliasFor注解的用法及说明

    这篇文章主要介绍了基于@AliasFor注解的用法及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02

最新评论