getHandler
- 这一步是循环遍历handlerMappings,从里面匹配一个返回。
- handlerMappings在前面的文章中分析过是在初始化九大组件的时候就初始化好的。
上一步的mapping.getHandler是由AbstractHandlerMapping实现的,主要有以下几个功能
- 查找handler处理器的,具体留给子类去重写实现的, 比如根据URL去查找匹配等等
- 构建出一个处理器链 ,和handler绑定,并且内部获取所有的拦截器,然后添加到处理器链里面去
- 如果设置了跨域,配置跨域信息并放入handler中
拦截器是根据url匹配的,因为拦截器可以针对url配置
getHandlerAdapter
- handlerAdapters 在初始化九大组件的时候已经完成,默认配置在DispatcherServlet.properties文件中
- 能否适配主要取决于适配器的supports方法如何实现
默认适配器有如下三个
- HttpRequestHandlerAdapter
- SimplerControllerHandlerAdapter
- RequestMappingHandlerAdapter
下面是 AbstractHandlerMethodAdapter的supports方法,里面的supportsInternal方法由子类RequestMappingHandlerAdapter实现,并且固定返回值true, 而请求处理链中存的就是HandlerMethod,所以适配器使用的是RequestMappingHandlerAdapter