Spring MVC 接收到前端请求并处理的简要流程

启动服务器必备三件套,接下来我们来详细解析dispatchservlet(拦截所有请求并分发)的初始化。
他是由spring容器创建的,但其初始化由servlet的生命周期管理。
在Tomcat服务器第一次被调用时初始化。
(当然,我们可以通过LoadOnStartup来控制是否在程序加载时加载。
默认这个值是-1,表示不是。
然后如果是正数,这个值越低优先级越高。(可能会有多个服务器))


dispatcherservlet初始化时到底在干啥-->这里面的每个init都是在初始化一类组件。
如果我们没有给他塞组件的话,他会默认给我们组件。

接下来讲最核心的两个组件RequestMappingHandlerMapping与RequestMappingHandlerAdapter
初始化的时候,RequestMappingHandlerMapping便会扫描加了@controller注解的bean,
之后便会将方法的路径和方法之间的映射关系保存起来。

之后请求来了,就从handlemapping中获取方法信息(handleMethod),然后包装成调用链
(加上了拦截器),估计之后也是责任链。

也就是保存方法的路径和方法之间的映射关系,之后可以通过名字找bean,再通过反射调用
-------------RequestMappingHandlerAdapter基本用途-------
虽然叫Adapter,但核心功能是执行方法(上一步找到的方法)

先解析方法上带的注解,主要分成参数上的注解(requestparam,value等)和返回值(requestbody->将返回值写在请求体)。
---模拟参数、返回值解析器---

这两个解析器都是在RequestMappingHandlerAdapter里面。
我们将写好的解析器注册进来(这里就可以看出用配置类的好处,很爽,可以先做一些操作)

这是我们自定义的Token注解

这些都是利用反射获取到的。
反射获取注解,然后看一下有没有,如果有的话就才进行下面方法的解析。
下面的resolveArgument的返回值是参数的值,也就是把我们通过解析器解析后的结果注入到参数中(@Value)也是这样。
我们从请求头中获取token信息并赋值给对象

最后就运行就可以便可以进行测试了(apifox)
------------返回值参数解析器模拟------------
和前面大体上是一样的,比如说我们想把返回格式转换成Yml格式

不再赘述。
总之便是收到请求,根据请求路径和类型找到对应的方法,解析参数,调用方法,返回结果
更多推荐



所有评论(0)