浅谈SpringMVC执行过程
通过深入分析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
浅谈SpringMVC执行过程的更多相关文章
- 阿里P7浅谈SpringMVC
一.前言 既然是浅谈 SpringMVC,那么我们就先从基础说起,本章节主要讲解以下内容: 1.三层结构介绍 2.MVC 设计模式介绍 3.SpringMVC 介绍 4.入门程序的实现 注:介绍方面的 ...
- 深入源码分析SpringMVC执行过程
本文主要讲解 SpringMVC 执行过程,并针对相关源码进行解析. 首先,让我们从 Spring MVC 的四大组件:前端控制器(DispatcherServlet).处理器映射器(HandlerM ...
- 浅谈js执行机制
关于js执行机制,老早之前就一直想写篇文章做个总结,因为和js执行顺序的面试题碰到的特别多,每次碰到总是会去网上查,没有系统地总结,搞得每次碰到都是似懂非懂的感觉,这篇文章就系统的总结一下js执行机制 ...
- SpringMvc执行过程
--Test过程: 1. 先执行各种 Filter 2. HttpServlet.service(ServletRequest req, ServletResponse res) 3. HttpSer ...
- 浅谈JS执行环境及作用域
今天刚刚开通博客,也是第一次写博文,略感紧张.作为一个表达能力弱弱的人来说,自己花三分钟理解一个知识点,当别人问起时,也许需要30分钟才只是让别人知道自己在说什么,一点也不夸张,希望在博客上可以练习 ...
- 浅谈SpringMVC(二)
一.SpringMVC的拦截器 1.写类implements HandlerInterceptor public class MyMvcInterceptor implements HandlerIn ...
- 浅谈SpringMVC(一)
一.SpringMVC引言 Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring 框架提供了构建 Web 应用程序的全功能 MV ...
- Spring Taco Cloud——Controller的创建(含SpringMVC执行过程&SpringBoot&Spring三者解释及关联)
在记录这次控制器编写前,对于Spring的感觉就是经常提这样代码好简洁,这样好方便,这个是用来干嘛的诸如之类的话. What is Spring ?这是我想问自己的,一直认为是简化代码利于工程的开源框 ...
- 浅谈SpringMVC
M--模型(实体vo[视图对象]与页面对面) V--视图(JSP,,velocity,FreeMarker,html,thymeleaf) C--控制器(servlet,if语句控制M数据跳转到V进行 ...
随机推荐
- BZOJ_2679_[Usaco2012 Open]Balanced Cow Subsets _meet in middle+双指针
BZOJ_2679_[Usaco2012 Open]Balanced Cow Subsets _meet in middle+双指针 Description Farmer John's owns N ...
- KVM虚拟化环境准备
1. 概述2. 环境准备2.1 硬件环境2.2 软件环境2.2.1 YUM安装软件包2.2.2 环境检查2.2.3 启动libvirtd服务2.3 网络环境2.3.1 复制网卡配置文件2.3.2 修改 ...
- appium+python+eclipse简单编写小示例!
Appium简单介绍! 一.appium分成3个部分来看,分别为:appium服务端.appium客户端.设备端 1.设备端 WebDriverAgentRunner 的应用,以后简称 WDA,这个应 ...
- 当需要向数据库插入空值时,sql语句的判断
方法如下: 1.int代表整形. 2.string 代表 字符型. 3.datetime ,日期类型判断如下 if(account.date!=Datetime.MinValue) { Str1.Ap ...
- Mybatis学习笔记之一(环境搭建和入门案例介绍)
一.Mybatis概述 1.1 Mybatis介绍 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了go ...
- [PHP]日志处理error_log()函数和配置使用
1.error_log($message,$message_type,$destination,$extra_headers)函数, 2.message_type 是0,发送信息到php.ini配置的 ...
- Java并发——volatile关键字
什么是内存可见性? 这里就要提一下JMM(Java内存模型).当线程在运行的时候,并不是直接直接修改电脑主内存中的变量的值.线程间通讯也不是直接把一个线程的变量的值传给另一个线程,让其刷新变量.下面是 ...
- ES6数组扩展运算符
1 扩展运算符的运用 (1)复制数组 数组是复合的数据类型,直接复制的话,只是复制了指向底层数据机构的指针,而不是克隆一个全新的数组; const a1=[1,2]; const a2= a1; a2 ...
- Android studio无法创建类和接口问题解决办法。提示 Unable to parse template "Class"
重新配置了studio 的工作环境, 没问题,后来加需求要新增java类和接口,这就出现问题了,新建的时候,就会报错: Unable to parse template "Interface ...
- July 10th, 2018. Tuesday, Week 28th
Winning isn't everything, but wanting it is. 胜利并不能代表一切,但求胜心可以. From Arnold Palmer. Compared to this ...