SpringMVC的工作流程

一、简介:

MVC:是一种架构模式,将业务逻辑和页面展示分离,使程序分层、分工合作,既相互独立,又协同合作。

MVC是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计 规范

Model(模型) :数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型或 JavaBean组件,不过现在一般都分离开来:Value Object(数据Dao) 和 服务层(行为Service)。也就是模型提供了模型数据查询和模型数据的状态更新等功能,包括数据和业务。

View(视图):负责进行模型的展示,将逻辑视图解析成物理视图并渲染。

Controller(控制器):接收用户请求,委托给模型进行处理,处理完毕后把返回的模型数据返回给视图,由视图负责展示。起调度作用。

二、流程图

1. 请求到达: 客户端发起一个HTTP请求到服务器,请求被Spring MVC的前端控制器DispatcherServlet拦截。
2. 查找处理器 :DispatcherServlet接收到请求后,会查询HandlerMapping处理器映射器来确定请求应该由哪个控制器(Controller)来处理。处理器映射器会根据请求的URL路径找到与之匹配的处理器。
3. 处理器适配与执行 :找到合适的处理器后,DispatcherServlet会将请求传递给HandlerAdapter处理器适配器。处理器适配器负责调用控制器中的具体方法来处理请求,并处理方法的返回值。
4. 模型数据准备: 控制器在处理请求时,可能会操作模型数据(Model),这些数据会被封装到一个对象中,并通过ModelAndView对象传给视图解析器。同时,控制器会指定逻辑视图名,指示下一步应呈现哪个视图。
5. 视图解析 :DispatcherServlet根据ModelAndView中的视图名,通过ViewResolver视图解析器找到实际的视图对象(如JSP页面)。视图解析器会将逻辑视图名转换成实际的视图对象。
6. 渲染视图: 视图对象负责渲染模型数据,即将模型数据填充到响应页面中。这个过程中,视图可能需要访问之前存入模型中的数据。
7. 响应客户端:最终,填充好的视图(通常是HTML页面)作为HTTP响应体的一部分,由DispatcherServlet发送回客户端,完成整个请求处理流程。

三、SpringMVC核心组件

SpringMVC框架的核心组件主要包括以下五个部分:
1. DispatcherServlet(前端控制器):

作为整个Spring MVC应用的入口点,负责接收HTTP请求并响应。

分发请求到具体的处理器(Controller)。

联合其他组件协同工作,完成请求的处理流程。
2. HandlerMapping(处理器映射器):

负责将接收到的请求映射到具体的处理器(Controller的处理方法)。

支持不同的映射策略,如基于URL路径、注解等。
3. HandlerAdapter(处理器适配器):

用于调用处理器(Controller方法)并处理其返回的结果。

适配不同类型的处理器,使得DispatcherServlet能与各种类型的控制器协同工作。
4. ViewResolver(视图解析器):

根据逻辑视图名解析出实际的视图对象(如JSP、Thymeleaf模板等)。

将模型数据传递给视图,准备渲染。
5. Controller(控制器):

实现业务逻辑,处理来自用户的请求。

负责向模型添加属性,并决定视图名称(或直接返回视图)。

参考:SpringMVC工作流程 --- 详解-腾讯云开发者社区-腾讯云 (tencent.com)

相关推荐
m0_740154671 分钟前
Tomcat
java·tomcat
爱敲代码的小冰8 分钟前
【Excel】 Power Query抓取多页数据导入到Excel
android·java·excel
心流时间22 分钟前
[Java基础] JVM常量池介绍(BeanUtils.copyProperties(source, target)中的属性值引用的是同一个对象吗)
java·开发语言·jvm
快乐非自愿36 分钟前
Spring Boot集成Spring Security之HTTP请求授权
spring boot·spring·http
瑞金彭于晏39 分钟前
通俗易懂版 Maven 科普,maven是什么?
java·maven
好看资源平台43 分钟前
Java Web开发实战与项目——Spring Boot与Spring Cloud微服务项目实战
java
.猫的树1 小时前
Java集合List快速实现重复判断的10种方法深度解析
java·开发语言·list·集合
littlegirll1 小时前
命令行方式安装KFS同步KES到KADB
java·大数据·数据库
itachi-uchiha1 小时前
深入理解 Linux 中的 last 和 lastb 命令
java·linux·服务器
xiaoyustudiowww1 小时前
JSP + Servlet 实现 AJAX(纯JS版)
java·javascript·servlet