关于 mvc 几种 返回 类型的 理解

ModelAndView(有地址跳转的情况)不是特别准确的,具体更新了springmvc源码那篇博文,特别是关于View和ModelAndView中的view不是一个概念的,modelAndView只是保存了viewName

	1.处理 请求转发(默认)和重定向 的,有资源的跳转的情况
	
	2.就和 原生的 请求转发 和 请求 重定向 相同
	
	3.ModelAndView中包含了一个model属性和一个view属性,model其实是一个
	  ModelMap类型,它是一个LinkedHashMap的子类,view包含了一些视图信息。
	  
	4.返回后,ModelAndView会给 中央处理器
			1.若 view中的 视图信息 有 forward和redirect关键字,那么不用视图解析器
			2.若没有,默认请求转发,会用视图解析器,解析逻辑地址成物理地址
			
	5.中央处理器,会渲染 View,Model中的域数据是 渲染 view时使用。借助于Map对象能够存储模型。
	request手动添加的域数据也会 添加到 model中
	
	6.最后剩下来 的就是 View(带着 域数据)
	
	7.如果 是请求转发,那么不会响应浏览器(返回 response给 http响应协议)
	这时候,只会将view中的 信息(转发地址+域数据)给 request,去 进行 请求转发
	
	8.如果是 请求重定向,那么中央处理器 会响应 浏览器(将response给浏览器,填充 http响应协议内容)
	这时候,会将view的信息(重定向地址+ 可能有或没有域对象)给response
	响应浏览器,浏览器在进行下一步请求		

String(有地址跳转的情况)

	1.和 modelAndView,一样,只是没有Model,再进行渲染 View的时候,没有Model
	2.有 关键字,就不用视图解析器
	3.controller还是 会将String 去 封装 ModelAndView
	4.中央处理器 还是会对 ModelAndView进行处理
			1.看用不用视图解析器,解决View的问题
			2.将Model的域数据,渲染View(这步没有),除非用request手动添加了域数据
			3.请求转发:直接request.getRequestDispatcher("xx.jsp").forward(),
			4.重定向:response.sendRedirect("xxx.jsp"),将view的信息填充response,域对象可能有,响应浏览器,浏览器再进行下一步请求

ModelAndView

	1.底层调用的 请求转发 或者 请求重定向,这一步 return后,
	不会马上 请求转发或者,请求重定向的,而是一定要把 modelAndView
	向上 return 给 处理器适配器,然后给 disServlet,最后disServlet的 最开始的
	那个方法,然后disServlet的最开始的 方法在开始 解析这个 modelAndView,
	进而最后才执行这个 请求转发或 请求重定向
	2.所以,在return ModelAndView之后,就可以再执行拦截器的后置方法,去
	修改modelAndView了,直至将ModelAndView交给 中央处理器去解析后执行
	请求转发和 请求重定向

(无地址跳转)直接响应浏览器请求体,这里不涉及Model,And View,没有跳转地址,也没有域数据,做的直接在处理controller的时候直接返回response了

1.void

	1.就跟原生response一样
	2.自己去print 数据 进入 响应体
	3.注意:自己填充的 数据,必须先 转换成字符串
	4.浏览器会 根据 你字符串的 形式,自己set Content-type
	5.如果直接 print对象的话,那会调用对象的 toString方法,可能不是json形式的字符串
	6.这种情况,理论可以返回任何类型的 在 响应体中,只要保证 字符串形式 和 content-type相同即可
	7.到前端后,用dataTpye,去解析 字符串形式的数据,为前端可以识别的数据即可,
	这步是,浏览器自己帮你做的

2.返回 json格式数据,例如对象,数组,list,String,map(key必须得是string类型的)等

	用responseBody,转换器,将他们转换成 json格式的 字符串,填充到 响应体中去即可
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值