SpringMVC——DispatcherServlet源码分析

首先启动项目,进行初始化操作:
在这里插入图片描述
initStrategies()函数主要对DispatcherServlet类中的几个属性进行初始化操作,其中的几个属性为:

  • MultipartResolver:解析多部分请求,以支持HTML表单上传文件
  • HandlerMapping:用于handlers映射请求和一系列的对于拦截器的前处理和后处理,大部分用Controller注解
  • HandlerAdapter:帮助DispatcherServlet处理映射处理程序的适配器,而不用考虑实际调用的是哪个处理程序
  • ViewResolver:根据实际配置解析实际的View类型

接下来我们来看DispatcherServlet类中的doDispatch方法:
在这里插入图片描述
我们再看几个重要的地方:
在这里插入图片描述
在这里,DispatherServlet通过getHandler方法获取一个HandlerExecutionChain对象,HandlerExecution是由HandlerMapping根据请求映射返回的,其中包含Handler和拦截器HandlerInterceptor
在这里插入图片描述

我们看看getHandler的代码:
在这里插入图片描述
在DispatcherServlet中的getHandler()方法中,使用了一个while循环,然后根据请求在处理映射器中寻找到对应的Handler,并由HandlerMapping对象创建HandlerExecutionChain对象
在这里插入图片描述
getHandler执行的就是上面这个过程

getHandler()设计一个设计模式——拦截过滤器模式(拦截过滤器模式用于对应用程序的请求或相应做一些预处理/后处理,定义过滤器,并在请求传给实际目标应用程序之前应用在请求上)

handlerMapping中的getHandler()

HandlerMapping对象的getHandler()方法是一个接口:
在这里插入图片描述
它的实现类为AbstractHandlerMapping
在这里插入图片描述
我们看一下getHandlerExecutionChain方法:
在这里插入图片描述
到这里,DispatcherServlet已经获取了用户请求对应的HandlerExecutionChain对象,接下来就是获取HanlderAdapter对象
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值