小白版SpringMVC执行流程

简介: 小白版SpringMVC执行流程

从MVC聊起

相信大家在刚接触到springMVC的时候,上手时接触的第一个理论应该就是mvc的含义,我们先简单的回顾一下,什么是MVC。

MVC的全名是Model View Controller,是一种使用“模型-视图-控制器”设计创建Web应用程序的模式,同时提供了对HTML、CSS和JavaScript的完全控制,它是一种软件设计典范。

  • Model(模型):数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型或JavaBean组件(包含数据和行为),不过现在一般都分离开来:Value Object(数据Dao) 和 服务层(行为Service)。也就是模型提供了模型数据查询和模型数据的状态更新等功能,包括数据和业务。
  • View(视图):负责进行模型的展示,一般就是我们见到的用户界面,客户想看到的东西。
  • Controller(控制器):接收用户请求,委托给模型进行处理(状态改变),处理完毕后把返回的模型数据返回给视图,由视图负责展示。也就是说控制器做了个调度员的工作。

有了这三个核心概念以后,我们就可以简单的说下MVC执行流程,如下图

这张图只是展示出了 SpringMVC 的 MVC 三部分的处理情况:也就是浏览器发送http请求到控制器中,控制器根据请求的url选择对应的模型进行处理,然后返回响应结果给控制器,控制器把数据交由视图进行视图渲染,最后返回视图对象,最后通过控制器将响应结果返回给浏览器。

认识核心组件

显然上面简单的执行流程并没有涉及到更加深层面的解读,在进行理解之前,我们先认识一下SpringMVC执行流程的核心组件。

(1)DispactherServlet(前端控制器):接收请求、响应结果,相当于转发器,它是SpringMVC框架最核心的组件,有了它就能减少其他组件之间的耦合度。

(2)HandlerMapping(处理器映射器):根据配置的映射规则(根据请求的URL),找到对应的处理器。

(3)HandlerAdapter(处理器适配器):适配调用具体的处理器,并且执行处理器中处理请求的方法,执行完毕之后返回一个ModelAndView对象。

(4)Handler(处理器):编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler

(5)ViewResolver(视图解析器):会根据传递过来的ModelAndView对象进行视图解析,根据视图解析名解析称真正的视图View。

(6)View(视图):View是一个接口,它的实现类支持不同类型的视图。比如:JSP、freemarker、Thymeleaf等等。

需要注意的是在这些核心组件中,视图与处理器是需要我们程序员进行开发的。

SpringMVC执行流程

(1)用户通过浏览器发起一个HTTP请求,请求直接到前端控制器DispatcherServlet

(2)前端控制器接收到请求以后调用处理器映射器HandlerMapping,处理器映射器根据请求的URL找到具体的Handler,并将它返回给前端控制器

(3)前端控制器调用处理器适配器HandlerAdapter去适配调用Handler

(4)处理器适配器会根据Handler去调用真正的处理器去处理请求,并且处理对应的业务逻辑

(5)当处理器处理完业务之后,会返回一个ModelAndView对象给处理器适配器,HandlerAdapter再将该对象返回给前端控制器;Model是之返回的数据对象,View是指逻辑上的View

(6)前端控制器DispatcherServlet将返回的ModelAndView对象传给视图解析器ViewResolver进行解析,解析完成之后就会返回一个具体的视图View给前端控制器。(ViewResolver根据逻辑的View查找具体的View)

(7)前端控制器DispatcherServlet将具体的视图进行渲染

(8)渲染完成之后响应给用户(浏览器显示)

  • Spring MVC所有的请求都经过DispatcherServlet来统一分发。DispatcherServlet将请求分发给Controller之前,需要借助于Spring MVC提供的HandlerMapping定位到具体的Controller。
  • HandlerMapping接口负责完成客户请求到Controller映射。
  • Controller接口将处理用户请求,这和Java Servlet扮演的角色是一致的。一旦Controller处理完用户请求,则返回ModelAndView(数据和视图)对象给DispatcherServlet前端控制器。
  • 从宏观角度考虑,DispatcherServlet是整个Web应用的控制器;
  • 从微观考虑,Controller是单个Http请求处理过程中的控制器,而ModelAndView是Http请求过程中返回的模型(Model)和视图(View)。
  • 返回的视图需要通过ViewResolver接口(视图解析器)在Web应用中负责查找View对象,从从而将相应结果渲染给客户。


相关文章
|
8月前
|
安全 网络安全 开发工具
解决Ascend上vllm运行时出现urllib3.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED]
在使用vllm模型时,运行示例代码下载模型文件时遇到了SSL安全校验问题。临时解决方案是修改`requests/sessions.py`文件中`request`函数的`verify`参数默认值为`False`。
|
10月前
|
搜索推荐 C语言
【排序算法】快速排序升级版--三路快排详解 + 实现(c语言)
本文介绍了快速排序的升级版——三路快排。传统快速排序在处理大量相同元素时效率较低,而三路快排通过将数组分为三部分(小于、等于、大于基准值)来优化这一问题。文章详细讲解了三路快排的实现步骤,并提供了完整的代码示例。
301 4
|
10月前
|
SQL XML 缓存
java中jsp详解!!!
JSP(Java Server Pages)是一种动态网页技术标准,允许在HTML页面中嵌入Java代码,实现网页逻辑与设计分离。JSP本质上是Servlet的简化,支持跨平台运行。JSP通过内置对象(如request、response、session等)和指令(如page、include、taglib)提供强大的功能,同时利用EL表达式和JSTL标签库简化页面开发。JSP的核心优势在于快速开发和维护Web应用。
407 0
|
关系型数据库 MySQL Java
面试官:说说MySQL调优?
面试官:说说MySQL调优?
191 5
面试官:说说MySQL调优?
|
11月前
|
消息中间件 监控 物联网
流处理系统
流处理系统
141 1
|
Java Spring Maven
Struts 2遇见Spring:这个组合如何颠覆你的Web开发?
【8月更文挑战第31天】在现代Web开发中,Struts 2与Spring的结合使用能显著增强应用的模块化和可维护性。本文将介绍如何整合这两个框架,并提供代码示例。首先,在`pom.xml`中添加Struts 2和Spring的依赖,然后在`struts.xml`中配置Struts 2以识别Spring插件。接着,在Spring配置文件中定义bean,并在Struts 2的Action类中使用`@Autowired`注解进行自动注入。
208 0
|
前端开发 Java 数据处理
【Netty】Netty 异步任务模型 及 Future-Listener 机制
【Netty】Netty 异步任务模型 及 Future-Listener 机制
910 0
【Netty】Netty 异步任务模型 及 Future-Listener 机制
|
SQL 缓存 关系型数据库
MySQL explain 中的 rows 究竟是如何计算的?
今天同事在处理系统慢SQL时遇到几个疑惑的问题,简单描述如下~
MySQL explain 中的 rows 究竟是如何计算的?
|
前端开发 安全 Java
什么是Spring MVC?它解决了什么问题?
Spring框架就像一个家族,有众多衍生产品例如boot、security、jpa等等。但他们的基础都是Spring的ioc和aop。ioc提供了依赖注入的容器,aop解决了面向横切面的编程;然后在此二者的基础上实现了其他延伸产品的高级功能。
200 0
|
存储 缓存 算法
《信息物理融合系统(CPS)设计、建模与仿真——基于 Ptolemy II 平台》——第3章 数据流 3.1同步数据流
Ptolemy II 能够使异构系统的开发和仿真一同进行,将开发和仿真作为整个系统建模的一部分。正如前两章讨论的那样,不同于其他设计和建模环境,Ptolemy II的一个关键创新在于支持多种计算模型,这些计算模型可被剪裁以适应具体的建模问题。
1857 0