• springMVC 源码学习-请求映射原理


    一、DispatcherServlet的继承关系

    1、FrameworkServlet

            HttpServlet中的doGet等方法在FrameworkServlet之中重写了,都是调用该方法:

             在这个方法内部调用doServlce的方法

             这个doService的方法在FrameworkServlet中是一个抽象方法,说明是交给它的子类去重写的即就是DispatcherServlet。

    2、DispathcerServlet

            这也是SpringMVC的核心组件,用来处理请求,重写(实现了)doService方法。

             在doService方法中,最核心的是调用doDispatch来做转发等操作。

    2.1 doDispatch

            随便写了个控制器测试 :

            

            当发送/car请求时候,在doDispatch中获取到请求

            在request变量中就有请求路径。

     

            之后执行到这一步:

            在这一步执行完之后就找到了所对应的控制器及上面的 Car()  方法。

    2.2 mappedHandler的确定

            this.getHandler方法:

    1. @Nullable
    2. protected HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception {
    3. if (this.handlerMappings != null) {
    4. Iterator var2 = this.handlerMappings.iterator();
    5. while(var2.hasNext()) {
    6. HandlerMapping mapping = (HandlerMapping)var2.next();
    7. HandlerExecutionChain handler = mapping.getHandler(request);
    8. if (handler != null) {
    9. return handler;
    10. }
    11. }
    12. }

            其中handlerMappings初始就有5个:

            主要的目的就是 在这五种类型的处理器选取能够匹配当前请求的handler。

            spring中的web项目启动的过程中MVC就会扫描所有的Controller并且解析其中的注解,全部保存到handlerMappings中。

            

             执行完这行代码后可以在 mapping变量中的看到:

             说明标注注解@RequestMapping的方法都已经被注册了。

            之后SpringMVC经过对比找到了请求路径为/car的控制器及其方法,之后返回handler即可。

    HandlerExecutionChain handler = mapping.getHandler(request);

            确定handler的过程:首先是匹配url,比如有好几个/car的请求路径但是方法不同。

            然后再一个一个确认请求方法,最终返回所对应的handler。也就是mapping,getHandler中的方法。

  • 相关阅读:
    sql索引为什么不能用二分查找?
    深度解读面试题:链表中环的入口结点(附代码,可过在线OJ)
    我说MySQL联合索引遵循最左前缀匹配原则,面试官让我回去等通知
    IDEA Debug调试简单程序的时候不需要进入源码
    解决Invalid bound statement (not found)错误~
    Spring【注解实现IOC(@Component、@Repository、@Service、@Controller)】(三)-全面详解(学习总结---从入门到深化)
    打破原则引入SQL,MongoDB到底想要干啥?
    《计算机网络》——应用层
    yolov5 奇奇怪怪的错误汇总
    思维题目专练
  • 原文地址:https://blog.csdn.net/weixin_42196338/article/details/127831020