SpringMVC——DispatcherServlet源码分析

首先启动项目,进行初始化操作:
SpringMVC——DispatcherServlet源码分析
initStrategies()函数主要对DispatcherServlet类中的几个属性进行初始化操作,其中的几个属性为:

  • MultipartResolver:解析多部分请求,以支持HTML表单上传文件
  • HandlerMapping:用于handlers映射请求和一系列的对于拦截器的前处理和后处理,大部分用Controller注解
  • HandlerAdapter:帮助DispatcherServlet处理映射处理程序的适配器,而不用考虑实际调用的是哪个处理程序
  • ViewResolver:根据实际配置解析实际的View类型

接下来我们来看DispatcherServlet类中的doDispatch方法:
SpringMVC——DispatcherServlet源码分析
我们再看几个重要的地方:
SpringMVC——DispatcherServlet源码分析
在这里,DispatherServlet通过getHandler方法获取一个HandlerExecutionChain对象,HandlerExecution是由HandlerMapping根据请求映射返回的,其中包含Handler和拦截器HandlerInterceptor
SpringMVC——DispatcherServlet源码分析

我们看看getHandler的代码:
SpringMVC——DispatcherServlet源码分析
在DispatcherServlet中的getHandler()方法中,使用了一个while循环,然后根据请求在处理映射器中寻找到对应的Handler,并由HandlerMapping对象创建HandlerExecutionChain对象
SpringMVC——DispatcherServlet源码分析
getHandler执行的就是上面这个过程

getHandler()设计一个设计模式——拦截过滤器模式(拦截过滤器模式用于对应用程序的请求或相应做一些预处理/后处理,定义过滤器,并在请求传给实际目标应用程序之前应用在请求上)

handlerMapping中的getHandler()

HandlerMapping对象的getHandler()方法是一个接口:
SpringMVC——DispatcherServlet源码分析
它的实现类为AbstractHandlerMapping
SpringMVC——DispatcherServlet源码分析
我们看一下getHandlerExecutionChain方法:
SpringMVC——DispatcherServlet源码分析
到这里,DispatcherServlet已经获取了用户请求对应的HandlerExecutionChain对象,接下来就是获取HanlderAdapter对象
SpringMVC——DispatcherServlet源码分析