DispatcherServlet之HandlerAdapter的handle

news/2024/7/7 19:45:08

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

注:SpringFramework的版本是4.3.x。

1.DispatcherServlet的doService方法时序图        

           

                                               图1 DispatcherServlet的doService方法时序图

2.AnnotationMethodHandlerAdapter的handle方法时序图

        图2的原图在Github上。       

               

                                          图2 AnnotationMethodHandlerAdapter的handle方法

     图2中,步骤12中,涉及:

  1.     根据controller类的方法上的注解,将HttpServeletRequest的内容转换为方法参数,如处理@RequestParam、@RequestBody、@PathVariable。
  2.     步骤1中得到方法参数对象后,用JDK的反射操作。

    步骤12中的内容有点多,单独用一篇文章来分析。

 

    图2的步骤14:由于controller的方法返回的有可能是Model、View、HttpEntity、String,还有一种单独存在的带有@ResponseBody注解的方法。即controller的方法返回的不是统一的,各种数据类型都会有。步骤14中,统一返回ModelAndView,方便后续的程序处理。

 

    下面我们注重分析下controller方法上有@ResponseBody注解的情况,图3的原图在Github上。

                 

                                图3 ServletHandlerMethodInvoker的getModelAndView方法时序图

    如果controller的方法上有@ResponseBody注解,那么该方法的返回结果经过转换,之后写入到HttpResponse中。

转载于:https://my.oschina.net/u/2518341/blog/1827564


http://lihuaxi.xjx100.cn/news/237945.html

相关文章

Java学习笔记二十五:Java面向对象的三大特性之多态

Java面向对象的三大特性之多态 一:什么是多态; 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作. 多态性是对象多种表现形式的体现。 现实中,比如我们按下 F1 键这个动作&am…

Observables简介以及它们与Promise有何不同

‘Observables’, ‘Observables’, ‘Observables’...Yes! Today, we will talk about this often discussed word of the market. Well also learn how they are different from Promises (havent heard about Promises? Not to worry! You will know more soon). Let’s s…

Android组件框架:Android组件管理者ActivityManager

关于作者 郭孝星,程序员,吉他手,主要从事Android平台基础架构方面的工作,欢迎交流技术方面的问题,可以去我的Github提issue或者发邮件至guoxiaoxingse163.com与我交流。 第一次阅览本系列文章,请参见导读&a…

区块链推广所需的三个关键因素

想知道更多关于区块链技术知识,请百度【链客区块链技术问答社区】 链客,有问必答!在现有产业中推广区块链的3个关键 区块链的设计是为了展示无可辩驳的真理,而不是依靠权威的控制。虽然这听起来很理想,但问题是&#…

Wireshark使用教程:不同报文颜色的含义

“ Wireshark色彩规则。”在Wireshark主界面,报文会显示各种各样的颜色,它们表示不同的含义。这些颜色,是由色彩规则控制的。对这些颜色进行适当的了解,对分析报文有很大帮助。01—设置色彩规则有两个入口,一个在报文上…

区块链社交APP协议分析预告

2017年,比特币的火热,直接导致了代币市场的繁荣;2018年,作为信用体系的未来解决方案,区块链引发了互联网原住民的淘金热。作为风口上的引流神器,区块链技术与社交网络结合起来,产生了一系列区块…

使用FortJs使用现代JavaScript开发Node.js

介绍 (Introduction) Nodejs gives you the power to write server side code using JavaScript. In fact, it is very easy and fast to create a web server using Nodejs. There are several frameworks available on Node package manager which makes the development eve…

[Doctrine Migrations] 数据库迁移组件的深入解析三:自定义数据字段类型

自定义type 根据官方文档&#xff0c;新建TinyIntType类&#xff0c;集成Type&#xff0c;并重写getName&#xff0c;getSqlDeclaration&#xff0c;convertToPHPValue&#xff0c;getBindingType等方法。 TinyIntType.php完整代码&#xff1a; <?php namespace db\types; …