Spring MVC ModelAndView 简述
2018-02-06 11:28
253 查看
http://blog.csdn.net/u010889145/article/details/50488634
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<Object> 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
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 给view返回的指定页面名称添加前后缀 -->
<property name="prefix" value="/WEB-INF/vie
cd5b
ws/" />
<property name="suffix" value=".jsp" />
</bean>
可以看到我指定的视图名称为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文档返回到请求端,这种方式同时完成了参数的传递和页面的跳转,其缺点在于比起普通的请求来说,这种方式传输的数据要多得多,大量使用会使页面加载变得很慢,影响体验,在关键点使用即可。
http://blog.csdn.net/u010889145/article/details/50488634
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<Object> 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
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 给view返回的指定页面名称添加前后缀 -->
<property name="prefix" value="/WEB-INF/vie
cd5b
ws/" />
<property name="suffix" value=".jsp" />
</bean>
可以看到我指定的视图名称为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文档返回到请求端,这种方式同时完成了参数的传递和页面的跳转,其缺点在于比起普通的请求来说,这种方式传输的数据要多得多,大量使用会使页面加载变得很慢,影响体验,在关键点使用即可。
相关文章推荐
- ModelAndView;@ResponseBody springMVC 返回类型
- spring mvc ModelAndView 404 错误
- Spring MVC ModelAndView
- Spring MVC ModelAndView
- spring mvc EL ModelAndView的 Model 值 在jsp中不显示
- springmvc ModelAndView 跳转失灵
- spring mvc EL ModelAndView的 Model 值 在jsp中不显示
- Spring-mvc 4.0 ModelAndView (一)
- Spring-mvc 4.0 ModelAndView (二)
- SpringMVC ModelAndView跳转失效
- Spring MVC ModelAndView addObject 使用EL表达式失效
- spring mvc DispatcherServlet详解之三---request通过ModelAndView中获取View实例的过程
- Spring-MVC中ModelAndView对象所添加的内容在前端用EL表达式获取不到的问题
- Spring MVC ModelAndView
- spring的配置文件中mvc:view-controller path使用方法
- SpingMVC ModelAndView, Model,Control以及参数传递
- springMVC3学习(二)--ModelAndView对象
- Spring+SpringMVC+MyBatis+easyUI整合基础篇(一)项目简述及技术选型介绍
- Spring3参考手册 mvc:view-controller
- SpringMVC Controller&View数据传递