通过深入分析Spring源码,我们知道Spring框架包括大致六大模块, 如Web模块,数据库访问技术模块,面向切面模块,基础设施模块,核心容器模块和模块,

其中,在Spring框架的Web模块中,又包含很多前端技术,如SpringMVC,Spring WebSocket,Spring WebPortlet等,在本篇文章中,我们主要分析SpringMVC模块,

在分析SpringMVC技术时,本篇文章将通过解读SpringMVC源码,并通过编译器断点调试追踪,研究Spring核心类的UML图,来深入剖析SpringMVC的执行过程。

一  Spring核心模块

下图为Spring核心模块,其中SpringMVC模块位于Spring框架的Web模块部分

二  SpringMVC执行原理

下图为SpringMVC的一个较完整的流程图,实线表示SpringMVC框架提供的技术,不需要开发者实现,虚线表示需要开发者实现。

简要分析执行流程:

1.DispatcherServlet表示前置控制器,是整个SpringMVC的控制中心。用户发出请求,DispatcherServlet接收请求并拦截请求,

我们假设请求的url为:

http://localhost:9999/SpringMVC/input-product

如上url拆分成三部分:

(1)http://localhost:9999 服务器域名

(2)SpringMVC部署在服务器(http://localhost:9999)上的web站点

(3)input-product表示控制器

通过分析,如上url表示为:请求位于服务器localhost:9999上的SpringMVC站点的input-product控制器

2.HandlerMapping为处理器映射。DispatcherServlet调用HandlerMapping,HandlerMapping根据请求url查找Handler

3.HandlerExecution表示具体的Handler,其主要作用是根据url查找控制器,如上url被查找控制器为:input-product

4.HandlerExecution将解析后的信息传递给DispatcherServlet,如解析控制器映射等

5.HandlerAdapter表示处理器适配器,其按照特定的规则去执行Handler

6.Handler让具体的Controller执行

7.Controller将具体的执行信息返回给HandlerAdapter,如ModelAndView

8.HandlerAdapter将视图逻辑名或模型传递给DispatcherServlet

9.DispatcherServlet调用视图解析器(ViewResolver)来解析HandlerAdapter传递的逻辑视图名

10.视图解析器将解析的逻辑视图名传给DispatcherServlet

11.DispatcherServlet根据视图解析器解析的视图结果,调用具体的视图

12.最终视图呈现给用户。

三  SpringMVC核心组件

(一)DispatcherServlet

DispatcherServlet就是所谓的SpringMVC前端控制器,作为整个SpringMVC的控制中心,,其相关UML如下所示:

(二)HandlerMapping

HandlerMapping主要用来解析请求url,解析出控制器,从而映射控制器,其相关类有16个。

如下为HandlerMapping的UML图

(三)HandlerAdapter

HandlerAdapter主要是调度Controller来处理业务逻辑等,想相关类有6个。

如下为HandlerAdapter的UML:

(四)ViewResolver

ViewResolver接口主要作用是解析DispatcherServlet传递的逻辑视图名,并将解析结果传回给DispatcherServlet。实现该接口的相关类或接口共有19个。

如下为ViewResolver主要的UML:

四   版权区

转载博客,必须注明博客出处

博主网址:http://www.cnblogs.com/wangjiming/

如您有新想法,欢迎提出,邮箱:2098469527@qq.com

专业.NET之家技术QQ群:490539956

专业化Java之家QQ群:924412846

有问必答QQ群:2098469527

一对一技术辅导QQ:2098469527

java spring流程_浅谈SpringMVC执行过程相关推荐

  1. 浅谈SpringMVC执行过程

    通过深入分析Spring源码,我们知道Spring框架包括大致六大模块, 如Web模块,数据库访问技术模块,面向切面模块,基础设施模块,核心容器模块和模块, 其中,在Spring框架的Web模块中,又 ...

  2. java 多线程同步_浅谈Java多线程(状态、同步等)

    Java多线程是Java程序员必须掌握的基本的知识点,这块知识点比较复杂,知识点也比较多,今天我们一一来聊下Java多线程,系统的整理下这部分内容. 一.Java中线程创建的三种方式: 1.通过继承T ...

  3. java list数组排序_浅谈对象数组或list排序及Collections排序原理

    常需要对list进行排序,小到List,大到对自定义的类进行排序.不需要自行归并或堆排序.简单实现一个接口即可. 本文先会介绍利用Collections对List进行排序,继而讲到Collection ...

  4. java手动回收_浅谈java是如何做资源回收补救的

    学习java的过程,我们经常谈论一个对象的回收,尤其是资源类型,如果没有显示的关闭,对象就被回收了,说明出现了资源泄漏.java本身为了防止这种情况,做了一些担保的方式,确保可以让未关闭的资源合理回收 ...

  5. java对象头_浅谈java对象结构 对象头 Markword

    概述 对象实例由对象头.实例数据组成,其中对象头包括markword和类型指针,如果是数组,还包括数组长度; | 类型 | 32位JVM | 64位JVM| | ------ ---- | ----- ...

  6. java bitset用途_浅谈Java BitSet使用场景和代码示例

    搜索热词 @H_502_0@一.什么是BitSet? @H_502_0@ 注:以下内容来自JDK API: @H_502_0@ BitSet类实现了一个按需增长的位向量.位Set的每一个组件都有一个b ...

  7. java缓存同步_浅谈JSON的数据交换、缓存问题和同步问题

    JSON轻量级的数据交换格式 相对于XML来说,JSON的解析速度更快,文档更小. JSON的格式 {属性名:属性值,属性名:属性值,--} 属性名的类型可以是string,number,boolea ...

  8. java同名函数_浅谈Java 继承接口同名函数问题

    在Java中如果一个类同时继承接口A与B,并且这两个接口中具有同名方法,会怎么样? 动手做实验: interface A{ void fun(); } interface B{ void fun(); ...

  9. java扫码枪键盘_浅谈在react中如何实现扫码枪输入

    触发原理 原理就是监听键盘输入,比如扫一个为6970596130126的69条形码,用扫码枪扫一下会在光标位置依次输出: 6 9 7 0 5 9 6 1 3 0 2 6 但这不是完整的,所以需要写一个 ...

最新文章

  1. Matlab与数据结构 -- 求向量或矩阵的最大值
  2. R语言KMeans聚类分析确定最优聚类簇数实战:NbClust包(确定最优聚类簇数)
  3. 独家 | 国内AI专业高考报考指南
  4. Python中的[:n],[::n],[:,:,n],[...,n]介绍
  5. 关于Unity游戏开发方向找工作方面的一些个人看法
  6. python怎么创建方法_python中的__new__方法
  7. oracle怎么导出筛选后的数据,ORACLE,筛选单字段不重复的记录,保留其他字段....
  8. 关系数据模型和关系数据库系统
  9. java怎么一段字符串全为数字_java 如何判断一个字符串是数字
  10. 自然语言处理中的语言模型与预训练技术的总结
  11. Crypto.com APP上线The Graph(GRT)
  12. php 监听模式,总结Laravel事件系统用法(监听事件,观察者模式)
  13. selenium实战二:登入QQ空间
  14. 【TsinsenA1339】JZPLCM(顾昱洲) 树状数组
  15. 股票实战分析专题-金融量化初级练习使用
  16. 战争英雄、同性恋和计算机科学的奠基人
  17. 【图像识别】基于计算机视觉实现自动报靶系统(重弹孔)含Matlab源码
  18. 计算机在制造业中的应用领域是什么,计算机在制造业中的应用ppt
  19. 俄罗斯方块练习中对 swift 语言的体会
  20. 项目管理 | 如何正确的向领导汇报工作?

热门文章

  1. Keeplived配置Nginx双机高可用【转】
  2. XNA 游戏 运行时编辑器
  3. python中的matplotlib(1)
  4. SpringBoot上传图片的示例
  5. RPC框架(一)RPC简介
  6. rabbitmq管理界面的使用
  7. “我是技术总监,你干嘛总问我技术细节?”| 程序员有话说
  8. Linux的apache的allowoverwrite参数的解释
  9. PHPStorm配置使用Git
  10. c4d支持mac系统渲染器有哪些_在macOS Catalina发布前检查哪些应用程序不支持64位系统...