SpringMVC请求响应原理

本文深入探讨了SpringMVC的请求响应原理,从DispatcherServlet的doDispatch()方法开始,介绍了HandlerMapping如何匹配请求路径,找到合适的Controller和Interceptor,接着是HandlerAdapter处理请求并调用Controller方法。在方法执行后,涉及拦截器的preHandler和postHandler方法,最后通过视图解析器渲染视图。文章强调了HandlerMapping、HandlerAdapter和拦截器在流程中的关键作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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) 拦截器的使用:调用控制器方法前  调用控制器方法后, 视图渲染后

 

 

此文希望可以帮助到大家。如有错误,请指教。                                                           

如果大家还有其他的情况或者好的解决方法,也望指教,感谢阅读。 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值