这两张图大家应该都不陌生。

从图上来看就是:一个请求过来,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 原理(快速理解篇)的更多相关文章

  1. Spring MVC 原理探秘 - 一个请求的旅行过程

    1.简介 在前面的文章中,我较为详细的分析了 Spring IOC 和 AOP 部分的源码,并写成了文章.为了让我的 Spring 源码分析系列文章更为丰富一些,所以从本篇文章开始,我将来向大家介绍一 ...

  2. Spring MVC 原理探秘 - 容器的创建过程

    1.简介 在上一篇文章中,我向大家介绍了 Spring MVC 是如何处理 HTTP 请求的.Spring MVC 可对外提供服务时,说明其已经处于了就绪状态.再次之前,Spring MVC 需要进行 ...

  3. Spring MVC 教程,快速入门,深入分析

    http://elf8848.iteye.com/blog/875830/ Spring MVC 教程,快速入门,深入分析 博客分类: SPRING Spring MVC 教程快速入门  资源下载: ...

  4. spring MVC原理

    spring MVC原理   Spring MVC工作流程图   图一   图二    Spring工作流程描述       1. 用户向服务器发送请求,请求被Spring 前端控制Servelt D ...

  5. Spring学习 6- Spring MVC (Spring MVC原理及配置详解)

    百度的面试官问:Web容器,Servlet容器,SpringMVC容器的区别: 我还写了个文章,说明web容器与servlet容器的联系,参考:servlet单实例多线程模式 这个文章有web容器与s ...

  6. Spring MVC原理及配置

    Spring MVC原理及配置 1. Spring MVC概述 Spring MVC是Spring提供的一个强大而灵活的web框架.借助于注解,Spring MVC提供了几乎是POJO的开发模式,使得 ...

  7. Spring MVC原理及实例基础扫盲篇

    近期 项目中刚接触了SpringMVC,就把这几天看的跟实践的东西写出来吧. 一.首先,先来了解一下SpringMVC究竟是个什么样的框架? Spring Web MVC是一种基于Java的实现了We ...

  8. Spring MVC 教程,快速入门,深入分析(转载)

    作者:赵磊 博客:http://elf8848.iteye.com 下载: Spring的官方下载网址是:http://www.springsource.org/download    (本文使用是的 ...

  9. Spring MVC 教程,快速入门,深入分析[1-11]

    资源下载: Spring_MVC_教程_快速入门_深入分析V1.1.pdf SpringMVC核心配置文件示例.rar     作者:赵磊 博客:http://elf8848.iteye.com   ...

随机推荐

  1. python mysql增加改查

    #python mysql增加改查,方便日后copy/paste .......... 1 #encoding: UTF-8 2 import pymysql 3 # # 打开数据库连接 4 db = ...

  2. nextcloud 中文乱码解决方案

    参考地址 :https://www.yht7.com/news/13909 我是使用的第二种方法, 修改/nextcloud/lib/public/AppFramework/Http/FileDisp ...

  3. AT1983-[AGC001E]BBQ Hard【dp,组合数学】

    正题 题目链接:https://www.luogu.com.cn/problem/AT1983 题目大意 给出\(n\)个数对\((a_i,b_i)\) 求 \[\sum_{i=1}^n\sum_{j ...

  4. P7443-加边【博弈论】

    正题 题目链接:https://www.luogu.com.cn/problem/P7443?contestId=41429 题目大意 \(n\)个点的一棵有根树,两个人从一号点开始进行有向图博弈. ...

  5. 4-让线程睡眠的sleep方法

    让线程睡眠的sleep方法 Thread类有一个静态的sleep方法,当一个执行中的线程调用了Thread的sleep方法,调用线程就会让出指定时间的执行权,也就是在这期间不参与CPU调度,但是该线程 ...

  6. vue组件的生命周期详解

    1.生命周期&生命周期函数 生命周期:指一个组件从创建->运行->销毁的整个阶段,强调的是一个时间段. 生命周期函数:由vue框架提供的内置函数,会伴随着组件的生命周期,自动按序执 ...

  7. 题解 [HNOI/AHOI2018]毒瘤

    题目传送门 题目大意 给出一个 \(n\) 个点 \(m\) 条边的无向图,问有多少个点集满足点集中任意两点均不存在边相连. \(n\le 10^5,m-n\le 10\),答案对 \(9982443 ...

  8. 2021.7.27--Benelux Algorithm Programming Contest 2020 补提

    I Jigsaw 题目内容: 链接:https://ac.nowcoder.com/acm/contest/18454/I 来源:牛客网 You have found an old jigsaw pu ...

  9. Java多线程编程实战指南 核心篇 读书笔记

    锁 volatile CAS final static 原子性保障 具备 具备 具备 不涉及 不涉及 可见性保障 具备 具备 不具备 不具备 具备① 有序性保证 具备 具备 不涉及 具备 具备② 上下 ...

  10. 未来云原生 | CIF 论坛精彩看点

    当下云原生技术正在飞速发展,那么如何准确理解「云原生」?在发展不够成熟,行业认知差异大的情况下,不论是云原生计算基金会(CNCF),还是行业的任何大咖,都不能给出精确的.便于理解的定义.我们要理解的逻 ...