请求映射的原理

请求映射的原理

首先我们要找到DispatcherServlet这个类,因为所有的请求都是由这个类进行处理的。
请求映射的原理
打开DispatcherServlet的继承树。
请求映射的原理
从继承树上我们看到看到,DispatcherServlet同样是一个servlet。我们知道servlet首先调用的是doGet方法。
在httpservlet中没有找到doGet()方法,这是因为FrameworkServlet这个类重写了doGet方法。
请求映射的原理
在doGet方法中,首先调用了processRequest()方法,然后进行了一些初始化的操作,再然后,便是调用了doService方法。请求映射的原理
因为DispatchServlet重写继承了FrameworkServlet这个类,并且重新写了其中的doService方法,因此调用的是DispatchServlet中的doService方法。
请求映射的原理
然后对请求增加了一些参数,执行了doDispatch()方法。
请求映射的原理

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);

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

mappedHandler = getHandler(processedRequest)这个方法是看现在的请求需要哪个Handler处理(Controller的方法),得到处理器映射器。
请求映射的原理
一共有5个HandlerMaping。
请求映射的原理
RequestMappingHandlerMapping:保存了所有@RequestMapping 和handler的映射规则。
请求映射的原理
所有的请求映射都在HandlerMapping中。
• SpringBoot自动配置欢迎页的 WelcomePageHandlerMapping 。访问 /能访问到index.html;
• SpringBoot自动配置了默认 的 RequestMappingHandlerMapping
• 请求进来,挨个尝试所有的HandlerMapping看是否有请求信息。
• 如果有就找到这个请求对应的handler
• 如果没有就是下一个 HandlerMapping
请求映射的原理
请求映射的原理

上一篇:第二十五章:责任链模式


下一篇:SpringMVC处理请求和返回流程