SpringMVC源码笔记一

SpringMVC 简单的controller过程

本文将通过一个简单的示例,来展示自己在看SpringMVC的过程。
请添加图片描述
创建一个项目,很简单创建一个get请求的路由,然后返回hello world的值。

doService

请添加图片描述
该方法会通过调用doDispatch方法进行分发。

doDispatch

请添加图片描述
SpringMVC的请求都会到这个方法中来处理。
请添加图片描述
我们可以看到很多参数,请求ip,端口号等等,请求的uri,请求的Get方法等等。
请添加图片描述
跳过一些对象的初始化过程,来到checkMultipart函数,该函数是判断是否为上传,我们的request还是开始的request。

请添加图片描述
因为request还是之前的request,跳过之后来到getHandler。该函数目的是找到一个能处理请求的处理器。

getHandler

请添加图片描述
该函数将请求映射到方法上,该方法通过循环遍历来找到能处理请求的。请添加图片描述发现有5个不同的映射器,在SimpleUrlHandlerMapping这个映射器时会获得handler。我们进入getHnalder程序进行查看是如何获得handler的。请添加图片描述
请添加图片描述
暂时不管这个方法。
请添加图片描述
该方法先找到请求的路径。然后根据路径和请求进入lookupHandlerMethod函数中找能够进行处理的方法。如果方法不为空就创建一个解析的bean。
请添加图片描述
directPathMatches存放能处理这个路径的mapping。请添加图片描述
通过遍历这些mapping进行查询能够处理的mapping,如果处理就加入到matches列表中。如果找不到,就添加一些别的东西。如果列表中能处理的个数大于1就对他们进行排序,然后获取第一个。
请添加图片描述
如果能处理的不止一个方法,就会抛出异常。

回到getHandler函数

通过getHandlerInternal我们获得到了handler。请添加图片描述
接着我们会判断拿到的handler是否为空,如果为空就拿到一个默认的handler。接下去会进行一些其他的判断,然后通过handler获得执行链。最后返回。

回到doDispatch函数

请添加图片描述
对handler进行判断是否为空。
通过getHandlerAdapter函数获取适配器。
判断是否是get的方法,并检查是否有被修改。
请添加图片描述
接下去会进行拦截器pre操作,通过handle进行处理请求,进行拦截器post操作。

handle

请添加图片描述
请添加图片描述
我们最后会发现会通过invokeHandlerMethod进行处理我们的请求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值