SpringMVC 的工作原理/执行流程?

简单来说:客户端发送请求-> 前端控制器 DispatcherServlet 接受客户端请求 -> 找到处理器映射 HandlerMapping 解析请求对应的 Handler -> HandlerAdapter 会根据 Handler 来调用真正的处理器来处理请求,并处理相应的业务逻辑 -> 处理器返回一个模型视图 ModelAndView -> 视图解析器进行解析 -> 返回一个视图对象 -> 前端控制器 DispatcherServlet 渲染数据(Model)-> 将得到视图对象返回给用户。

image-20210608002334025

上图用于辅助理解,面试时可用下列 8 步描述 SpringMVC 运行流程:

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

  2. DispatcherServlet 对请求 URL 进行解析,得到请求资源标识符(URI)。然后根据该 URI,调用 HandlerMapping 获得该 Handler 配置的所有相关的对象(包括 Handler 对象以及 Handler 对象对应的拦截器),最后以 HandlerExecutionChain 对象的形式返回;

  3. DispatcherServlet 根据获得的 Handler,选择一个合适的HandlerAdapter;(附注:如果成功获得 HandlerAdapter 后,此时将开始执行拦截器的 preHandler(…)方法)

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

(1)HttpMessageConveter:将请求消息(如:Json、xml 等数据)转换成一个对象,将对象转换为指定的响应信息;

(2)数据转换:对请求消息进行数据转换。如:String 转换成 Integer、Double 等;

(3)数据格式化:对请求消息进行数据格式化。如:将字符串转换成格式化数字或格式化日期等;

(4)数据验证:验证数据的有效性(长度、格式等),验证结果存储到 BindingResult 或 Error 中;

  1. Handler 执行完成后,向 DispatcherServlet 返回一个 ModelAndView 对象;

  2. 根据返回的 ModelAndView,选择一个适合的 ViewResolver(必须是已经注册到 Spring 容器中的 ViewResolver)返回给DispatcherServlet;

  3. ViewResolver 结合 Model 和 View,来渲染视图;

  4. 将渲染结果返回给客户端。

发表评论

后才能评论

评论(1)