1、请求响应原理流程图
以 spring-webmvc 4.3.6 为例
2、重要的源码
DispatcherServlet 的 doDispatch()方法的部分源码:
渲染视图的源码:
3、相关描述
1)当客户端返送请求时,首先进入DisPatcherServlet,由DispatcherServ;et进行统一的请求分发。
2)在请求分发的过程中,遭遇的第一个接口是HandlerMapping.它的职责是将请求路径与@RequestMapping注解中的路径
进行比对,从spring容器中找到哪个控制器类的哪个方法可以处理该请求,并且找到与该请求的匹配的拦截器,
最终返回一个 HandlerExecutionChain(处理器链)。
HandlerExecutionChain中包含了可以处理请求的控制器类与控制器方法以及与请求相关的拦截器【可能是多个】
3)在接下来的请求分发过程中遭遇的第二个接口是HandlerAdapter,它的职责是调用controller的控制器方法处理请求,
包括请求 参数的处理,类型的转换等。并且会调用相关拦截器的preHandler方法
4)方法调用完成后会继续调用拦截器的postHandler方法,返回一个ModelAndView对象,
5) 通过视图解析器view-resolver渲染视图。视图渲染后再次调用拦截器中的afterCompletion方法,这样就完成了一次请求。
注意:
1) HandlerMapping的作用是 从spring容器中找到可以处理请求的Controller,以及与请求相匹配的相关拦截器
2) HandlerAdapter的作用是 调用可以处理请求的控制器方法,处理请求,返回视图
3) HandlerExecutionChain(处理器链) = 控制器类 + 多个拦截器
4) 拦截器的使用:调用控制器方法前 调用控制器方法后, 视图渲染后
此文希望可以帮助到大家。如有错误,请指教。
如果大家还有其他的情况或者好的解决方法,也望指教,感谢阅读。