08-MVC处理流程

当浏览器发送一个http://127.0.0.1:8080/hello到达服务器后, 其处理流程如下:

  1. 服务器提供了一个DispatcherServlet, 继承自HttpServlet提供了标准的servlet技术.
    1. 路径: 默认映射路径为: / , 即会匹配所有请求路径, 可作为请求的统一入口. 也被称为前控制器. jsp不会匹配到DispatcherServlet
    2. 创建: SpringBoot中由DispatcherServletAutoConfiguration创建
    3. 初始化: DispatcherServlet初始化时会从容器中查找各种组件作为其成员变量
      1. HandlerMapping: 初始化时记录映射关系
      2. HandlerAdapter: 初始化时准备参数解析器, 返回值处理器, 消息转换器
      3. HandlerExceptionAdapter: 初始化时准备参数解析器, 返回值处理器, 消息转换器
      4. ViewResolver
  2. DispatcherServlet利用RequestMappingHandlerMapping查找所有控制器方法
    1. 例如根据路径/hello找到@GetMapping(“/hello”)的控制器方法
    2. 控制器方法被封装为HandlerMethod对象, 并结合匹配到的拦截器一起返回给DispatcherServlet
    3. HandlerMethod与拦截器组合在一起成一个HandlerExecutionChain(调用链)的对象
  3. DispatcherServlet接下来执行:
    1. 调用拦截器的preHandle方法
    2. RequestMappingHandlerAdapter调用handler方法 , 准备数据绑定工厂, 模型工厂, 将HandlerMethod完善为ServletInvocableHandlerMethod
      1. @ControllerAdice增强: 补充数据模型
      2. @ControllerAdice增强: 补充自定义类型转换器
      3. 使用HandlerMethodArgumentResolverComposite准备参数
      4. @ControllerAdice增强: @RequestBody增强
      5. 调用ServletInvocableHandlerMethod
      6. 使用HandlerMethodReturnValueHandlerComposite处理返回值
        1. 如果返回的ModelAndView为null, 不进行第d步视图解析与渲染
          1. 例如标记了@ResponseBody的控制器方法, 调用MappingJackson2HttpMessageConverter将结果转换为json, 这时返回的ModelAndView为null
        2. 如果返回的ModelAndView不为null, 进行第d步视图解析与渲染
        3. @ControllerAdice增强: @ResponseBody增强
    3. 调用拦截器的postHandle方法
    4. 处理异常/视图解析
      1. 如果前三步处理出现异常, 走ExceptionHandlerExceptionResolver处理异常流程
      2. @ControllerAdice增强: @ExceptionHandler增强
      3. 正常. 走视图解析与渲染流程
    5. 调用拦截器afterCompletion方法
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

层巅余落日

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值