springmvc底层调用流程

(一)核心流程

具体步骤:

1、  首先用户发送请求——>DispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制;

2、  DispatcherServlet——>HandlerMapping,HandlerMapping 将会把请求映射为 HandlerExecutionChain 对象(包含一个 Handler 处理器(页面控制器)对象、多个 HandlerInterceptor 拦截器)对象,通过这种策略模式,很容易添加新的映射策略;

3、  DispatcherServlet——>HandlerAdapter,HandlerAdapter 将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;

4、  HandlerAdapter——>处理器功能处理方法的调用,HandlerAdapter 将会根据适配的结果调用真正的处理器的功能处理方法,完成功能处理;并返回一个 ModelAndView 对象(包含模型数据、逻辑视图名);

5、  ModelAndView 的逻辑视图名——> ViewResolver, ViewResolver 将把逻辑视图名解析为具体的 View,通过这种策略模式,很容易更换其他视图技术;

6、  View——>渲染,View 会根据传进来的 Model 模型数据进行渲染,此处的 Model 实际是一个 Map 数据结构,因此很容易支持其他视图技术;

7、  返回控制权给 DispatcherServlet,由 DispatcherServlet 返回响应给用户,到此一个流程结束。

(二)总结核心开发步骤

1、  DispatcherServlet 在 web.xml 中的部署描述,从而拦截请求到 spring Web MVC

2、  HandlerMapping 的配置,从而将请求映射到处理器

3、  HandlerAdapter 的配置,从而支持多种类型的处理器

4、  ViewResolver 的配置,从而将逻辑视图名解析为具体视图技术

5、  处理器(页面控制器)的配置,从而进行功能处理

因为DispatcherServlet继承了FrameworkServlet,而FrameworkServlet继承了HttpServletBean,而HttpServletBean继承了HttpServlet,所以本质上说,DispatcherServlet也是一个servlet。

因为springmvc实现了httpServlet所以需要先做如下配置来对请求进行拦截。

一个请求过来之后,先看请求路径是否满足如上图图标出的规则。(注:此段配置在web.xml)

如果满足以上规则,则会执行doPost或者doGet方法。因为FrameworkServlet重写了doPost和doGet方法,如下:

而在processRequest方法中调用了doService方法。如下图:

(方法未结束,此处忽略部分代码)

在DispatcherServlet实现了doService抽象方法,并且在doService中做了一些准备工作后,调用了doDispatch方法,如下图:

在doDispatch中调用了具体的我们实现的业务controller,并且返回了modelAndView对象。源码如下图:

(方法未结束,此处忽略部分代码)

将返回的mv返回给用视图解析器处理后返回前端。

本资料转载自: http://blog.csdn.net/a616413086/article/details/52205599

时间: 2024-11-08 14:18:47

springmvc底层调用流程的相关文章

深入源码分析SpringMVC底层原理(二)

原文链接:深入源码分析SpringMVC底层原理(二) 文章目录 深入分析SpringMVC请求处理过程 1. DispatcherServlet处理请求 1.1 寻找Handler 1.2 没有找到Handler的处理 1.3 根据Handler寻找Adapter 1.4 拦截器的处理 1.5 Adapter处理请求 1.6 异常视图的处理 1.7 页面的跳转 2.总结 在上一篇文章中我们讲到了SpringMVC的初始化,分别初始化两个ApplicationContext,并且初始化一些处理器

从源码角度了解SpringMVC的执行流程

目录 从源码角度了解SpringMVC的执行流程 SpringMVC介绍 源码分析思路 源码解读 几个关键接口和类 前端控制器 DispatcherServlet 结语 从源码角度了解SpringMVC的执行流程 SpringMVC的执行流程网上有很多帖子都有讲解,流程图和文字描述都很详细,但是你如果没有通过具体源码自己走一遍流程,其实只是死记硬背.所以想开个帖子从源码角度再梳理一遍SpringMVC的执行流程,加深印象. SpringMVC介绍 SpringMVC采用的是前端控制器(Front

(转)android从应用到驱动之—camera(1)---程序调用流程

一.开篇 写博客还得写开篇介绍,可惜,这个不是我所擅长的.就按我自己的想法写吧. 话说camera模块,从上层到底层一共包含着这么几个部分: 1.apk------java语言 2.camera的java接口----java语言 3.camera的java接口的具体实现,即所谓的JNI-----(java—>C++) 4.camera客户端-----C++语言 5.camera服务器----C++语言 6.camera硬件抽象层,即所谓的HAL------C++语言 7.camera驱动 如上也

1、SpringMVC的工作流程

1.简单的谈一下SpringMVC的工作流程? 流程 1.用户发送请求至前端控制器DispatcherServlet 2.DispatcherServlet收到请求调用HandlerMapping处理器映射器. 3.处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet. 4.DispatcherServlet调用HandlerAdapter处理器适配器 5.HandlerAdapter经过适配调用具体的处理器(Controller

android从应用到驱动之—camera(1)---程序调用流程(转)

一.开篇 写博客还得写开篇介绍,可惜,这个不是我所擅长的.就按我自己的想法写吧. 话说camera模块,从上层到底层一共包含着这么几个部分: 1.apk------java语言 2.camera的java接口----java语言 3.camera的java接口的具体实现,即所谓的JNI-----(java—>C++) 4.camera客户端-----C++语言 5.camera服务器----C++语言 6.camera硬件抽象层,即所谓的HAL------C++语言 7.camera驱动 如上也

android从应用到驱动之—camera(1)---程序调用流程[转]

一.开篇 写博客还得写开篇介绍,可惜,这个不是我所擅长的.就按我自己的想法写吧. 话说camera模块,从上层到底层一共包含着这么几个部分: 1.apk------java语言 2.camera的java接口----java语言 3.camera的java接口的具体实现,即所谓的JNI-----(java—>C++) 4.camera客户端-----C++语言 5.camera服务器----C++语言 6.camera硬件抽象层,即所谓的HAL------C++语言 7.camera驱动 如上也

Samsung_tiny4412(笔记)-->字符设备驱动基本操作及调用流程

/*********************************************************************************** * * Samsung_tiny4412(笔记)-->字符设备驱动基本操作及调用流程 * * 声明: * 以下所有的shell命令都是在root权限下运行的; * * 2015-3-7 阴 深圳 尚观 Sbin 曾剑锋 *******************************************************

RxJava && Agera 从源码简要分析基本调用流程(1)

版权声明:本文由晋中望原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/123 来源:腾云阁 https://www.qcloud.com/community 相信很多做Android或是Java研发的同学对RxJava应该都早有耳闻了,尤其是在Android开发的圈子里,RxJava渐渐开始广为流行.同样有很多同学已经开始在自己的项目中使用RxJava.它能够帮助我们在处理异步事件时能够省去那些复杂而繁琐的代码,尤其是当

通过自己实现接口来加深理解SpringMVC的执行流程

功能介绍 上篇文章[从源码角度了解SpringMVC的执行流程]通过接口源码向大家介绍了SpringMVC的执行流程,主要偏重于源码.这篇文件我们来自己实现那几个关键接口,来真实体验下SpringMVC关键的流程,以此来加深理解.功能很简单,通过访问一个地址 /mymvc 来自动跳转到工程首页,但是我们不用SpringMVC自带的Controller等组件,完全自己手动开发.工程结构如下图 代码流程 将自定义的实现类放入Ioc容器中. @Configuration public class My