简单介绍SpringMVC

从 MVC 到 SpringMVC

作为后端开发者,MVC 架构SpringMVC 框架是绕不开的核心知识点 ------ 前者是软件分层设计的经典思想,后者是 Java Web 领域最主流的实现框架。本文将从 MVC 的基础概念讲起,对比三层模型的差异,最终落地到 SpringMVC 的原理与实践价值,帮你彻底理清这一技术体系。

一、什么是 MVC?------ 经典分层架构思想

MVC 是Model-View-Controller 的缩写,是一种通用的软件架构设计模式(不止 Java,Python、前端等领域均有应用),核心是将应用拆分为 3 个职责明确的模块,实现 "分工协作、解耦复用"。

1. MVC 各模块的职责

MVC 的三个模块各司其职,专注于自己的核心任务:

  • Model(模型) :负责业务逻辑处理 + 数据管理包含业务层(Service)、数据访问层(DAO),以及承载数据的实体类(JavaBean/POJO)。比如用户登录时,Model 会处理 "验证账号密码是否正确" 的逻辑,并从数据库读取用户信息。
  • View(视图) :负责数据展示是用户能直接看到的界面,比如 JSP、Thymeleaf、Vue 页面等,只负责把 Model 处理后的结果渲染成可视化内容。
  • Controller(控制器) :负责请求调度是应用的 "调度中心"------ 接收前端请求,调用 Model 处理业务,再将处理结果交给 View 展示。

2. MVC 为什么要分层?------ 核心优势

分层的本质是 **"高内聚、低耦合"**,带来的直接好处包括:

  • 低耦合,扩展能力强:比如要换前端页面(View),只需修改视图层代码,Model 和 Controller 完全不用动;
  • 代码复用性高:Model 的业务逻辑可以被多个 Controller/View 复用;
  • 可维护性强:每个模块职责明确,出问题能快速定位;
  • 专注业务开发:开发者只需聚焦自己负责的模块(比如前端开发只写 View),不用关心其他层细节。

3. MVC 的执行流程

以 Web 应用为例,MVC 的完整流程是:

  1. 浏览器发送请求到 Web 服务器;
  2. Controller 接收请求,封装请求参数;
  3. Controller 调用Model 处理业务(比如查数据库、计算数据);
  4. Model 将处理结果返回给 Controller;
  5. Controller 调用View 渲染数据
  6. View 将最终页面响应给浏览器,完成展示。

二、MVC vs 三层模型:别再搞混这两个概念

面试中经常会被问到 "MVC 和三层模型的区别"------ 其实两者都是分层思想 ,但关注点完全不同

1. 什么是三层模型?

三层模型是业务逻辑维度的分层,通常指:

  • 表示层 / 表现层:接收请求、返回响应(对应 MVC 的 Controller+View);
  • 业务层(Service):处理核心业务逻辑;
  • 持久层(DAO):操作数据库,负责数据存取;

2. 两者的核心区别

对比维度 MVC 架构模式 三层模型
关注点 整个应用的 "职责分离"(请求→处理→展示) 业务逻辑的 "功能拆分"(数据→业务→交互)
覆盖范围 Model 包含业务层 + 持久层,是更宏观的分层 仅聚焦业务逻辑的分层
落地场景 指导应用的整体架构设计 指导后端业务代码的组织

结论 :现代开发中,MVC 和三层模型是结合使用的 ------ 用 MVC 定义应用的整体分层(Controller+View+Model),再用三层模型细化 Model 内部的结构(Service+DAO)。

三、什么是 SpringMVC?------MVC 思想的 Web 框架落地

理解了 MVC 思想,SpringMVC 就很好懂了:它是基于 Servlet 实现的 MVC 架构 Web 框架,是 Spring 框架的一部分(属于 Spring Web 子项目)。

1. SpringMVC 的本质

SpringMVC 的核心是帮我们 "搭好了 MVC 的架子"------ 它已经实现了 MVC 的分层逻辑,我们只需要在对应的模块中写代码即可。

从 Spring 的架构图可以看到,SpringMVC 对应的是Web 模块下的 Servlet 组件

2. SpringMVC 对比原生 Servlet:到底省了多少事?

原生 Servlet 开发需要手动处理很多重复工作,而 SpringMVC 帮我们做了这些核心优化:

(1)统一入口控制:DispatcherServlet

原生 Servlet 需要手动写多个 Servlet 类、配置 web.xml;而 SpringMVC 用DispatcherServlet作为唯一入口,自动接收所有请求并分发到对应的 Controller,不用再写多个 Servlet。

(2)自动参数绑定:告别手动 getParameter

原生 Servlet 接收表单参数时,需要手动调用request.getParameter("username"),再逐个赋值给 JavaBean;而 SpringMVC 支持自动将表单数据绑定到 JavaBean------ 只需在 Controller 方法参数中声明实体类,框架会自动把请求参数封装进去:

java

运行

复制代码
// 原生Servlet
String username = request.getParameter("username");
String password = request.getParameter("password");
User user = new User();
user.setUsername(username);
user.setPassword(password);

// SpringMVC
@RequestMapping("/login")
public String login(User user) { // 自动封装参数
    // 直接使用user对象
}
(3)IoC 容器管理对象:不用手动 new 对象

原生 Servlet 需要手动创建 Service、DAO 的实例;而 SpringMVC 继承了 Spring 的 IoC 特性,框架会自动创建并注入对象,只需用@Autowired注解即可使用。

(4)统一的请求处理机制

SpringMVC 提供了拦截器、全局异常处理器等组件,不用再手动写过滤器、try-catch 处理异常,代码更简洁。

(5)灵活的视图解析

SpringMVC 支持 JSP、Thymeleaf、Freemarker 等多种视图技术,只需配置视图解析器即可切换,不用手动拼接页面路径。

3. SpringMVC 的核心特点

  • 轻量级:仅需几个 jar 包,无额外依赖;
  • 模块化:严格遵循 MVC 分层,代码结构清晰;
  • 易扩展:支持自定义拦截器、参数解析器等组件;
  • 易测试:Controller 层可以脱离 Web 容器做单元测试(原生 Servlet 需要依赖 Tomcat 创建 Request/Response 对象);
  • 约定大于配置 :通过注解(如@Controller@RequestMapping)简化配置,开发效率高。

四、总结:从思想到落地的完整链路

从 MVC 到 SpringMVC 的学习,其实是 **"架构思想→技术落地"** 的典型路径:

  1. MVC是通用的分层设计思想,解决 "代码耦合、职责混乱" 的问题;
  2. 三层模型是 MVC 中 Model 层的细化,聚焦业务逻辑的拆分;
  3. SpringMVC是 MVC 思想在 Web 领域的框架实现,帮我们简化了原生 Servlet 的开发工作,是 Java Web 的主流选择。
相关推荐
cyforkk6 小时前
11、Java 基础硬核复习:常用类和基础API的核心逻辑与面试考点
java·python·面试
全栈师6 小时前
java和C#的基本语法区别
java·开发语言·c#
小马爱打代码7 小时前
Spring AI 实战:Agent 基础搭建与核心能力解析
java·人工智能·spring
csdn2015_7 小时前
springboot task
java·spring boot·后端
czlczl200209257 小时前
Spring Boot :如何高性能地在 Filter 中获取响应体(Response Body)
java·spring boot·后端
sg_knight7 小时前
抽象工厂模式(Abstract Factory)
java·python·设计模式·抽象工厂模式·开发
春日见7 小时前
win11 分屏设置
java·开发语言·驱动开发·docker·单例模式·计算机外设
2301_780029047 小时前
支付宝sdk导入错误
java·开发语言·maven
码界奇点7 小时前
基于Spring Boot和Vue3的无头内容管理系统设计与实现
java·spring boot·后端·vue·毕业设计·源代码管理
九皇叔叔8 小时前
【03】微服务系列 之Nacos 注册中心(服务注册)
java·微服务·nacos·架构·注册中心·服务注册