SpringMVC工作原理2(代码详解)

图1.流程图
1.当一个请求(request)过来,进入DispatcherServlet中,里面有个方法叫 doDispatch()方法 里面包含了核心流程
源码如下:
4.然后往下看getHandler():(DispatcherServlet.Java)
mapperHandler是 HandlerExecutionChain (处理器调用链) 类。
HandlerExecutionChain 包含了处理器对象以及和处理器相关的拦截器,有目标方法和Handler。
HandlerMapping 获取HandlerExecutionChina对象
源码的1120行(DispatcherServlet.java)。
这里 1115行的 Handlermapping 定义了请求到处理器之间的映射,请求找到处理器就需要用到HandlerMapping。
5.上面的代码执行完后又返回到932行,继续执行:
这里将出现三种情况:
一、当请求的url路径不存在时(没有对应的requestmapping注解方法)
如果发的请求的映射是空的。返回的HandlerExecutionChain、mappedHandler对象为空表示没有对应的映射
执行noHandlerFound方法
经过这个方法 表示没有页面并且会进入404 错误页面。
二、 当请求的路径url不存在时(没有对应的requestmapping注解方法),applicationcontext.xml中存在以下注解时:
经过上面的配置 则 getHandler()不是null,因为加上以上的配置,会调用SimpleUrlHandlerMapping 去寻找本地的静态资源,如css、js 等但是同样的路径不存在跳转到404页面。
三、如果存在映射,继续执行之后的代码:
6.执行到上面这行getHandlerAdapter():
HandlerAdapter(Handler适配器)
这个类进行了很多操作,比如表单到实体Bean的赋值,通过Binner进行了 数据的绑定。
7.继续执行:954行preHandle().
这里呢,底层调用了拦截器的 PreHandle方法,如图:
8.然后继续执行到代码 959行(DispatcherServlet.java),handle()方法。
这里呢就返回了一个ModelAndView,如果所示.
9.随后代码继续执行 调用了拦截器的postHandler()方法 ,然后调用ProcessDispatchResult方法,如下图:
继续执行
然后继续执行 一直到代码 1027行(DisPatcherServlet.java)
10.这里就是已经在渲染视图了render()方法
这里通过在applicationcontext.xml中配置的视图解析器 进行了引用然后将页面进行了转发,
上面的 rd.forward 就是进行了转发 然后整个流程就已经走完了!!!
SpringMVC工作原理2(代码详解)的更多相关文章
- 基础 | batchnorm原理及代码详解
https://blog.csdn.net/qq_25737169/article/details/79048516 https://www.cnblogs.com/bonelee/p/8528722 ...
- DeepLearning tutorial(3)MLP多层感知机原理简介+代码详解
本文介绍多层感知机算法,特别是详细解读其代码实现,基于python theano,代码来自:Multilayer Perceptron,如果你想详细了解多层感知机算法,可以参考:UFLDL教程,或者参 ...
- 非极大值抑制(NMS,Non-Maximum Suppression)的原理与代码详解
1.NMS的原理 NMS(Non-Maximum Suppression)算法本质是搜索局部极大值,抑制非极大值元素.NMS就是需要根据score矩阵和region的坐标信息,从中找到置信度比较高的b ...
- Spring之IOC原理及代码详解
一.什么是IOC 引用 Spring 官方原文:This chapter covers the Spring Framework implementation of the Inversion of ...
- NFS工作原理及配置文件详解
nfs工作原理流程 如上图所示,当访问程序通过NFS客户端向NFS服务端存取文件时,其请求数据流程如下几点: 1.首先用户访问网站程序,由程序在NFS客户端上发出NFS文件存取功能 ...
- 以太坊工作原理之txpool详解
txpool详解 交易池txpool作为区块链系统的重要组成部分,对系统的安全性和稳定性具有重要作用.功能可归纳为:交易缓存.交易验证和交易过滤. 基本介绍 交易分类和缓存 txpool主要包含两个重 ...
- 场效应管种类-场效应管N、P沟道与增强、耗尽型工作原理等知识详解 如何选用晶体三极管与场效应管的技巧
http://www.kiaic.com/article/detail/1308.html 场效应管种类场效应管 场效应晶体管(Field Effect Transistor缩写(FET))简称场效应 ...
- vmware三种网络模式的工作原理及配置详解
vmware为我们提供了三种网络工作模式,它们分别是:Bridged(桥接模式).NAT(网络地址转换模式).Host-Only(仅主机模式). 打开vmware虚拟机,我们可以在选项栏的“编辑”下的 ...
- ansible 工作原理以及使用详解
内容:1.ansible的作用以及工作结构2.ansible的安装以及使用3.ansible的playbook使用 一.ansible的作用以及工作结构 1.ansible简介: ...
- SpringMVC工作原理详解
先来看一下什么是 MVC 模式 MVC 是一种设计模式. MVC 的原理图如下: SpringMVC 简单介绍 SpringMVC 框架是以请求为驱动,围绕 Servlet 设计,将请求发给控制器,然 ...
随机推荐
- php使用inotify实现队列处理
php使用inotify实现队列处理参考如下文章:http://blog.jiunile.com/php%E4%BD%BF%E7%94%A8inotify%E5%AE%9E%E7%8E%B0%E9%9 ...
- Session的使用与Session的生命周期
1.HttpSession的方法 Object getAttribute(String); Enumeration<String> getAttributeNames(); long ge ...
- myeclipse中格式化代码快捷键Ctrl+Shift+F失效的解决办法
任何软件快捷键失效99%的原因是跟其他软件的快捷键冲突了,经过检查,是跟搜狗输入法的简繁体切换快捷键Ctrl+Shift+F 冲突了,打开搜狗工具箱中的属性设置: 在属性设置中找到“按键”,将简繁体快 ...
- Windows下OpenCV 3.1.0 在 Qt Creator 4.0.2 (Qt 5.7.0 MinGW) 中的开发环境配置
2017-2-23 Update: 修改并添加了部分细节 最近正在学习OpenCV ,为毕业设计做准备.Windows版本的OpenCV都默认提供对VS的支持,其在VS中的配置比较简单,网上也有大批教 ...
- 练手THINKPHP5过程和bootstrap3.3.7
1 在GIT上下载了最新版的源码,同时安装composer 用composer更新 git地址https://github.com/top-think/think 2 搭建本地开发环境,开启url重写 ...
- jdk1,8 HashMap
Java源码分析:HashMap 1.8 相对于1.7 到底更新了什么? 上面网站总结很详细 源码除了具体操作其余全罗列.这里就不总结了
- Sqlserver查询数据库文件大小和剩余空间
在MS Sql Server中可以能过以下的方法查询出磁盘空间的使用情况及各数据库数据文件及日志文件的大小及使用利用率: 1.查询各个磁盘分区的剩余空间:Exec master.dbo.xp_fixe ...
- awk分割字符串
想从目标字符串中,提取想要的字符,可以用awk命令. 例如: 从<version>1.3.1-SNAPSHOT</version>中提取版本号,则可以用命令:awk -F'[& ...
- UI5-文档-4.13-Margins and Paddings
我们的应用程序内容仍然粘在信箱的角落里.要微调布局,可以向上一步添加的控件添加空白和填充. 我们将使用SAPUI5提供的标准类,而不是手工向控件添加CSS.这些类负责一致的分级步骤.从左到右的支持和响 ...
- oracle rac 常见安装、管理错误
1. 安装CRS失败,或执行root.sh报错,可能原因: (1) 节点间的时间不同步,解决方法:使用ntp服务 (2) Linux下启用了默认的防火墙,导致执行root.sh报错: Failure ...