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)

相关推荐
Java中文社群13 分钟前
超实用!用FunctionCall实现快递AI助手
java·人工智能·后端
XuanXu14 分钟前
Java Project Leyden如何提高JVM启动速度&技术前瞻
java
人猿泰飞17 分钟前
在Ubuntu-22.04.5中安装ONLYOFFICE DocSpace(协作空间)【注意:安装失败,谨慎参考!】
java·linux·运维·python·ubuntu·项目管理·onlyoffice
愿你天黑有灯下雨有伞23 分钟前
MyBatis与MyBatis-Plus:字段自动填充的两种实现方式
java·mybatis
程序员黄老师28 分钟前
MyBatis 中 Mapper 传递参数的多种方法
java·tomcat·mybatis
鸽鸽程序猿39 分钟前
【JavaEE】SpringBoot 统一功能处理
java·spring boot·java-ee
极客先躯1 小时前
高级java每日一道面试题-2025年4月07日-微服务篇[Nacos篇]-如何监控Nacos的运行状态?
java·开发语言·微服务
尘寰ya1 小时前
前端面试-垃圾回收机制
java·前端·面试
遇见你真好。1 小时前
递归获取部门数方法
java·springboot
雷渊1 小时前
ES不支持decimal,如何避免丢失精度?
java·后端·面试