SpringMVC中Map、Model、ModelMap、ModelAndView之间的关系及区别
首先,在了解这三者之前,需要知道一点:SpringMVC在调用方法前会创建一个隐含的数据模型(Model),作为模型数据的存储容器, 成为”隐含模型”。
如果controller方法的参数为Moedl或ModelMap类型,则spring MVC会将隐含模型的引用传递给这些参数。在处理方法内部,开发者就可以通过这个参数对象访问模型中的所有数据,也可以向模型中添加新的属性数据。也就是说在每一次的前后台请求的时候会随带这一个背包(Model),不管你有没有用,这个背包确实是存在的,用来盛放我们请求交互传递的值。
在前端向后台请求时,Model 和 ModelMap 的实例都是spirng mvc框架来自动创建的,用户无需自己创建。
无论是Mode还是ModelMap底层都是使用BindingAwareModelMap,所以两者基本没什么区别,我们只需拿来使用即可。而ModelAndView则需要我们手动进行new,springMVC不会帮我们创建。
既然这四个类或接口被放在一起对比,那么它们之间肯定有相同点:
1.它们的作用相同,都是用于传递控制方法存储数据到展示页面(JSP页面),通过EL表达式或者C标签库的{name } 来获取对对象的key进行取值。
它们之间的区别:
1.Map、Model、ModelMap不需要我们手动创建,springmvc框架自动创建并作为控制器方法参数传入;而ModelAndView需要手动创建。
2.Model只是用来传输数据的,并不会进行业务的寻址。ModelAndView却是可以进行业务寻址的,就是设置对应的要请求的静态文件,这里的静态文件指的是类似jsp的文件。
示例1:Model 和 ModelMap
Model 和 ModelMap 的实例都是spirng mvc框架来自动创建并作为控制器方法参数传入,用户无需自己创建。
而且需要return 返回指定的页面路径。
控制层代码:
//传值方法一 @RequestMapping("listCategory2") public String listCategory2(Model model) { // 接收查询的信息 List<Category> cs2= categoryService.list(); // 封装了查询的数据 model.addAttribute("test", cs2); //重要!!需要给出返回model跳转的路径 return "listCategory2"; }
JSP页面:
<!-- 获取值的时候,对应的是addAttribute的第一个参数!取了个别名为c--> <c:forEach items="${test }" var="c" varStatus="st"> <tr> <td>${c.id}</td> <td>${c.name}</td> </tr> </c:forEach>
示例2:ModelAndView
ModelAndView的实例是需要我们手动new的,这也是和ModelMap的一个区别。
而且,ModelAndView 可以自己寻址,只需要return 返回其对象即可。
java代码:
//传值方法二:使用ModelAndView //当url处于这个时,由listCategory方法来处理请求 @RequestMapping("listCategory") public ModelAndView listCategory(){ //创建一个模型视图对象 ModelAndView mav = new ModelAndView(); //获取到查询的数据 List<Category> cs= categoryService.list(); // //将数据放置到ModelAndView对象view中,第二个参数可以是任何java类型 mav.addObject("cs", cs); // 放入jsp路径 mav.setViewName("listCategory"); //返回ModelAndView对象mav return mav; }
JSP代码:
<!-- 使用c标签库,循环遍历出数据 ,命名为c--> <c:forEach items="${cs}" var="c" varStatus="st"> <tr> <td>${c.id}</td> <td>${c.name}</td> </tr> </c:forEach>
以上就是两种不同的方式取值传值,从上面我们可以看得出来这两个之间还是有一定的区别的,记住有一个需要返回对象,一个需要返回的是地址路径。
简单总结:
Map 为原生的储存键值的对象,自然的里面一大堆的方法可以使用。
Model 只有寥寥几个方法只适合用于储存数据,简化了新手对于Model对象的操作和理解;
ModelMap 继承了 LinkedMap ,除了实现了自身的一些方法,同样的继承 LinkedMap 的方法和特性;
Map、Model、ModelMap之间本质无太大区别。
ModelAndView 可以在储存数据的同时,可以进行设置返回的逻辑视图,进行控制展示层的跳转。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?