HandlerMapping

我们从DispatchServlet.doDispatch()中可以看到如下源码:

    mappedHandler = this.getHandler(processedRequest);
    @Nullable
    protected HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception {
        if (this.handlerMappings != null) {
            Iterator var2 = this.handlerMappings.iterator();
            while(var2.hasNext()) {
                HandlerMapping mapping = (HandlerMapping)var2.next();
                HandlerExecutionChain handler = mapping.getHandler(request);
                if (handler != null) {
                    return handler;
                }
            }
        }
        return null;
    }

那么我们来了解下HandlerMapping是怎么初始化和怎么工作的:
首先,我们看下HandlerMapping的分支:


image.png

由上图可以知道我们的HandlerMapping可以分为Url和HandlerMethod两个体系。

URL体系

URL体系初始化流程

image.png

SimpleUrlHandlerMapping从继承图可以看出,在ApplicationContext容器初始化的时候将会对SimpleUrlHandlerMapping进行初始化。
SimpleUrlHandlerMapping 初始化流程如下图:


image.png

URL体系处理请求流程

image.png

1,从DispatcherServlet.doDispatch中调用getHandler方法
2,getHandler方法中遍历所有的HandlerMapping对象,并调用其getHandler方法获取HandlerExecutionChain对象
3,SimpleUrlHandlerMapping对象在初始化时将uri和对应的controller名称保存在了一个handlerMap中,lookupHandler会解析请求获取uri,然后获取controller名称,从beanFactory中获取controller对象,最后将contoller封装成一个HandlerExecutionChain返回。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容