Spring MVC 入门(三)Spring MVC 执行流程

Spring MVC 应用的开发步骤

1.在 web.xml 文件中定义前端控制器 DispatcherServlet 来拦截用户请求。
    由于 Web 应用是基于请求/响应架构的应用,所以不管哪个 MVC Web 框架,都需要在 web.xml 中配置该框架的核心 Servlet 或 Filter ,这样才可以让该框架接入 Web应用中。
2.如果需要以 POST 方式提交请求,则定义包含表单数据的 JSP 页面。如果仅仅是以 GET 方式发送请求,则无需经过这一步。
3.定义处理用户请求的 Handle 类,可以实现 Controller 接口或者使用 @Controller注解。
    这一步也是所有MVC框架中必不可少的,因为这个 DispatcherServlet 就是 MVC 中的 C,也就是前端控制器,该控制器负责接收请求,并将请求分发给对应的 Handle,即实现 Controller 接口的 Java 类,而该 Java 类负责调用后台业务逻辑代码来处理请求。
    前端 Servlet 接收到用户请求后,通常会对用户请求进行简单的预处理,然后通过反射来创建 Controller 实例,并调用 Controller 的指定方法(实现 Controller 接口的是 handleRequest 方法,而使用基于注解的控制器可以是任何方法)来处理用户请求。
    在 Spring MVC 框架中,控制器实际上由两个部分共同组成,即拦截所有用户请求和处理请求的通用代码都由前端控制器 DispatcherServlet 完成,而实际的业务控制(诸如调用后台业务逻辑代码,返回处理结果等)则由 Controller 处理。
4.配置 Handle。Java 领域的绝大部分 MVC 框架都非常喜欢使用 xml 文件来配置管理,这在以前是一种思维定势。即配置哪个请求对应哪个 Controller 进行处理,从而让前端控制器根据该配置来创建合适的 Controller 实例,并调用该 Controller 的业务控制方法。
    现在几乎所有的MVC框架都使用“约定优于配置”的思想,也就是采用约定方式来规定用户请求地址和 Handle 之间的对应关系。
5.编写视图资源。
    当 Handle 处理用户请求结束后,通常会返回一个 ModelAndView 对象,该对象中应该包含返回的视图名或视图名和模型,这个视图名就代表需要显示的物理视图资源,如果 Handle 需要把一些数据传给视图资源,则可以通过模型对象。
    经过上面 5 个步骤,即可基本完成一个 Spring MVC 处理流程的开发,也就是可以执行一次完整的请求->响应过程。

Spring MVC 执行的流程

Spring MVC 请求——>响应的完整工作流程如下:
1.用户向服务器发送请求,请求被 Spring 的前端控制器 DispatcherServlet 截获。
2.DispatcherServlet 对请求 URL(统一资源定位符) 进行解析,得到 URI(请求资源标识符)。然后根据该 URI,调用 Handler Mapping 获得该 Handler 配置的所有相关的对象,包括 Handler 对象以及 Handler 对象对应的拦截器,这些对象会被封装到一个 HandlerExecutionChain 对象当中返回。
3.DispatcherServlet 根据获得的 Handler,选择一个合适的 HandlerAdapter。HandlerAdapter的设计符合面向对象中的单一职责原则,代码架构清晰,便于维护,最重要的是,代码可复用性高。HandlerAdapter 会被用于处理多种 Handler,调用 handler 实际处理请求的方法。
4.提取请求中的模型数据,开始执行 Handler(Controller)。在填充 Handler 的入参过程中,根据配置,Spring将帮你做一些额外的工作。

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

5.Handler 执行完成后,向 DispatcherServlet 返回一个 ModelAndView 对象,ModelAndView对象中应该包含视图名或视图名和模型。
6.根据返回的 ModelAndView 对象,选择一个合适的ViewResolver(视图解析器)返回给 DispatcherServlet。
7.ViewResolver 结合 Model 和 View 来渲染视图。
8.将视图渲染结果返回给客户端。
在这里插入图片描述

发布了6 篇原创文章 · 获赞 5 · 访问量 225

猜你喜欢

转载自blog.csdn.net/qq_41805741/article/details/103949079