SpringMVC源码解读
1.SpringMVC简介
SpringMVC框架是围绕一个DispatherServlet来设计的。这个Servlet会把请求分发给各个处理器,并支持可配置的处理器映射、视图渲染、本地化、时区与主题渲染等,甚至还支持文件上传。处理器是应用中使用注解@Controller和@RequestMapping的类和方法,Spring为处理器方法提供了极其灵活的配置。
“对扩展开放”是Spring web MVC 框架的一个重要的设计原则,而对应Spring整个框架来说,其设计原则是“对扩展开放,对修改关闭”。
2.关于DispatherServlet
从这张图可以清晰的看出,DispatherServlet本质上就是一个Servlet。
引申:Servlet生命周期
2.DispatherServlet初始化过程
<?xml version="1.0" encoding="UTF-8"?> |
1.Servlet 是个接口
public void init(ServletConfig config) throws ServletException;
2.GenericServlet 中实现了初始化方法。
public void init(ServletConfig config) throws ServletException {
this.config = config;
this.init();//空方法,留给子类实现
}
3.HttpServlet 没有对初始化相关的方法进行覆盖。
4.HttpServletBean,重写了init()方法。
其中又调用了一个initServletBean();方法,这本类中也是个空实现。
5.FrameworkServlet 重写了上边留空的方法:initServletBean();
在initServletBean方法中最重要的就是调用了一个initWebApplicationContext() 方法。
initWebApplicationContext()内部调用了onRefresh(), 这个方法在本类中为空实现,留给子类去实现。
6.DispatcherServlet,找到onRefresh()
@Override
protected void onRefresh(ApplicationContext context) {
initStrategies(context);
}
protected void initStrategies(ApplicationContext context) {
initMultipartResolver(context);
initLocaleResolver(context);
initThemeResolver(context);
initHandlerMappings(context);
initHandlerAdapters(context);
initHandlerExceptionResolvers(context);
initRequestToViewNameTranslator(context);
initViewResolvers(context);
initFlashMapManager(context);
}
至此,DispatherServlet初始化完毕!
3.DispatherServlet工作原理

①:DispatcherServlet是springmvc中的前端控制器(front controller),负责接收request并将request转发给对应的处理组件.
②:HanlerMapping是springmvc中完成url到controller映射的组件.DispatcherServlet接收request,然后从HandlerMapping查找处理request的controller.
③:Cntroller处理request,并返回ModelAndView对象,Controller是springmvc中负责处理request的组件(类似于struts2中的Action),ModelAndView是封装结果视图的组件.
④ ⑤ ⑥:视图解析器解析ModelAndView对象并返回对应的视图给客户端.
4.几个关键的类或接口
HandlerMapping
HandlerExecutionChain
HandlerInterceptor
HandlerAdapter
View
5.分步讲解源码
SpringMVC源码解读的更多相关文章
- SpringMVC源码解读 - HandlerMapping
SpringMVC在请求到handler处理器的分发这步是通过HandlerMapping模块解决的.handlerMapping 还处理拦截器. 先看看HandlerMapping的继承树吧 可以大 ...
- SpringMVC源码解读 - RequestMapping注解实现解读 - RequestMappingInfo
使用@RequestMapping注解时,配置的信息最后都设置到了RequestMappingInfo中. RequestMappingInfo封装了PatternsRequestCondition, ...
- SpringMVC源码解读 - RequestMapping注解实现解读 - RequestCondition体系
一般我们开发时,使用最多的还是@RequestMapping注解方式. @RequestMapping(value = "/", param = "role=guest& ...
- SpringMVC源码解读 - RequestMapping注解实现解读
SpringMVC源码解读 - RequestMapping注解实现解读 - RequestCondition体系 https://www.cnblogs.com/leftthen/p/520840 ...
- springMVC 源码解读系列(一)初始化
先看看DispatcherServlet的类机构: 初始化时序图: servlet初始化会调用 init 方法,换句话说就是springMVC进行初始化的时候首先会去执行HttpServletBean ...
- springmvc源码解读(简介)
1.客户端请求提交的DispatcherServlet 2.由DispatcherServlet控制器查询一个或者多个HandlerMapping,找到处理请求的Controller. 3.Dispa ...
- SpringMVC源码解读 - HandlerMapping - SimpleUrlHandlerMapping初始化
摘要: SimpleUrlHandlerMapping只是参与Handler的注册,请求映射时由AbstractUrlHandlerMapping搞定. 初始化时,通过setMappings(Prop ...
- springMVC源码解读笔记
1: DispatcherServlet 的初始化流程(调用的init方法) a) 初始化spring高级容器,WebApplicationContext(容器初始化12个步骤) Servlet类的i ...
- SpringMVC源码解读 - HandlerMapping - RequestMappingHandlerMapping请求分发
AbstractHandlerMethodMapping实现接口getHandlerInternal,定义查找流程 RequestMappingInfoHandlerMapping根据RequestM ...
随机推荐
- socket status 的状态变化详解
原文链接: http://www.diranieh.com/SOCKETS/SocketStates.htm --------------------------------------------- ...
- 安装好oracle后如何使用PLSQL连接【我】
简单的说: 一.如果你本地安装的是32位的Oracle,可以直接在PLSQl中配置oracle安装路径下的相关目录文件,直接启动PLSQL 二.如果你本地安装的是64位的Oracle或者oracle服 ...
- QCamera检测摄像头
The QCamera class provides interface for system camera devices. More... Header: #include <QCamera ...
- C/C++中回调函数【重要】
参考学习:https://www.cnblogs.com/xuelisheng/p/9339924.html 1. 回调函数定义 回调函数就是一个通过函数指针调用的函数. 如果你把 函数的指针(地址) ...
- ABAP DEMO 下拉框
效果展示: *&---------------------------------------------------------------------* *& Report YCX ...
- 最基础的Python的socket编程入门教程
最基础的Python的socket编程入门教程 本文介绍使用Python进行Socket网络编程,假设读者已经具备了基本的网络编程知识和Python的基本语法知识,本文中的代码如果没有说明则都是运行在 ...
- centos 7 修改计算机名
[root@centos7 ~]$ hostnamectl set-hostname test.xyz.com # 使用这个命令会立即生效且重启也生效 [root@centos7 ~]$ host ...
- iOS实现简单时钟效果
实现的效果图如下 : 实现代码如下: #import "ViewController.h" //将旋转角度转换为弧度制#define angleToRadion(angle) (( ...
- 【Leetcode_easy】884. Uncommon Words from Two Sentences
problem 884. Uncommon Words from Two Sentences 题意:只要在两个句子中单词出现总次数大于1次即可. 注意掌握istringstream/map/set的使 ...
- Angular cookies
参考地址:https://stackoverflow.com/questions/34298133/angular-cookies/36093800#36093800 @Component({ sel ...