1.请求进入DispatcherServlet的doService()进行处理前准备工作
- 通过
logRequest()打印请求日志 - 将
WebApplicationContext和一些解析器(LocalResolver、ThemeResolver)通过setAttribute()设置在请求中 
2.doService()最后调用doDispatch()开始真正处理工作
- 若请求是
Multipart请求,则转换为MultipartFile请求 - 通过
HandlerMapping获取请求对应的HandlerExecutionChain(Handler+List<HandlerInterceptor>)- 常规的使用的
RequestMappingHandlerMapping类寻找HandlerExecutionChain HandlerExecutionChain中包含了拦截器和Handler(具体的是HandlerMethod)
 - 常规的使用的
 

- 通过
HandlerExecutionChain中的Handler(HandlerMethod)生成对应的HandlerAdapter(RequestMappingHandlerAdapter) 

- 处理
last-modify头部信息 - 调用
HandlerExcutionChain中的拦截器类中的PreHandler()方法 - 真正执行
Handler方法(具体Controller类中的某个方法) - 调用
HandlerExcutionChain中的拦截器中的PostHandle()方法 
3.doDispatch()方法调用processDispatchResult()完成最终结果处理
- 异常处理
 - 调用
render()方法,render()方法中先解析出View,然后View通过model再次渲染 - 通过
HandlerExecutionChain获取拦截器,并执行拦截器的afterCompletion() 

