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进行处理我们的请求。