zoukankan      html  css  js  c++  java
  • Spring MVC 请求处理流程概览

    SpringMVC工作流程

    图一:请求流程概述

    图二:请求在每个组件的处理

    解释Spring工作流程

    1.用户向服务器发送请求,请求被spring前端控制Servelt DispatcherServelt捕获

    2.DispatcherServelt解析URL得到URI(资源标识符),根据URI找到对应的要处理的Handler和相关对象(包括handler和对应的拦截器),最后以handlerExecutionChain对象的形式返回

    3.DispatcherServelt根据的得到的Handler,选择合适的HandlerAdapter(如果成功找到HandlerAdapter后,将开始执行拦截器的preHandler方法)

    4.提取Request中的模型数据,填充handler入参,开始执行Handler(controller),在填充参数入handler时,会帮你进行HttpMessageConveter(将请求消息转换成一个对象,将对象转换成指定的响应信息)数据验证,数据格式化,数据转换

    5.handler执行完毕,返回一个ModelAndView对象给dispatcherServelt

    6.dispatcherServelt根据返回的ModelAndView对象,找到一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServelt

    7.ViewResolver结合Model和View来进行渲染视图

    8.将渲染结果返回给前端

    问:Spring为什么要结合HandlerMapping和HandlerAdapter来处理Handler?

    答:符合面向对象的单一职责,代码结构清晰,可复用性高,HandlerAdapter可被用于处理各种Handler

    1.dispatcherServelt接到请求,先查找合适的处理程序来处理请求,DispatcherServelt通过一个或者多个处理程序映射,将每个请求映射到处理程序中,处理程序映射配置在web应用程序的上下文中,是实现了HandlerMapping接口的bean,他负责为请求返回一个适当的处理程序(也就是controller)。处理程序映射通常根据请求的url将请求映射到处理程序

    2.一旦dispatcherServelt找到合适的controller,就会调用这个controller来处理请求

    3.控制器处理完请求之后,会把model和view返回给DispatcherServelt,model包含了控制器要传递给视图进行显示的属性,如果返回的是view名称,他会被解析成视图对象进行展示,绑定模型和视图的基本类就是MOdelAndView

    4.当DispatcherServelt接收到模型和视图名称时,他会将逻辑视图名称解析成视图对象在进行呈现,DispatcherServelt从一个或者多个视图解析器中解析视图,视图解析器配置在web应用程序上下文中,是实现了ViewResolver接口的bean,他的任务是根据逻辑视图名称返回视图对象

    5.当DispatcherServelt将视图名称解析成视图对象,他就会呈现视图对象,并传递控制器返回的模型,视图的任务是将模型属性展示给用户

    问:DispatcherServelt接到请求后如何映射到controller?

        在Spring MVC中,web请求被web应用程序上下文中声明的一个或者多个处理程序映射bean(实现了了HandlerMapping接口的)映射到controller,spring提供了几种HandlerMapping的实现:

    1.BeanNameUrlHandlerMapping:根据controller bean名称中指定的url模式将请求映射到处理程序中

    2.ControllerClassNameHandlerMapping:按控制器类名称映射请求

    3.SimpleUrlHandlerMapping:用定制的映射定义来映射请求

  • 相关阅读:
    pip备忘录
    Vue.js---------------1引入
    centos安装数据库
    Python之网络编程二
    Python之协议
    Python高级
    jvm-3学习教程
    jvm学习-2
    jvm相关学习
    八种常用的排序算法
  • 原文地址:https://www.cnblogs.com/jijiji/p/6891098.html
Copyright © 2011-2022 走看看