服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|JavaScript|易语言|

服务器之家 - 编程语言 - Java教程 - springmvc处理响应数据的解析

springmvc处理响应数据的解析

2021-07-01 15:1043193797 Java教程

今天小编就为大家分享一篇关于springmvc处理响应数据的解析,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

1. modelandview 相关的成员变量和方法

  • private object view; 描述视图信息
  • private modelmap model 描述模型数据(响应数据)
  • public void setviewname(string viewname) 设置视图信息
  • public modelandview addobject(string attributename, object attributevalue) 设置模型数据
  • protected map<string, object> getmodelinternal() 获取模型数据
  • public modelmap getmodelmap() 获取模型数据
  • public map<string, object> getmodel() 获取模型数据
  • public string getviewname() 获取视图名字

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);

springmvc处理响应数据的解析

[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); 

springmvc处理响应数据的解析

[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 常用的视图类

  • internalresourceview 转发视图
  • jstlview 转发视图,是internalresourceview的子类.
  • redirectview 重定向视图

3. 视图解析器

3.3 视图解析器 viewresolver

view resolveviewname(string viewname, locale locale) throws exception; 解析视图名字得到视图对象

3.1 视图解析器的作用

视图解析器专门就是用于解析得到视图对象的.

3.2 常用的视图解析器类

internalresourceviewresolver

3.3 视图解析器的优先级

默认值是int的最大值, 值越小优先级越高.

3.4. 重定向

在请求处理方法的返回值前面添加 redirect: 前缀即可.

重定向的工作是由 redirectview 来完成的.

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对服务器之家的支持。如果你想了解更多相关内容请查看下面相关链接

原文链接:https://blog.csdn.net/qq_43193797/article/details/84929400

延伸 · 阅读

精彩推荐