[Re] SpringMVC-6

时间:2020-09-18 02:19:34   收藏:0   阅读:31

SpringMVC 运行流程

技术图片

  1. 请求过来,前端控制器 (DispatcherServlet) 调用 doDispatcher() 进行处理
  2. 根据 HandlerMapping 中保存的请求映射信息找到处理当前请求的处理器执行链 (HandlerExecutionChain = Handler + Interceptor)
  3. 根据当前处理器找到它的适配器(HandlerAdapter)
  4. 拦截器的 preHandle 顺序执行
  5. 适配器执行目标方法
    → @ModelAttribute 标注的方法提前运行
    → 确定目标方法用的参数
        → 有注解
        → 无注解
            → 是否是 ServletAPI
            → 是否是 Model / Map 类型
            → 是否自定义类型
                → 看隐含模型中是否有同名的,有就赋值
                → 如果没有,看是否是 @SessionAttributes 标注的属性
                → 如果都不是,利用反射创建对象
    → 执行目标方法,返回 ModelAndView
    
  6. 拦截器的 postHandle 逆序执行
  7. 处理结果(页面渲染过程)
    → 若有异常,使用异常解析器(HandlerExceptionResolver) 处理异常,然后返回 mav
    → 调用 render() 进行页面渲染
        → 视图解析器根据视图名得到视图对象
        → 视图对象调用 render() 完成渲染
    
  8. 拦截器的 afterCompletion 逆序执行

与 Spring 整合

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!