简单介绍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 的主流选择。
相关推荐
Yuiiii__14 小时前
一次并不简单的 Spring 循环依赖排查
java·开发语言·数据库
tkevinjd14 小时前
JUC4(生产者-消费者)
java·多线程·juc
野槐14 小时前
java基础-面向对象
java·开发语言
sww_102614 小时前
Openfeign源码浅析
java·spring cloud
X***078815 小时前
从语言演进到工程实践全面解析C++在现代软件开发中的设计思想性能优势与长期生命力
java·开发语言
smileNicky15 小时前
SpringBoot系列之集成Pulsar教程
java·spring boot·后端
Sammyyyyy15 小时前
Rust 1.92.0 发布:Never Type 进一步稳定
java·算法·rust
alonewolf_9916 小时前
深入解析G1与ZGC垃圾收集器:原理、调优与选型指南
java·jvm·算法
小镇学者16 小时前
【c++】C++字符串删除末尾字符的三种实现方法
java·开发语言·c++