其他分享
首页 > 其他分享> > 请求映射的原理

请求映射的原理

作者:互联网

请求映射的原理

首先我们要找到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
在这里插入图片描述
在这里插入图片描述

标签:请求,映射,doGet,request,原理,方法,processedRequest
来源: https://blog.csdn.net/weixin_42881524/article/details/115530162