java mvc 源码分析_SpringMVC 源码解读笔记
MVC 模式早已被大家熟知,多多少少大家都接触过一些MVC的框架比如stuts,webwork,springmvc,当我们谈论到MVC时其实就是了解他的这种分层理念,职责清晰化,抛弃了原来的混合开发模式,把程序的交互分为了Model 数据处理层,View 视图处理层,Contro 逻辑控制层, 职责清晰明了,更利于程序的扩展和维护。
当然我们只简简单单的知道这些东西还不够,我们还需要深入这些设计模式的实现里面去探索,今天我们要学习的是MVC理念应用框架中应用最广的一个SpringMVC。我们先通过程序源代码去分析了解它是怎么工作的,然后总结自己动手实现一个MVC框架。
我们要深入学习这个框架,那么阅读框架的源代码就是必要的了,当然阅读源代码的过程是一个比较痛并快乐的过程,痛苦的是代码绕来绕去容易晕,快乐的是一旦看懂了里面的逻辑和设计就会获益良多。
当然为了让大家花更少的时间成本来看懂源代码,这里为大家理清了整个源代码的架构逻辑,大家根据这个逻辑看源码的就非常容易懂了,我把SpringMVC的整个实现过程主要分成了三个过程,搭建过程、初始化过程、请求处理过程,下面我们来看下这几个过程分别做了些什么事。
配置搭建过程
配置过程里面主要是针对Http容器(tomcat)的配置,这个里面主要是明确可以处理哪些请求,由谁处理。
1、Web.xml配置统一请求的入口,由哪个类统一接受请求。
2、配置请求入口可以接受哪些请求。
3、初始化配置,加载spring的基本配置信息。
初始化信息过程。
初始化信息的过程比较多,这里为了快速理解,我们只把最关键且必要的流程列出来。
1、初始化保存请求URL和Controller的关系并封装到HandleMaping里面。
2、初始化参数信息,保留方法名、方法参数,方法参数所在位置的关系。
3、初始化视图解析器的规则,在哪个文件夹下找对应的视图文件,前缀和后缀规则是怎样的。
请求处理过程。
请求处理过程是整个SpringMVC最核心的地方,这里统一接受用户的请求进行处理并响应用户结果。
1、接受用户对应类型的请求
2、对请求头参数进行处理。
3、获得用户请求的URL,并根据URL找到对应的Controller. 和method
4、把用户请求的参数封装传递给对应Controller的method。
5、Controller执行对应的method逻辑。
6、根据method响应信息,决定用什么视图方式响应给用户。
java mvc 源码分析_SpringMVC 源码解读笔记相关推荐
- java计算机毕业设计营养分析系统源码+数据库+系统+lw文档+部署
java计算机毕业设计营养分析系统源码+数据库+系统+lw文档+部署 java计算机毕业设计营养分析系统源码+数据库+系统+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 ...
- 【Android 电量优化】JobScheduler 源码分析 ( JobServiceContext 源码分析 | 闭环操作总结 | 用户提交任务 | 广播接收者接受相关广播触发任务执行 )★
文章目录 一.JobServiceContext 引入 二.JobServiceContext 源码分析 三.用户在应用层如何使用 JobScheduler 四.用户提交任务 五.广播接收者监听广播触 ...
- Android源码分析--MediaServer源码分析(二)
在上一篇博客中Android源码分析–MediaServer源码分析(一),我们知道了ProcessState和defaultServiceManager,在分析源码的过程中,我们被Android的B ...
- Linux内核 eBPF基础:kprobe原理源码分析:源码分析
Linux内核 eBPF基础 kprobe原理源码分析:源码分析 荣涛 2021年5月11日 在 <Linux内核 eBPF基础:kprobe原理源码分析:基本介绍与使用>中已经介绍了kp ...
- k8s源码分析--kube-scheduler源码(一)
版本:v1.13.0 启动分析 kubernetes基础组件的入口均在cmd目录下,kube-schduler入口在scheduler.go下. kubernetes所有的组件启动采用的均是comma ...
- k8s client-go源码分析 informer源码分析(3)-Reflector源码分析
k8s client-go源码分析 informer源码分析(3)-Reflector源码分析 1.Reflector概述 Reflector从kube-apiserver中list&watc ...
- xf86-video-intel源码分析1 —— 源码目录结构概览
在<Spectacle/Flameshot/X11 Xlib截屏问题现象及解决方法>一文(链接如下)中提到, Spectacle/Flameshot/X11 Xlib截屏问题现象及解决方法 ...
- 【Android 热修复】热修复原理 ( 类加载分析 | 分析 PathClassLoader 源码 | 分析 BaseDexClassLoader 源码 | 分析 PathDexList 源码 )
文章目录 一.分析 PathClassLoader 源码 二.分析 BaseDexClassLoader 源码 三.分析 PathDexList 源码 四. 源码资源 一.分析 PathClassLo ...
- 【Android 电量优化】JobScheduler 相关源码分析 ( JobSchedulerService 源码分析 | 任务检查 | 任务执行 )
文章目录 一.回调 StateChangedListener 接口 二.JobHandler 处理 ( 任务检查 ) 三.maybeRunPendingJobsH 方法 四.assignJobsToC ...
最新文章
- Redis为什么又引入了多线程?单线程不香了?
- AI会让人类失业吗? 马云马化腾们不这么认为
- 我们用最详细的方式解析Android消息机制的源码,经典好文
- 在python中strip_python中strip()函数怎么用?
- [NOI2009] 变换序列 (匈牙利最大匹配)
- 移位操作提高代码的可读性_本地记录或类,以提高流操作的可读性
- K8S的HelloWorld之旅
- 设计有三个窗口的框架结构网页_技术周刊丨钢框架结构直接分析设计与传统设计方法对比研究——恒荷载作用结果对比...
- 【华为大咖分享】7.大型云平台的DevOps实践(后附PPT下载地址)
- 多任务的同步与相互排斥
- 【分享】小工具大智慧之Sql执行工具
- Deskreen 将 Web 浏览器变为第二屏幕
- 时间序列数据的平稳性检验
- JavaScript实现百度坐标系、火星坐标系、WGS84坐标系的互相转换
- 销售管理系统c语言 总结报告,C语言课程设计报告-药品销售管理系统.doc
- 黑月教主工具脱水印_PS三种去水印方法简单粗暴!看完你就学会!
- 【离散数学】p^q^r为什么既是合取范式又是析取范式
- Git正解 脱水版 【9. 其他VCS系统】
- 项目中引入阿里巴巴矢量字体图标库
- 计算机毕业设计ssm文档资料管理系统
热门文章
- Python 代码覆盖率统计工具 coverage.py
- sip消息类型和消息代码详解-转
- 用计算机制作模拟,计算机模拟设计,computer simulation design,音标,读音,翻译,英文例句,英语词典...
- Java任务调度框架Quartz教程实例
- Spring源码总结与分析
- 操作虚拟dom模拟react视图渲染
- 数据库查询索引(sql单个索引和复合索引)
- 据中心综合管理存在诸多挑战
- centos6.5 源码安装php7
- 《Redis实战》一1.2 Redis数据结构简介