spring mvc 原理(快速理解篇)


这两张图大家应该都不陌生。
从图上来看就是:一个请求过来,front controller根据具体的请求路径分派到具体的controller,具体的controller处理请求并把处理结果返回给front Controller,front Controller 再把model、view结合起来最终返回给用户。
spring mvc 中的DispatcherServlet的角色就是front controller,DispatcherServlet的类图及接口具体如下图

我们知道一个servlet的生命周期
1初始化阶段 调用init()方法
2响应客户请求阶段 调用service()方法
3终止阶段 调用destroy()方法
所有的处理会放到service方法的实现中,FrameworkServlet里面实现了service()方法,同时在service()里面调用了一个抽象方法doService(),DispatcherServlet实现了doService()方法。简单理解DispatcherServlet在服务起来的时候会执行doService()方法,
大家可以看下DispatcherServlet的源码,比较容易理解:
首先看下类的结构图如下:

1、当服务启动的时候,调用servlet的init方法【此处是HttpServletBean的init方法】,HttpServletBean的init方法中调用了initServletBean方法
2、FrameworkServlet实现了initServletBean方法,这个方法调用initWebApplicationContext()执行上下文Bean初始化
3、FrameworkServlet.initWebApplicationContext方法首先获取自己的双亲上下文(也就是ContextLoaderListener初始化成功的WebApplicationContext);然后创建或者获取当前Servelet的WebApplicationContext
4、WebApplicationContext执行configureAndRefreshWebApplicationContext()方法进行上下文容器初始化【在configureAndRefreshWebApplicationContext方法里构造bean工厂和容器里bean的创建】
以上是init处理的情况,init结束后,来看下service:
1、servlet的init结束后,调用service方法,FrameworkServlet实现了service方法,覆盖了父类HttpServlet
2、FrameworkServlet的service方法会调用doService,DispatcherServlet实现了doService方法【父类的抽象方法doService】
3、doService方法中调用了doDispatch方法。
4、mappedHandler = getHandler(processedRequest, false);通过该方法的处理,根据handlermapping找到具体的HandlerExecutionChain。然后执行HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());最终找到具体的HandlerAdapter
5、mv = ha.handle(processedRequest, response, mappedHandler.getHandler());
6、HandlerAdapter是配到合适的handler然后处理,之后得到ModelAndView对象
7、拿到ModelAndView对象进行处理,最终返回用户具体的页面
第四步可以结合下面的图:

下面这张图是根据handlermapping找到具体的HandlerExecutionChain

第五步结合如下图片来看:

spring mvc 原理(快速理解篇)的更多相关文章
- Spring MVC 原理探秘 - 一个请求的旅行过程
1.简介 在前面的文章中,我较为详细的分析了 Spring IOC 和 AOP 部分的源码,并写成了文章.为了让我的 Spring 源码分析系列文章更为丰富一些,所以从本篇文章开始,我将来向大家介绍一 ...
- Spring MVC 原理探秘 - 容器的创建过程
1.简介 在上一篇文章中,我向大家介绍了 Spring MVC 是如何处理 HTTP 请求的.Spring MVC 可对外提供服务时,说明其已经处于了就绪状态.再次之前,Spring MVC 需要进行 ...
- Spring MVC 教程,快速入门,深入分析
http://elf8848.iteye.com/blog/875830/ Spring MVC 教程,快速入门,深入分析 博客分类: SPRING Spring MVC 教程快速入门 资源下载: ...
- spring MVC原理
spring MVC原理 Spring MVC工作流程图 图一 图二 Spring工作流程描述 1. 用户向服务器发送请求,请求被Spring 前端控制Servelt D ...
- Spring学习 6- Spring MVC (Spring MVC原理及配置详解)
百度的面试官问:Web容器,Servlet容器,SpringMVC容器的区别: 我还写了个文章,说明web容器与servlet容器的联系,参考:servlet单实例多线程模式 这个文章有web容器与s ...
- Spring MVC原理及配置
Spring MVC原理及配置 1. Spring MVC概述 Spring MVC是Spring提供的一个强大而灵活的web框架.借助于注解,Spring MVC提供了几乎是POJO的开发模式,使得 ...
- Spring MVC原理及实例基础扫盲篇
近期 项目中刚接触了SpringMVC,就把这几天看的跟实践的东西写出来吧. 一.首先,先来了解一下SpringMVC究竟是个什么样的框架? Spring Web MVC是一种基于Java的实现了We ...
- Spring MVC 教程,快速入门,深入分析(转载)
作者:赵磊 博客:http://elf8848.iteye.com 下载: Spring的官方下载网址是:http://www.springsource.org/download (本文使用是的 ...
- Spring MVC 教程,快速入门,深入分析[1-11]
资源下载: Spring_MVC_教程_快速入门_深入分析V1.1.pdf SpringMVC核心配置文件示例.rar 作者:赵磊 博客:http://elf8848.iteye.com ...
随机推荐
- js判断移动端跳转
<script type="text/javascript">if(/AppleWebKit.*Mobile/i.test(navigator.userAgent) | ...
- Java基础系列(11)- 变量、常量、作用域以及变量的命名规范
变量 变量是什么:就是可以变化的量 Java是一种强类型语言,每个变量都必须声明其类型 Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域 type varName [=valu ...
- oracle 基础SQL语句 增删改
一.SQL操作 查询已创建的数据库:SELECT datname FROM pg_database; 创建数据库:CREATE DATABASE wzxdb; 删除数据库:DROP DATABASE ...
- localStorage util
// localStorage util var db ={ set : function(key, obj){ localStorage.setItem(key, JSON.stringify(ob ...
- 鸿蒙内核源码分析(重定位篇) | 与国际接轨的对外部发言人 | 百篇博客分析OpenHarmony源码 | v55.01
百篇博客系列篇.本篇为: v55.xx 鸿蒙内核源码分析(重定位篇) | 与国际接轨的对外部发言人 | 51.c.h.o 加载运行相关篇为: v51.xx 鸿蒙内核源码分析(ELF格式篇) | 应用程 ...
- ubuntu18.04 kuebadm 安装 k8s-1.15.9
ubuntu kubeadm 搭建kubernetes1.15.9 准备 update && 安装docker apt-get update apt install docker 修改 ...
- scheduler源码分析——调度流程
前言 当api-server处理完一个pod的创建请求后,此时可以通过kubectl把pod get出来,但是pod的状态是Pending.在这个Pod能运行在节点上之前,它还需要经过schedule ...
- java 从零开始手写 RPC (04) -序列化
序列化 java 从零开始手写 RPC (01) 基于 socket 实现 java 从零开始手写 RPC (02)-netty4 实现客户端和服务端 java 从零开始手写 RPC (03) 如何实 ...
- Electron+Vue+ElementUI开发环境搭建
Node环境搭建 本文假定你完成了nodejs的环境基础搭建: 镜像配置(暂时只配置node包镜像源,部分包的二进制镜像源后续讨论).全局以及缓存路径配置,全局路径加入到了环境变量 $ node -v ...
- SphereEx 创始人张亮云咖访谈回顾:构建数据服务的新思路
2021 年 7 月 21 日,2021 亚马逊云科技中国峰会在上海盛大开幕.本次大会以"构建新格局,共赢云时代"为主题,邀请到来自技术社区.开源软件基金会.开源创业代表.女性开发 ...