2. DispatcherServlet、HandlerMapping、HandlerExectionChain

1.DispatcherServlet

属性:两个重要属性 – handler的映射和 handler的适配器

image.png

操作:getHandler和doDispatch,最关键的就是doDispatch()

getHandler():遍历所有的handlerMapping,让他们去拿handler,最后找到合适的handlerMapping,拿出handler链。

image.png

doDispatch():根据request调用上面的方法(遍历所有handlerMapping,拿出handler链),最后得到handler链,通过handler链拿出真正的handler@HandlerMethod,然后根据这个handler找到合适的Adapter

,最后通过adapter去执行此handler。

image.png

2. HandlerExecutionChain

属性:handler、interceptors(拦截器数组)、interceptorList(拦截器集合)

从这里也可以看出,处理执行链 就是一个handler(可以看成controller、里面有bean、method、methodParams),和各种拦截器组成的一个类。

image.png

操作:大部分都是和拦截器有关的。不做介绍。不过看下这个,返回handler。

image.png

简单介绍一下Interceptor吧,共有三个主要的方法。注意参数都是 request、response、handler。(由此应该能退出拦截器的作用了吧。)

image.png

3. handlerMapping

属性无

操作:getHandlerI()、返回请求处理链

image.png

他的继承链(注意,所有实现这个接口的类必须实现getHandler,返回请求处理链):

image.png

子类介绍

MatchableHandlerMapping接口继承了他,并且增加了一个方法。

image.png

AbstractHandlerMapping类实现了它

image.png

属性:属性没什么重要的,不过留意一下 urlPathHelper、interceptors、adaptedInterceptors

image.png

操作:这里面有几个很重要的getHandler()、getHandlerInternal()、urlPathHelper的setter、getter 。 前面的方法调用了后面的。后面是抽象方法,在子类AbstractUrlHandlerMapping里实现

image.pngimage.pngimage.pngimage.pngimage.pngimage.png

AbstractUrlHandlerMapping

属性:没有重要的,不写了

操作:比较熟悉的有getHandlerInternal()、lookupHandler()。第一个方法调用了第二个。而且第一个的返回结果是Handler。第二个方法没看懂,暂时先不写。

image.pngimage.png

完整的调用逻辑

好,由上面的铺垫,我们完整的梳理一遍逻辑

1.请求 -> 2.DispatcherServlet#doDispatch() -> 3.自身getHandler()得到HandlerExecutionChain ->4.从执行请求链里拿出handler,找的相应的adpater。

image.pngimage.png

细究步骤3:遍历所有的handlerMapping(HandlerMapping是个接口,里面只有一个getHandler()),每个mapping调用自己的getHandler()(其实调用的是AbstractHandlerMapping里的getHandler(),最后返回 请求执行链类型的handler),然后去找他的adapter类。

)(其实调用的是AbstractHandlerMapping里的getHandler(),最后返回 请求执行链类型的handler),然后去找他的adapter类。

image.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值