[Re] SpringMVC-6

2021-03-27 03:26

阅读:428

标签:容器   整合   gdi   lan   attr   业务   url   post   反射创建对象   

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 整合

  • 目的:分工明确
    • SpringMVC 的配置文件就来配置和网站转发逻辑以及网站功能有关的(各种解析器、支持 Ajax ...)
    • Spring 的配置文件来配置和业务有关的(事务控制、数据源 ...)
  • Spring 和 SpringMVC 分容器:
    • SpringMVC 管理控制器组件
    • Spring 管理业务逻辑组件
  • web.xml
    
    org.springframework.web.context.ContextLoaderListenerspringDispatcherServletorg.springframework.web.servlet.DispatcherServletcontextConfigLocationclasspath:springMVC.xml1springDispatcherServlet/
  • 启动 Server
    技术图片
  • SpringMVC 的 IOC 容器中的 bean 可以来引用 Spring IOC 容器中的 bean,返回来呢 ?
    • 反之则不行!Spring IOC 容器中的 bean 不能来引用 SpringMVC IOC 容器中的 bean!
    • 多个 Spring IOC 容器之间可以设置为父子关系,以实现良好的解耦。
    • Spring MVC 配置文件中引用业务层的 bean,故 SpringMVC Web 层容器可作为 "业务层" Spring 容器的子容器:即 Web 层容器可以引用业务层容器的 bean,而业务层容器却访问不到 Web 层容器的 bean
      技术图片

[Re] SpringMVC-6

标签:容器   整合   gdi   lan   attr   业务   url   post   反射创建对象   

原文地址:https://www.cnblogs.com/liujiaqi1101/p/13674565.html


评论


亲,登录后才可以留言!