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)

相关推荐
qq_1249870753几秒前
基于springboot健康养老APP的设计与实现(源码+论文+部署+安装)
java·spring boot·后端·mysql·微信小程序·毕业设计
张np3 分钟前
java基础-Deque 接口
java·开发语言
骚戴5 分钟前
大语言模型(LLM)进阶:从闭源大模型 API 到开源大模型本地部署,四种接入路径全解析
java·人工智能·python·语言模型·自然语言处理·llm·开源大模型
东华万里7 分钟前
Release 版本禁用 assert:NDEBUG 的底层逻辑与效率优化
java·jvm·算法
silence25012 分钟前
基于 (java) validation-api、hibernate-validator 的数据校验扩展
java
Alsn8612 分钟前
24.idea专业版安装+maven、tomcat安装并部署到idea
java·ide·intellij-idea
胡闹5415 分钟前
海康和大华厂商的RTSP取流地址格式进行拉流直播
java·网络
手揽回忆怎么睡22 分钟前
Java集成whisper.cpp
java·开发语言·whisper
无名-CODING30 分钟前
栈与队列学习笔记
java·笔记
Hui Baby32 分钟前
LSM 原理、实现及与 B+ 树的核心区别
java·linux·算法