第一步:用户发送请求到前端控制器:DispatcherServlet
DispatcherServlet 又称中央控制器,是 SpringMvc 的核心,实质就是一个 HttpServlet,负责将请求分发,所有的请求都需要经过它来进行统一分发。当用户向服务器发送请求后,请求会发送到 DispatcherServlet,DispatcherServlet 对请求 URL 进行解析,得到请求资源标识符(URI)。
第二步:前端控制器 DispatcherServlet 收到请求后调用处理器映射器(HandlerMapping),去查找处理器 Handler。
第三步:处理器映射器(HandlerMapping)找到具体的处理器,生成处理器对象以及处理器拦截器一并返回给 DispatcherServlet。
DispatcherServlet 根据之前获得的URI,调用 HandlerMapping 获得该 Handler 配置的所有相关对象:包括一个 Handler 处理器对象,多个 HandlerIntercepor 拦截器对象。 最后以HandlerExecutionChain 对象的形式返回。
第四步:前端控制器(DispatcherServlet)调用处理器适配器(HandlerAdapter)。
第五步:处理器适配器(HandlerAdapter)去调用自定义的处理器类(Controller:后端控制器)。
DispatcherServlet 根据获得的 Headler,选择一个合适的 HandlerAdapter,提取 Request 中的模型数据,填充 Handler 入参,开始执行 Handler(Controller)。在填充 Header 的入参过程中,根据你的配置,Spring会帮你做一些额外的工作:
1、HttpMessageConveter:将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息
2、数据转换:对请求消息进行数据转换。如 String 转换为 Integer、Double等
3、数据格式化:对请求消息进行数据格式化。如字符串转换为格式化数字、日期等
4、数据验证:验证数据的有效性(长度、格式等),验证结果存储到BindingRequest或Error中
第六步:自定义的处理器类(Controller)将得到的参数进行处理并返回结果给处理器适配器(HandlerAdapter)。
第七步:处理器适配器(HandlerAdapter)将得到的结果返回给前端控制器(DispatcherServlet)。
第八步:前端控制器(DispatcherServlet)将 ModelAndView 传给视图解析器(ViewReslover)。
第九步:视图解析器(ViewReslover)将得到的参数从逻辑视图转换为物理视图并返回给全段控制器(DispatcherServlet)。
第十步:前端控制器(DispatcherServlet)调用物理视图进行渲染后返回。
第十一步:前端控制器(DispatcherServlet)将渲染后的结果返回。