SpringMvC

Spring MVC 是 Spring Boot 的"全家桶"成员,它被默认内置了。

  • 它不是一种"空洞"的规范:它是一套已经写好的、非常庞大的 Java 代码库。

  • 它是"开箱即用"的 :当你创建一个 Spring Boot 项目并勾选了 Spring Web 依赖时,你就已经"安装"了它。你不需要去官网上下载安装包,也不需要像安装数据库那样配置环境,它就像你手机出厂自带的"系统拨号软件"。

🏢 Spring MVC:写字楼物业管理系统

如果你的后端程序是一座写字楼 ,Spring MVC 就是这栋楼的物业管理处 。它的核心任务是:接待访客、安全检查、引导带路、分发快递。

一、 MVC 的三大部门

缩写 全称 写字楼里的角色 实际作用
M Model (模型) 仓库/档案室 存放公司数据(如:员工名单、合规文件)。
V View (视图) 公司的招牌/装修 客户看到的门面(在现代开发中,通常是 Vue 等前端渲染)。
C Controller (控制器) 前台接待员 听客户要找谁,然后打电话给对应部门处理。

二、 一次访问的全路径(工作原理)

1. DispatcherServlet(写字楼大门)

这是 Spring MVC 的核心,叫**"中央分发器"**。

  • 场景:访客(浏览器请求)来到写字楼大门口。

  • 作用:所有的请求第一站都会到这里,由它决定接下来该去哪。

2. HandlerMapping(楼层指引牌)
  • 场景:访客说"我要找研发部"。

  • 作用 :大门接待员看一眼指引牌(Mapping),发现研发部在 8 楼(对应你代码里的 @RequestMapping("/dev"))。

3. Interceptor(走廊保安)
  • 场景:访客坐电梯到了 8 楼,出电梯时被保安拦住了。

  • 作用 :这就是你写的拦截器。保安查你的工作证(Token)。

    • 白名单:你是来送外卖的,走廊墙上贴着"外卖员免检",保安直接让你过去。

    • 拦截:你是陌生访客且没带证件,保安直接把你轰走(返回 401/403)。

4. Controller(部门接待)
  • 场景:你通过了保安检查,进入了研发部办公室。

  • 作用:部门主管(Controller)听取你的需求,去档案室(Model)取了一份文件,然后交给你。

5. ViewResolver / JSON Converter(翻译/打包)
  • 场景:主管给你的文件是中文的,但你是外国人。

  • 作用 :物业会帮你把文件翻译成你听得懂的语言(比如把 Java 对象转成 JSON 字符串),并打包好。


三、 核心组件的通俗解释

1. 过滤器 (Filter) ------ 大楼外的红绿灯

过滤器在写字楼大门外。它不归物业管,归交警管(Servlet 容器)。

  • 作用:检查车辆是否超载、是否限号(比如设置字符编码、全局防攻击拦截)。它在进入大楼(Spring MVC)之前就开始工作了。
2. 拦截器 (Interceptor) ------ 楼层保安

拦截器是物业(Spring MVC)自己请的员工。

  • 作用:它能精确知道你找的是哪个部门。它在访客进入办公室(Controller)之前伸手拦住你。
3. 跨域配置 (CORS) ------ 访客准入协议
  • 场景:写字楼规定,只有从"友好合作伙伴"街道过来的访客才给开门。

  • 作用:配置哪些外部网站(域名)可以调用本楼的服务。


四、 为什么需要 Spring MVC?

如果没有 Spring MVC,你就像在荒地里盖房子:

  1. 没指引牌 :你得写无数个 if-else 判断 URL。

  2. 没保安:你得在每个办公室门口都写一套查证件的代码。

  3. 没翻译:你得手动把每一个 Java 对象拼接成 JSON 字符串发给前端。

Spring MVC 的存在,就是为了让后端开发从"盖房子"变成"在写字楼里开公司"。 你只需要关心你的业务(研发部在干嘛),剩下的交通、安保、翻译、打包,物业全都帮你做好了。

相关推荐
豹哥学前端几秒前
用猜数字游戏,一口气掌握 JavaScript 核心知识点(附完整代码)
前端·javascript
忆往wu前20 分钟前
从0到1一步步拆解搭建,梳理一个 Vue3 简易图书后台全开发流程
前端·javascript·vue.js
木斯佳27 分钟前
前端八股文面经大全:字节抖音前端三面(2026-04-27)·面经深度解析
前端·面试·笔试·八股·面经
shao9185161 小时前
第3章(2)——使用Gradio JavaScript Client
javascript·node.js·cdn·gradio·job·events·playcode
光影少年1 小时前
大屏页面,一次多个请求,请求加密导致 点击 全局时间选择器 时出现卡顿咋解决(面板收起会延迟1~2秒)
前端·javascript·vue.js·学习·前端框架·echarts·reactjs
Mr.mjw1 小时前
vue中封装一个环形进度条组件,根据外部盒子大小自适应变化
前端·javascript·vue.js
无心使然1 小时前
Openlayers调用ArcGis影像服务之一动态地图、地图切片(/exportImage)
前端·javascript·数据可视化
唯火锅不可辜负1 小时前
uniapp开发公众号订阅功能踩坑小记
前端·vue.js
opteOG2 小时前
游览器跨域问题详解
前端
SameX2 小时前
后台 GPS 记录从半天掉电 30% 到全天 8%,我的三版方案演进
前端