六、springboot之映射原理(源码分析)

从上一节我们了解了什么是rest映射。那是什么让映射与方法结合到一起的呢?

1、步骤分析

​ 我们知道springBoot整合了springMVC所有的组件,在springMVC中,所有的组件控制都是DispatcherServlet,所以我们直接去DispatcherServlet中找寻与转发及handlerMapping相关。以下为流程图示例,你们可以一步步的跳转断点调试
六、springboot之映射原理(源码分析)

2、源码分析

protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {
        HttpServletRequest processedRequest = request;
        HandlerExecutionChain mappedHandler = null;
        boolean multipartRequestParsed = false;

        WebAsyncManager asyncManager = WebAsyncUtils.getAsyncManager(request);

        try {
            ModelAndView mv = null;
            Exception dispatchException = null;

            try {
                processedRequest = checkMultipart(request);
                multipartRequestParsed = (processedRequest != request);

                // step into 进入找到当前请求使用哪个Handler(Controller的方法)处理
                mappedHandler = getHandler(processedRequest);
                
                //HandlerMapping:处理器映射。/xxx->>xxxx

六、springboot之映射原理(源码分析)

​ 所有的请求映射都在HandlerMapping中。
六、springboot之映射原理(源码分析)

RequestMappingHandlerMapping:保存了所有@RequestMapping 和handler的映射规则。

SpringBoot自动配置欢迎页的 WelcomePageHandlerMapping 。访问 /能访问到index.html;

我们需要一些自定义的映射处理,我们也可以自己给容器中放HandlerMapping。自定义 HandlerMapping

上一篇:使用基于 SpringMVC 的透明 RPC 开发微服务


下一篇:【串线篇】SpringMvc之强大的annotation-driven标签