• Spring MVC:HTTP请求的处理流程


    【参考文章】:Servlet执行流程及原理解析

    【参考文章】:你真的了解Spring MVC处理请求流程吗?

    【参考文章】:芋道源码

    1. Web请求的处理流程

      -->客户端浏览器将发出的请求被封装成为一个HttpServletRequest对象转交请求给Web服务器

      -->Web服务器收到请求转交请求给Web容器(如 Tomcat)

      -->Web容器调用 Servlet 处理请求

      -->Servlet 处理请求并返回处理结果

      -->Web容器收到 Servlet  处理的结果

      -->Web容器将页面返回给Web服务器

      -->客户端浏览器解析响应HttpServletResponse,然后将结果呈现给用户

    2. Spring MVC的工作流程

      Spring  MVC的工作流程就是上述 Servlet 处理请求并返回处理结果 这一步骤;

      调用关系如下图所示:

      

       调用方法的流程如下图所示:

     2.1 发送请求

      用户向服务器发送 HTTP 请求,请求被 Spring MVC 的调度控制器 DispatcherServlet 捕获;

    2.2 映射处理器

      DispatcherServlet 根据请求 URL ,调用 HandlerMapping 获得该 Handler 配置的所有相关的对象(包括 Handler 对象以及 Handler 对象对应的拦截器),最后以 HandlerExecutionChain 对象的形式返回。

    2.3 处理器适配

      DispatcherServlet 根据获得的 Handler,选择一个合适的HandlerAdapter 。

      提取请求 Request 中的模型数据,填充 Handler 入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据你的配置,Spring 将帮你做一些额外的工作:

    • HttpMessageConverter :会将请求消息(如 JSON、XML 等数据)转换成一个对象。
    • 数据转换:对请求消息进行数据转换。如 String 转换成 Integer、Double 等。
    • 数据格式化:对请求消息进行数据格式化。如将字符串转换成格式化数字或格式化日期等。
    • 数据验证: 验证数据的有效性(长度、格式等),验证结果存储到 BindingResult 或 Error 中。

    2.4 处理请求

      根据 controller的逻辑处理请求,执行完成后,handler向 DispatcherServlet 返回一个 ModelAndView 对象

    2.5 视图解析

      根据返回的 ModelAndView ,选择一个适合的 ViewResolver(必须是已经注册到 Spring 容器中的 ViewResolver),解析出 View 对象,然后返回给 DispatcherServlet。

    2.6 渲染视图 + 响应请求

      ViewResolver 结合 Model 和 View,来渲染视图,并写回给用户( 浏览器 )。

      对于目前主流的架构,前后端已经进行分离了,所以 Spring MVC 只负责 Model 和 Controller 两块,而将 View 移交给了前端。如果 Handler(Controller) 执行完后,如果判断方法有@ResponseBody 注解,则直接将结果写回给用户( 浏览器 )。

      但是 HTTP 是不支持返回 Java POJO 对象的,所以需要将结果使用 HttpMessageConverter 进行转换后才能返回。FastJsonHttpMessageConverter 功能就是将 POJO 转换成 JSON 字符串返回。

      

  • 相关阅读:
    Ubuntu 16.04 LTS nodejs+pm2+nginx+git 基础安装及配置环境(未完,未整理)
    JavaScript 二、eval 和 with 函数
    JavaScript 一、 ES6 声明变量,作用域理解
    UNMET PEER DEPENDENCY @angular/common@2.3.1
    Laravel Homestead 离线安装
    mac os x 记录 转载
    Ubuntu 16.04 LTS 完善解决亮度调整
    oh my zsh 切换 bash
    关于bitmap储存图片报内存不足的问题
    .net操作sqlserver数据库
  • 原文地址:https://www.cnblogs.com/virgosnail/p/10182116.html
Copyright © 2020-2023  润新知