再临SpringBoot——理解Spring Web Mvc架构处理流程
文章目录ServletServletServlet有以下特点:请求/响应式(Request/Response)。屏蔽网络通讯的细节 。具有完整的生命周期。关于DispatcherServlet,在之前的文章中说明的很清楚,在此不再赘述。在以前学习Spring时,一般是以下步骤:实现Controller配置Web MVC组件(通过注解或者xml配置)部署Dispatch...
·
DispatherServlet
Servlet有以下特点:
- 请求/响应式(Request/Response)。
- 屏蔽网络通讯的细节 。
- 具有完整的生命周期。
关于DispatcherServlet,在之前的文章中说明的很清楚,在此不再赘述。
Spring Web Mvc Rest处理流程
相比于Spring Web Mvc的处理流程,Rest处理的过程更复杂一点。
- 客户端发送REST请求会被DispatcherServlet拦截。
- DispatcherServlet会寻找@RequestMapping所标注的处理方法HandlerMethod,这个处理方法会被放到RequestMappingHadlerMapping里面进行管理。
- DispatcherServlet会根据HandlerMethod寻找到RequestMappingHandlerAdpter,然后这个类(RequestMappingHandlerAdapter)会将HandlerMethod转换为InvocableHandlerMethod(对象转换)。
- 接下来就是处理请求,HandlerMethodArgumentResolver会将这个请求解析成方法参数,然后放到Controller进行执行。
- Controller处理完成后,会将结果返回到InvocableHandlerMethod中。然后被HandlerMethodReturnValueHandler进行处理(对返回值进行第二次加工,处理成为Http消息)。
这个流程里需要重点关注一下HandlerMethodArgumentResolver和HandlerMethodReturnValueHandler这两个类。
Spring Web Mvc Rest 内容协商处理流程
- 当请求发送过来的时候(假设请求头是HTTP Accept: application/json的时候),还是前端总控制器DispatcherServlet进行拦截。
- DispatcherServlet会找到@ReqeustBody对应的RequestResponseBodyMethodProcessor这个部分,这个部分会去解析请求头里面的MediaType(MediaType : application/json)。这个解析用到了ContentNegotiationManager,也就是内容协商的管理器会进行MediaType的处理。
- 处理完后,回去解析HandlerMethod的入参(也就是上一张图的6-7步骤:处理请求、解析方法参数)。解析完入参后,会执行Controller里面的内容,然后会将内容返回到RequestResponseBodyMethodProcessor中。
- 匹配HttpMessageConverter进行处理(匹配到MappingJackson2HttpMessageConverter,会发现他的一个处理结果),将结果序列化返回到客户端。
这个过程需要主要关注请求MediaType的解析过程。
更多推荐
已为社区贡献1条内容
所有评论(0)