1. ModelAndView 相关的成员变量和方法
2. ModelAndView 源码调试流程
[1]. 在DispatcherServlet的 945 行, 准备执行请求处理方法
mv = ha.handle(processedRequest, response, mappedHandler.getHandler());
[2]. 执行请求处理方法, 请求处理方法返回一个ModelAndView对象, 最终返回到DispatcherServlet的945行。
[3]. 在DispatcherServlet 959行, 开始处理结果:解析视图名字得到视图对象==>视图对象处理模型数据==>视图对象完成转发/重定向工作.
processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchException);
[4]. 在DispatcherServlet的1012行
render(mv, request, response);
[5]. 在DispatcherServlet的1204行,解析视图名字得到视图对象.当前的视图对象为: InternalResourceView
view = resolveViewName(mv.getViewName(), mv.getModelInternal(), locale, request);
[6].在DispatcherServlet1225行, 视图对象开始处理模型数据
view.render(mv.getModelInternal(), request, response);
说明: 视图对象的render()方法是在View接口中定义的。 该方法在View接口下面的一个抽象类 AbstractView中进行了具体的实现.
[7].在AbstractView中的266行, 开始整合输出模型数据
renderMergedOutputModel(mergedModel, request, response);
说明: renderMergetOutputModel方法是AbstractView中的抽象方法, 该方法在不同的视图类中进行了不同的实现.
当前的视图对象时InternalResourceView, 接下来调用到InternalResouceView中的renderMergetOutputModel方法。
[8]. 在InternalResourceView中的180行,将模型数据设置到Request域对象中.
exposeModelAsRequestAttributes(model, requestToExpose);
[9]. 在InternalResourceView中的189行,获取转发器
RequestDispatcher rd = getRequestDispatcher(requestToExpose, dispatcherPath);
[10].在InternalResourceView中的209行,开始转发.
rd.forward(requestToExpose, response);
3、视图解析
3.1. Springmvc如何解析视图?
首先,不论请求处理方法的返回值是String、ModelAndView等, Springmvc在调用完请求处理方法后,都会重新封装成一个ModelAndView对象.
接下来, 视图解析器对象 会解析ModelAndView中的view信息,得到具体的视图对象.
在然后, 视图对象会去处理模型数据, 并完成最终的转发以及重定向的工作。
3.2. 视图
3.2.1 视图接口 View
String getContentType(); 主要用于设置响应头信息 response.setContentType(“text/html;charset=utf-8”);
void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response)
视图对象处理模型数据.
3.2.2 一个抽象类 AbstractView
View接口中的render()方法是在AbstractView中进行了统一的实现.
protected abstract void renderMergedOutputModel(
Map<String, Object> model, HttpServletRequest request, HttpServletResponse response)
throws Exception; 在不同的视图实现类中做了具体的实现,主要就是完成转发和重定向工作.
3.2.3 视图的作用
视图主要就是处理模型数据, 并完成最终的转发和重定向工作.
3.2.4 常用的视图类
3. 视图解析器
3.3 视图解析器 ViewResolver
View resolveViewName(String viewName, Locale locale) throws Exception; 解析视图名字得到视图对象
3.1 视图解析器的作用
视图解析器专门就是用于解析得到视图对象的.
3.2 常用的视图解析器类
InternalResourceViewResolver
3.3 视图解析器的优先级
默认值是int的最大值, 值越小优先级越高.
3.4. 重定向
在请求处理方法的返回值前面添加 redirect: 前缀即可.
重定向的工作是由 RedirectView 来完成的.
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对小牛知识库的支持。如果你想了解更多相关内容请查看下面相关链接
本文向大家介绍springmvc处理模型数据Map过程解析,包括了springmvc处理模型数据Map过程解析的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了springmvc处理模型数据Map过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 SpringmvcTest.java Index.jsp success.jsp 启动
问题内容: 我开始工作,并和奇迹是否可以定制响应期待。当前对DataTables插件的期望是这样的: 在服务器端,API由 服务器的响应是: 因此,有没有一种方法可以调整Datatables插件以接受/映射此响应,或者我必须找到一种将期望的字段添加到api的方法? 到目前为止,我已经做到了: 任何帮助将不胜感激。 提前致谢 :) 问题答案: 您可以将函数传递给DataTables 选项,这将使您完
本文向大家介绍Springmvc ResponseBody响应json数据实现过程,包括了Springmvc ResponseBody响应json数据实现过程的使用技巧和注意事项,需要的朋友参考一下 该注解用于将 Controller 的方法返回的对象,通过 HttpMessageConverter 接口转换为指定格式的数据如:json,xml 等,通过 Response 响应给客户端 示例 需求
本文向大家介绍SpringMVC接收与响应json数据的几种方式,包括了SpringMVC接收与响应json数据的几种方式的使用技巧和注意事项,需要的朋友参考一下 前言 前后端的数据交互,除了通过form表单进行提交外,也可以通过ajax向后端传递和接收json格式数据(这种方式可以实现请求数据和页面分离)。本文将总结一下在Spring MVC中接收和响应json数据的几种方式。 话不多说了,来一
在SpringMVC项目中,客户机发送一个带有序列化对象的请求,客户机本身是一个小程序,所以它不希望收到一个web页面作为响应,而是一个带有字符串对象的响应,该响应将告诉他这是成功还是失败。那么解决方案是什么呢?我想在@Controller中使用返回void的方法,或者返回不存在页面的方法?(在这两种情况下,我还想知道是否有回复给客户)
本文向大家介绍详解实现vue的数据响应式原理,包括了详解实现vue的数据响应式原理的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要是给不了解或者没接触过 vue 响应式源码的小伙伴们看的,其主要目的在于能对 vue 的响应式原理有个基本的认识和了解,如果在面试中被问到此类问题,能够知道面试官想让你回答的是什么?「PS:文中如有不对的地方,欢迎小伙伴们指正」 响应式的理解 响应式顾名思义就是数