关于SpringMVC的工作流程我引用其官方文档上的一幅截图:
上面这幅图从宏观上粗略的介绍了SpringMVC的整个工作流程,简洁明了。
下面我从代码的角度去感受一下:
由于,我们在web.xml中声明了一个DispatcherServlet,那么,tomcat启动的时候就会初始化它。
我们知道,Servlet的初始化方法是init(),就从这里入手,看看它初始化都干了些什么
一、初始化
在HttpServletBean中有一个init方法
FrameworkServlet类中重写了initServletBean()方法
FrameworkServlet中的initWebApplicationContext()方法
Dispatcher类中重写onRefresh()方法
至此,我们看到DispatcherServlet初始化的时候顺带初始化了一堆组件,什么视图解析器、处理器映射之类的。
二、处理请求
因为DispatcherServlet是继承HttpServlet的,所以处理请求时会调用doGet或者doPost方法
在FrameworkServlet类中重写了doGet和doPost方法
FrameworkServlet中processRequest方法是这样的
它调用了doService方法,接下来,好戏开始了
DispatcherServlet重写了doService()方法
至此,请求处理完成
总结一下处理过程:
绑定资源到请求
检查是否文件上传
查找HandlerMappping获得HandlerExecutionChain
依次调用与处理器关联的所有拦截器的preHandle方法
调用处理器方法
依次调用与处理器关联的所有拦截器的postHandle方法
渲染视图
依次调用与处理器关联的所有拦截器的afterCompleting方法