ModelAndView 分为两部分:model和view。model负责参数,view就是视图,也就是页面。相当于统一了Model对象和View对象的功能。

先说说它的工作过程,为保证逻辑清晰,spring mvc搭建的后台一般分为分发功能的Controller层,逻辑判断的Service层,数据库交互的Dao层(也就是按照功能分类的接口和类)。ModelAndView 一般在Controller层作为结果类型返回,其内部的view部分指定返回的页面,model指定返回的参数,以下是示例代码。

[java] view plain copy
@RequestMapping(method=RequestMethod.GET ,value = “/getShareInfo”) //指定访问此接口方式和地址
public ModelAndView getShareInfo(Integer liveBroadcastId,String language,Integer userId) {
ModelAndView mav = new ModelAndView(“share”); //指定页面名称为share
ResultTemplateModel liveModel = liveBroadcastService.getLiveById(liveBroadcastId, language, userId);//执行功能
LiveDetailInfoModel liveInfo = (LiveDetailInfoModel) liveModel.getData(); //执行功能,得到结果对象
mav.addObject(“replayName”, liveInfo.getReplayName()); //从结果对象中取出参数放入 ModelAndView 中
mav.addObject(“startPlayTime()”, liveInfo.getStartPlayTime());
mav.addObject(“address”, liveInfo.getAddress());
mav.addObject(“attentionState”, liveInfo.getAttentionState());
return mav; //返回ModelAndView
}
然后是它在spring.xml中的配置

[html] view plain copy

可以看到我指定的视图名称为share,在返回之前,InternalResourceViewResolver会加上前后缀,也就是找到/WEB-INF/views/share.jsp这个文件,然后将你设置在ModelAndView中的参数拼入到share.jsp中。jsp文件中以 ${requestScope.replayName}的形式来接收你在 mav.addObject(“replayName”, liveInfo.getReplayName()); 中设置的参数。于是参数就一个一个固定到jsp文件中了,这个过程也就是ModelAndView的渲染过程。

在当时我还有这么一个疑问:为什么要用jsp页面?为什么不用html页面?到现在仔细想想也就释然了:html是静态页面,它仅有解释作用,就是写什么就看到什么,它并不能像java一样解析一个类,取出一个类中的参数,InternalResourceViewResolver拿到html页面和参数后没办法把两者组合。所以这里也只能使用动态页面来接收ModelAndView类型中的参数,jsp,asp等都是可以的。

上图是对这个接口请求返回的结果,可以看出来这是一个完整的html页面,这个页面也就是我在上面所指定的share.jsp拼完参数之后的结果,所以在请求返回成功后,浏览器应该会自动跳转到请求返回来的这个页面。所以,返回modelandview的方式在实现参数传递的同时也实现了页面跳转。这也解决了我的另外一个问题:如何把当前页面的参数传递到将要跳转的页面中?

总结一下:spring mvc 中的modelandview对象由InternalResourceViewResolver解析器解析后,将modelandview中的参数和指定的页面组合在一起,当成一个完整的html文档返回到请求端,这种方式同时完成了参数的传递和页面的跳转,其缺点在于比起普通的请求来说,这种方式传输的数据要多得多,大量使用会使页面加载变得很慢,影响体验,在关键点使用即可。

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

Spring MVC ModelAndView 简述相关推荐

  1. Spring MVC modelandview

    一开始${Name} 不能显示 原来是: import org.springframework.web.portlet.ModelAndView; --错误的引入 import org.springf ...

  2. spring mvc ModelAndView向前台传值

    今天在做项目的时候遇到一个问题,把第一个页面保存的id传到第三个页面中去用,原来是在controller层加了一个全局变量控制的,可是后来发现这个变量实现不了我要的功能,于是查了一下,原来ModelA ...

  3. Spring MVC学习笔记

    文章目录 创建一个servlet项目 导入依赖 添加Web框架 编写Servlet 注册这个servlet 编写跳转页面 配置Tomcat 第一个Spring MVC程序 1. web.xml的配置 ...

  4. spring mvc DispatcherServlet详解之三---request通过ModelAndView中获取View实例的过程

    整个spring mvc的架构如下图所示: 上篇文件讲解了DispatcherServlet第二步:通过request从Controller获取ModelAndView.现在来讲解第三步:reques ...

  5. spring mvc DispatcherServlet详解之二---request通过Controller获取ModelAndView过程

    整个spring mvc的架构如下图所示: 上篇文件讲解了DispatcherServlet通过request获取控制器Controller的过程,现在来讲解DispatcherServletDisp ...

  6. modelandview使用过程_面试问烂的 Spring AOP 原理、Spring MVC 过程

    点击上方 Java后端,选择 设为星标 优质文章,及时送达 作者:莫那一鲁道链接:www.jianshu.com/p/e18fd44964eb Spring AOP ,SpringMVC ,这两个应该 ...

  7. Spring mvc 中处理模型数据 ModelAndView

    Spring mvc 中处理模型数据  ModelAndView 原文: http://blog.csdn.net/jingyuan_/article/details/9625125 将模型数据暴露给 ...

  8. Spring MVC中的Model, ModelMap, 和ModelAndView

    1. 概述 在本文中,我们将介绍由弹簧MVC提供的核心组织弹簧框架,组织弹簧框架.. 2. Maven依赖关系 让我们从pom.xml文件中的弹簧上下文依赖关系开始: <dependency&g ...

  9. 简述介绍Spring MVC 框架

    MVC模式是指Model-View-Controller(模式-视图-控制器)模式,是开发Web应用程序时常用的一种代码分层方式. 最典型的MVC就是jsp+servlet+javabean模式. J ...

最新文章

  1. mysql视图学习总结
  2. 公共资源情报(OSINT)工具Automater
  3. Flask/Django/Tornado语法对比(持续更新中)
  4. CC1101、SI4432、SI4463 相互通信的可能性与得失探讨
  5. scss-@for 指令
  6. 解决MySQL查询数据不一致诟病
  7. STM32工作笔记0077---UCOSIII中使用串口发送数据要注意的点
  8. 此上下文中不允许函数定义。_面试官:那我们来说说执行上下文吧
  9. 以太坊源码(03):POA委员会选举机制
  10. Android中 requestCode与resultCode的区别与用法
  11. Spring Boot 2.x 把 Guava 干掉了,拥抱本地缓存之王 Caffeine!
  12. HTTP下载龙卷风系列Office/Photoshop/金山词霸快译/
  13. 中国Android应用商店汇总
  14. html调整中文文字间距,HTML 中调整文字间距,行间距和文字竖排
  15. 在python中get是什么意思_python get函数有什么作用?示例解析
  16. SqlServer的基本使用
  17. Anthony计量经济学导论-学习笔记+R语言
  18. 请问外贸独立站靠谱的收款工具有哪些,求推荐!?
  19. imgcook设计稿生成代码插件
  20. weblogic反序列化

热门文章

  1. 之江汇空间如何加音乐背景_之江汇互动课堂如何使用?之江汇互动课堂使用方法...
  2. ARM8/ARM7/A9/A15
  3. SQL左连接副表取最新的一条记录的多中方式
  4. 微软 Windows 10 v2004 最新官方 ISO 镜像
  5. 【笔记】曝光值EV曝光补偿曝光量
  6. 今日金融词汇--- 商业模式
  7. 最齐全的Cocos2D Cocos creator Cocos2Dx游戏源代码素材,速来收藏
  8. html简单个人网页制作——我的家乡——四川文化(4页) HTML+CSS+JavaScript 家乡主题HTM5网页设计作业成品
  9. vue 动态视频登陆界面 简约冷淡风
  10. 港科资讯 | 香港科技大学与Microsoft香港签订AI商学院2.0合作备忘录