资讯专栏INFORMATION COLUMN

【深入浅出spring】Spring MVC 流程解析

lidashuang / 1366人阅读

摘要:概述是目前主流的框架之一。这部分的详细分析见深入浅出流程解析调用的具体方法处理请求,并返回一个。这部分的详细分析见深入浅出流程解析视图解析,遍历的列表,获取对应的对象,入口方法渲染,调用中获取的的方法,完成对数据的渲染。

前言

其实一年前就想系统地记录下自己阅读spring源码的收获,搞一个深入浅出spring的系列文章,但是因为工作原因,迟迟没有下笔。今天终于可以开始自己一年前的计划了,言归正传,首先开始spring mvc相关的内容。

文本主要从流程角度介绍spring mvc的整个工作原理,对spring mvc有一个整体的了解,具体实现细节不在本文的介绍范畴中。

概述

Spring MVC 是目前主流的Wew MVC框架之一。两个核心点:

处理器映射:选择使用哪个控制器来处理请求

请求参数解析 + 返回数据解析

视图解析器:选择结果应该如何渲染

以下分析基于spring 5.0.4版本源码

运行原理 概述


首先用户发送请求,DispatcherServlet实现了Servlet接口,整个请求处理流:HttpServlet.service -> FrameworkServlet.doGet -> FrameworkServlet.processRequest -> DispatcherServlet.doService -> DispatcherServlet.doDispatchdoDispatch(HttpServletRequest request, HttpServletResponse response)方法即为整个spring mvc的处理流程。

获取url请求对应的处理方法,遍历handlerMappings列表,获取对象HandlerExecutionChain(包含一个处理器 handler 如HandlerMethod 对象、多个 HandlerInterceptor 拦截器对象)。此处的handlerMappings列表为上下文中所有HandlerMapping接口的实现类(如图中列举了4个),遍历handlerMappings列表,针对每个handlerMapping试图获取HandlerExecutionChain,一旦成功(不为null),即返回。这部分的详细分析见【深入浅出spring】Spring MVC 流程解析 -- HanndlerMapping

获取对应的 HandlerAdapter,HandlerAdapter 将会把2中的handler包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器。DispatcherServlet中的HandlerAdapter列表如图中所列的3种,依次遍历,调用HanderAdapter.supports判断是否支持。这部分的详细分析见【深入浅出spring】Spring MVC 流程解析 -- HandlerAdapter

调用Controller的具体方法处理请求,并返回一个 ModelAndView。HandlerAdapter会为每一个请求生成一个ServletInvocableHandlerMethod实例,核心方法invokeAndHandle,包括输入参数的处理和返回数据的解析。这部分的详细分析见【深入浅出spring】Spring MVC 流程解析 -- InvocableHandlerMethod

视图解析,遍历DispatcherServlet的ViewResolver列表,获取对应的View对象,入口方法DispatcherServlet.processDispatchResult

渲染,调用5中获取的View的render方法,完成对Model数据的渲染。此处的 Model 实际是一个 Map 数据结构。

DispatcherServlet 将6中渲染后的数据返回响应给用户,到此一个流程结束。

处理流程

附上代码级的方法流,其中灰色标识主流程,绿色为DispathcerServlet.doDispatch方法中的流程,红色为HandlerAdapter.handler方法中的流程

实现类罗列 handlerMappings:

RequestMappingHandlerMapping

BeanNameUrlHandlerMapping

SimpleUrlHandlerMapping

WelcomePageHandlerMapping

handlerAdapters:

RequestMappingHandlerAdapter

HttpRequestHandlerAdapter

SimpleControllerHandlerAdapter

viewResolvers:

ContentNegotiatingViewResolver

BeanNameViewResolver

ViewResolverComposite

InternalResourceViewResolver

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/68849.html

相关文章

  • 深入浅出springSpring MVC 流程解析 -- HandlerAdapter

    摘要:前言继上一篇深入浅出流程解析介绍了后,本文按照深入浅出流程解析的分析流程,继续往下分析,介绍下相关的内容。即适配类型为的处理器,对应。之前在问答社区发现很多的问题都集中再这块。中的就是通过适配的附录类图 前言 继上一篇【深入浅出spring】Spring MVC 流程解析 -- HanndlerMapping介绍了handler mapping后,本文按照【深入浅出spring】Spr...

    villainhr 评论0 收藏0
  • 通过项目逐步深入了解Spring MVC(一)

    摘要:是一个基于的框架。控制器将视图响应给用户通过视图展示给用户要的数据或处理结果。有了减少了其它组件之间的耦合度。 相关阅读: 本文档和项目代码地址:https://github.com/zhisheng17/springmvc 转载请注明出处和保留以上文字! 了解 Spring: Spring 官网:http://spring.io/ 一个好的东西一般都会有一个好的文档解释说明,如果你...

    whataa 评论0 收藏0
  • “过时”的SpringMVC我们到底在用什么?深入分析DispatchServlet源码

    摘要:问题来了,我们到底还在用吗答案是,不全用。后者是初始化的配置,主要是的配置。启动类测试启动项目后,在浏览器里面输入。通过查询已装载的,并且支持该而获取的。按照前面对的描述,对于而言,这个必定是。的核心在的方法中。 之前已经分析过了Spring的IOC(《零基础带你看Spring源码——IOC控制反转》)与AOP(《从源码入手,一文带你读懂Spring AOP面向切面编程》)的源码,本次...

    array_huang 评论0 收藏0
  • [闹着玩-2]spring-mvc 主要流程

    摘要:源码仓库本文仓库三层结构表现层模型业务层持久层工作流程用户前端控制器用户发送请求前端控制器后端控制器根据用户请求查询具体控制器后端控制器前端控制器处理后结果前端控制器视图视图渲染视图前端控制器返回视图前端控制器用户响应结 SpringMvc 【源码仓库】【本文仓库】 三层结构 表现层 MVC模型 业务层 service 持久层 dao 工作流程 用户->前端控制器:用户...

    fuchenxuan 评论0 收藏0

发表评论

0条评论

lidashuang

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<