后端Web开发总结

后端Web开发总结

2026年9月29日·#编程学习/javaweb学习笔记JavaWeb/后端/项目实战·7827 字 39 分钟
浏览量加载中...
AI 摘要- DeepSeek

后端课程的收官篇——把第 4~14 章学过的东西串成一张知识地图,从三层架构与 MySQL 出发,把 IOC/DI、AOP、事务管理、全局异常处理、过滤器、拦截器、MyBatis、SpringMVC、JWT、Cookie/Session、阿里云 OSS、SpringBoot 逐个放回架子上的位置,并按 JavaWeb 解决方案、Spring framework、Mybatis 三条线归类

封面图
后端Web开发总结 - 封面图

93 篇把 Maven 高级讲完,这一篇是后端的收官篇(总结 PPT 第 1~7 页)。它不讲任何新技术,只干一件事:把整个后端课程串成一张知识地图。

PPT 一共 7 页,其中第 1~6 页是一张不断”点亮”的架构图——第 2 页图上只有三层架构和 MySQL 四个方框;第 3 页一下子把 11 个技术名全点亮;第 4 页给它们归类,并画出 SpringBoot 这条底座;第 5 页补上最后一块 SpringMVC,图才算完整;第 6 页只写了下个阶段的名字;第 7 页是空白页。所以本篇的读法就是顺着这四版图看它每一版新加了什么,再把学过的技术逐个放回图上的位置。

Tip

原 PPT 这几页都是用方框和箭头拼出来的示意图(没有位图可截),本篇把它翻译成文字版的图,位置关系按 PPT 原文摆放。

先对一下笔记编号——这张图覆盖的后端部分,一共三个阶段的笔记:

阶段学什么笔记
后端 Web 基础(part2)Maven、HTTP、IOC/DI、MySQL、JDBC、MyBatis23-56 篇
后端 Web 实战(part3)部门管理、员工管理、项目实战、登录认证57-84 篇
后端 Web 进阶(part4)AOP、SpringBoot 原理、自定义 Starter、Maven 高级85-93 篇

第 1 版图(PPT 第 2 页):骨架只有四个方框#

第 1 页是封面(「Web 后端开发 / 总结」),第 2 页就是这张图的起点——整张图只有四个方框,最左边是一个浏览器图标(代表”发起请求的一方”),右边四个方框从左到右排成一条线:

浏览器
│ 请求
▼
Controller ──▶ Service ──▶ Dao ──▶ MySQL
◀──────────── 响应 ─────────────┘

这四个方框就是三层架构加上数据库,各层职责是第 4 章定的:

方框全称职责这一层后来用什么技术实现
Controller控制层接收前端发送的请求,对请求进行处理,并响应数据SpringMVC(第 33、35 篇)
Service业务逻辑层处理具体的业务逻辑Spring 容器里的 bean + IOC/DI(38、39 篇)
Dao数据访问层,也叫持久层负责数据访问操作,包括数据的增、删、改、查MyBatis(51~55 篇)
MySQL数据库数据存储和管理MySQL + SQL(40~48 篇)
Important

记住这张骨架比记住任何一个技术都重要:后面点亮的 11 个技术,全都是挂在四个方框上下的”配件”。Tlias 工程的包结构(controller / service / mapper / pojo)就是这张图的落地写法(57 篇)。

第 2 版图(PPT 第 3 页):11 个技术名一次性点亮#

第 3 页还是那张骨架,但四周突然多出 11 个词。它们的摆放位置就是它们的分工,先把位置记下来:

技术图上摆在哪它解决什么问题(一句话)笔记
过滤器Controller 最左边(请求进来的第一格)Filter 是 JavaWeb 三大组件之一,把请求拦下来做通用操作:登录校验、统一编码处理、敏感字符处理83 篇
拦截器过滤器右边、Controller 之前Spring 提供的动态拦截控制器方法的机制,在指定方法调用前后执行预设代码84 篇
IOC三层上方(从左数第一格)控制反转:对象的创建控制权由程序转移到 Spring 容器,容器负责创建和管理 bean38、39 篇
DI三层上方第二格依赖注入:容器为程序提供运行时所依赖的资源(对象)38、39 篇
AOP三层上方第三格面向特定方法编程:把公共逻辑(统计耗时、记录操作日志)抽出来,自动在指定方法前后运行85~87 篇
事务管理三层上方第四格一组操作是不可分割的工作单位,要么同时成功、要么同时失败(多表写入的兜底)70、71 篇
全局异常处理三层上方第五格项目里异常不可避免、默认返回的结构不符合规范,把它统一转成 Result 返回76 篇
Cookie、Session三层下方第一格会话技术:把”登录标记”存在客户端(Cookie)/ 服务端(Session),是登录校验里的”存标记”方案82 篇
JWT三层下方第二格令牌技术:登录成功后生成令牌,之后每次请求在请求头里带上它(课程最终选用的方案)81、82 篇
阿里云 OSS三层下方第三格第三方云存储(对象存储),解决文件上传后”无法直接访问、磁盘满、磁盘坏”72、73 篇
Mybatis三层下方第四格(贴着 Dao 与 MySQL)持久层框架:Dao 里只写接口 + 注解/XML 映射,SQL 和结果映射不用手写样板代码51~55 篇

(PPT 上 Cookie 和 Session 写在同一格里,所以是 11 个词。)

上方那一排:都是”横切”进业务里的能力#

IOC、DI、AOP、事务管理、全局异常处理排在三层上方,这个位置很有意思——它们不属于某一层,而是横切在层与层之间:Controller 里要能拿到 Service 对象(DI 注入),Service 的方法上要能开启事务(事务管理),所有方法外要能包一层公共逻辑(AOP),所有异常要能在最外层被接住(全局异常处理)。它们都由 Spring 框架提供,所以第 4 页会把它们圈进同一个框里。

下方那一排:进出的”标记”与”外围资源”#

会话、令牌、云存储、持久层框架排在三层下方,它们都和”数据怎么流转”有关:

  • Cookie/Session 与 JWT 管的是”这个人是谁”——先有标记,才谈得上拦(82 篇把这条依赖讲得很清楚);
  • 阿里云 OSS 管的是”文件存哪”——业务数据进 MySQL,文件类数据进 OSS;
  • MyBatis 管的是”数据怎么进 MySQL”——它紧挨着 Dao 和 MySQL 之间。

左边那两道门:先拦请求,再进业务#

过滤器 → 拦截器 → Controller 这个先后顺序不是随便排的:Filter 是 Servlet 规范里的组件,请求还没进 SpringMVC 就被它经手;Interceptor 是 SpringMVC 内部的机制,请求已经到了 SpringMVC、正要调用 Controller 方法时才轮到它(84 篇有一节专门把两者摆在一起对比)。所以登录校验的两套方案写的是同一段逻辑,位置却不一样。

第 3 版图(PPT 第 4 页):按三条线归类,下面垫上 SpringBoot#

第 4 页把散落的词收进框里,图上出现四个区域名:

  • JavaWeb 解决方案(左边一列,两格):过滤器 / Cookie、Session / JWT / 阿里云 OSS
  • Spring framework(中间一大格):IOC、DI、AOP、事务管理,下面还留着一个写着 web 的小格(里面是拦截器、全局异常处理)
  • Mybatis(右边一列):Mybatis
  • SpringBoot(最下面一条横贯中间与右边):SpringBoot
区域里面装着什么为什么归在一起
JavaWeb 解决方案过滤器、Cookie、Session、JWT、阿里云 OSS共同点是”通用方案,不靠 Spring”——过滤器来自 Servlet 规范(JavaWeb 三大组件之一),Cookie/Session 来自 HTTP 的会话技术,JWT 是令牌标准,OSS 是第三方云服务
Spring frameworkIOC、DI、AOP、事务管理 + 下面的 web 格(拦截器、全局异常处理)这是 Spring 框架自己的核心能力:管对象(IOC/DI)、管切面(AOP)、管事务(事务管理),以及 web 支持
MybatisMybatis持久层框架单独占一列——它不归 Spring 管,SpringBoot 只是帮它做好自动配置
SpringBootSpringBoot底座:它不写业务,靠起步依赖 + 自动配置把上面这些技术组装好、把应用拉起来(89 篇)

这一页最值得记住的是**“web”那一小格**:拦截器和全局异常处理被从上面一排挪进了 Spring framework 的 web 位置——它们不是泛泛的 Spring 能力,而是 web 层的东西。第 5 页这个判断被坐实了。

第 4 版图(PPT 第 5 页):SpringMVC 补上最后一块,图完整了#

第 5 页把上一步那个 web 小格写成了正式的名字——SpringMVC,并往里补了两个词:接收请求、响应数据。于是最终版的长这样:

JavaWeb 解决方案 Spring framework Mybatis
过滤器 SpringMVC ← 接收请求、响应数据 Mybatis
Cookie、Session 拦截器、全局异常处理
JWT IOC、DI、AOP、事务管理
阿里云 OSS
───────────────────────────────────────────────────────────────────────
SpringBoot(起步依赖 + 自动配置)

SpringMVC 这一格里的四个词,正好对应后端基础里讲”收请求、发响应”的那几篇:

图上的词它是什么笔记
接收请求服务器收到 HTTP 请求(请求行、请求头、请求体),SpringMVC 解析后交给对应的 Controller 方法,参数自动绑定32、33 篇
响应数据Controller 返回的对象被转成 JSON 写回浏览器(项目里统一包成 Result)34、35 篇
拦截器拦截控制器方法的执行(登录校验的第二套方案)84 篇
全局异常处理把所有异常统一处理成 Result 格式76 篇
Important

这一格解开了一个常见困惑:Controller 层的”接收请求、响应数据”这活,实际是 SpringMVC 在干。@RestController、@RequestMapping、@RequestBody、@RequestParam 这些注解都是 SpringMVC 的;39 篇里那句”声明控制器 bean 只能用 @Controller(或 @RestController),因为 SpringMVC 要认出哪些类是请求处理类”,说的就是这层关系。

把图读成一条链路#

把四版图叠起来,一条请求的走向就是从左边进入、穿过三层、到右边的数据库、再原路返回:

浏览器
│ ① 请求(请求头里带着 JWT 令牌)
▼
过滤器 Filter ← 第一道门(JavaWeb 解决方案那一列)
│
▼
拦截器 Interceptor ──▶ Controller ← 第二道门 + 控制层(都在 SpringMVC 这一格里)
│ ▲
│ │ 接收请求 / 响应数据由 SpringMVC 负责
▼ │
Service ──▶ AOP 代理(事务管理 / 记录操作日志) ← 业务逻辑层
│
▼
Mapper(MyBatis)──▶ MySQL ← 数据访问层 + 数据库
│
└── ② 响应:Result 由 SpringMVC 转成 JSON 原路返回浏览器
③ 中途任何异常 ──▶ 全局异常处理 ──▶ Result
④ 文件类数据 ──▶ 阿里云 OSS(不进 MySQL)
⑤ 上面这一切能跑起来 ──▶ SpringBoot(起步依赖 + 自动配置 + 内嵌 Tomcat)

图上没画、但同样是后端的能力#

这张图画的是运行时的架构,所以还有几条线不在图上,但它们同样是后端课程的一部分,别漏掉:

线内容笔记
构建与依赖管理Maven 的坐标、依赖管理、生命周期、依赖范围;分模块设计、继承与聚合、私服23~29 篇、91~93 篇
配置与运行application.yml、配置优先级、Bean 管理、自动配置原理、自定义 starter、内嵌 Tomcat、打包运行56 篇、88~90 篇、31 篇
(顺带)测试与日志JUnit 单元测试;Logback 日志技术(76 篇的异常现场、“记录操作日志”案例都靠它)27、28、63 篇

收尾展望:下一章做什么(PPT 第 6~7 页)#

PPT 第 6 页整页只有五个字:

Web 前端实战

也就是说,后端部分到这里全部结束了,下一个阶段(part5)把镜头切回前端——学 Vue 工程化、ElementPlus,再用同一个 Tlias 案例把页面完整做出来(01 篇的课程表里写着:part5 学”Vue 工程化、ElementPlus、Tlias 案例”,AI 切入点是”AI 辅助前端开发”);再往后 part6 是部署(Linux、Docker)。PPT 第 7 页是一张空白页,全章到此结束。

至于下面这条学习路线,可以当成整个 Web 开发的索引:

前端基础(HTML/CSS/JS/Vue)→ 后端基础(Maven/HTTP/MySQL/JDBC/MyBatis)
→ 后端实战(Tlias 增删改查、登录认证)→ 后端进阶(AOP、SpringBoot 原理、Maven 高级)
→ 前端实战(Vue 工程化 + ElementPlus + Tlias)→ 部署(Linux + Docker)

小结#

问题答案
这张图的骨架是什么?三层架构 + 数据库:Controller(接收请求、处理请求、响应数据)→ Service(业务逻辑处理)→ Dao(数据访问)→ MySQL(数据存储)
图上第一道门、第二道门分别是谁?过滤器 Filter(Servlet 规范,请求还没进 SpringMVC)→ 拦截器 Interceptor(SpringMVC 内部,拦控制器方法)
横在三层上方的是哪些能力?IOC、DI、AOP、事务管理、全局异常处理——都由 Spring framework 提供
挂在三层下方的是哪些?Cookie/Session、JWT(登录标记)、阿里云 OSS(文件存储)、Mybatis(数据访问框架)
三条线怎么分?JavaWeb 解决方案(过滤器、Cookie/Session、JWT、阿里云 OSS,通用方案不靠 Spring)/Spring framework(IOC、DI、AOP、事务管理 + SpringMVC 那一格)/Mybatis(持久层单独一列)
SpringBoot 在图上是什么位置?最下面一条底座:起步依赖 + 自动配置把上面的技术组装起来,内嵌 Tomcat 把应用跑起来
SpringMVC 那一格里放了什么?接收请求、响应数据、拦截器、全局异常处理——Controller 层的活都是它在干
后端结束了,下一章是什么?Web 前端实战(Vue 工程化、ElementPlus、Tlias 案例),再往后是部署(Linux、Docker)

相关#

练习题#

一、知识回顾(读完直接做下面的实践题)#

下面 12 条就是整张地图的”关键点清单”,每条都给出”这个技术解决什么问题、在哪一层”。合上笔记,逐条问自己能不能说出来;说不出来的,点回对应笔记再看一眼。

  1. 三层架构 + 数据库(图的骨架):Controller(控制层)接收前端发送的请求,对请求进行处理,并响应数据;Service(业务逻辑层)处理具体的业务逻辑;Dao(数据访问层/持久层)负责数据的增、删、改、查;MySQL 负责数据存储和管理。调用方向是单向的 Controller → Service → Dao → MySQL(37 篇)。
  2. IOC / DI(横在三层上方):解决”层与层之间焊死”的耦合问题——**IOC(控制反转)**把对象的创建控制权由程序转移到 Spring 容器,DI(依赖注入)让容器把运行所需的资源(对象)注入进来;目标是高内聚低耦合(38、39 篇)。
  3. AOP(横在三层上方):面向特定方法编程——把”统计方法耗时""记录操作日志”这类公共逻辑从业务方法里抽走,由代理对象在指定方法执行前后自动运行,业务方法一行都不改(85-87 篇)。
  4. 事务管理(横在三层上方):一组操作的集合,一个不可分割的工作单位,要么同时成功、要么同时失败;用在 Service 的多表操作上做兜底(新增员工要同时写 emp 和 emp_expr),Spring 用 @Transactional 管(70、71 篇)。
  5. 全局异常处理(横在三层上方):异常不可避免,而默认返回的 {"timestamp","status","error","path"} 不符合项目规范;用一个全局异常处理器把异常统一转成 Result,前端永远只处理一种响应形状(76 篇)。
  6. 过滤器 Filter(Controller 左边的第一格):JavaWeb 三大组件(Servlet、Filter、Listener)之一,把对资源的请求拦截下来做通用操作——登录校验、统一编码处理、敏感字符处理;它在 Servlet 层干活,请求还没进 SpringMVC(83 篇)。
  7. 拦截器 Interceptor(过滤器右边、Controller 之前):Spring 框架提供的、动态拦截控制器方法执行的机制,在指定方法调用前后执行预设代码;接口规范不同(实现 HandlerInterceptor,而过滤器实现 Filter)、拦截范围不同(过滤器拦所有资源,拦截器只拦 Spring 环境中的资源)是它与 Filter 的两点区别;靠配置类的 addPathPatterns / excludePathPatterns 决定拦哪些、放哪些,粒度更细(84 篇)。
  8. MyBatis(贴着 Dao 与 MySQL):持久层框架——Dao 里只写接口 + 注解/XML 映射,参数封装、结果映射、连接池都替我们做了,不再手写 JDBC 那套样板代码(51-55 篇)。
  9. SpringMVC(Spring framework 的 web 格):Spring 框架里的 web 层,负责接收请求(把 HTTP 请求参数绑定到方法参数)与响应数据(把返回对象转成 JSON);拦截器、全局异常处理也归它这一格(32-35、76、84 篇)。
  10. Cookie/Session 与 JWT(三层下方):登录校验的第一件事——登录标记。Cookie 存在客户端、Session 存在服务端,两者都受”服务端会话”的限制;课程最终选令牌(JWT)——登录成功后生成令牌返回前端,之后每次请求在请求头里带上,配合统一拦截校验(81、82 篇)。
  11. 阿里云 OSS(三层下方):第三方云存储服务,业务数据进 MySQL,文件类数据进 OSS;引出的”参数配置化”还顺手解决了密钥写死在代码里的问题(72、73 篇)。
  12. SpringBoot(最下面的底座):两大能力是起步依赖与自动配置,加上内嵌 Tomcat,一个 main 方法就能把 Web 应用跑起来;正因为它是底座,才托得住 Spring framework 与 MyBatis 这两列(31、88-90 篇)。

二、概念自测#

  • 2-1 请求进到后端,会先后经过哪两道”门”?为什么两道门的位置不一样? 要求:说出两道门的名字、各自拦什么、由谁提供,并说明过滤器为什么排在拦截器前面。

    提示(先自己想,实在想不出再点开)

    一级 · 思路:门的位置由它”住在谁家”决定——一个住在 Servlet 规范里,一个住在 SpringMVC 里 二级 · 角度:谁拦的是”请求”,谁拦的是”控制器方法”?请求先到 Servlet 容器还是先到 SpringMVC? 三级 · 骨架:第一道门是 ______(来自 ______ 规范),它拦的是 ______;第二道门是 ______(来自 ______ 框架),它拦的是 ______

    参考答案(做完再点开)

    先过 过滤器 Filter,再过 拦截器 Interceptor。

    • Filter:JavaWeb 三大组件(Servlet、Filter、Listener)之一,拦的是请求,用来做登录校验、统一编码处理、敏感字符处理等通用操作。它属于 Servlet 层,请求还没进 SpringMVC 就被它经手(83 篇)。
    • Interceptor:Spring 框架提供,动态拦截控制器方法的执行,拦的是”正要调用某个 Controller 方法”这一步。它住在 SpringMVC 内部,所以只能拦住进了 SpringMVC 的请求(84 篇)。

    顺序的原因:请求是先从浏览器到 Servlet 容器、再到 SpringMVC 的。所以 Filter 天然在外侧、Interceptor 在内侧;PPT 第 3 页把 Filter 画在 Controller 更左边一格,就是这个道理。

  • 2-2 图上为什么把”过滤器、Cookie/Session、JWT、阿里云 OSS”归成一列叫 JavaWeb 解决方案,而把 IOC/DI/AOP/事务管理归到 Spring framework 里? 要求:说出这两类技术的共同点,并解释 Mybatis 为什么单独占一列。

    提示(先自己想,实在想不出再点开)

    一级 · 思路:看”这些东西是谁提供的”——是 JavaWeb/HTTP/第三方世界的通用方案,还是 Spring 框架自己的核心能力 二级 · 角度:过滤器来自哪个规范?Cookie/Session 来自哪套协议?JWT 是标准还是框架?OSS 是谁的服务?IOC/DI/AOP/事务管理又是谁的能力? 三级 · 骨架:JavaWeb 解决方案 = ______ 提供的通用方案;Spring framework = ______ 自己的核心能力;Mybatis 是 ______ 框架,SpringBoot 只是帮它做 ______

    参考答案(做完再点开)

    JavaWeb 解决方案这一列的共同点是”通用方案,不靠 Spring”:过滤器来自 Servlet 规范(JavaWeb 三大组件之一),Cookie/Session 来自 HTTP 的会话技术,JWT 是令牌标准(任何语言、任何框架都能用),阿里云 OSS 是第三方云服务。它们解决的是”请求进出的门""登录标记""文件存哪”这类通用问题,换成别的框架也还是这几样东西。 Spring framework 这一列是 Spring 框架自己的核心能力:管对象(IOC/DI)、管切面(AOP)、管事务(事务管理)——它们不是独立的工具,而是同一套容器提供的机制,所以画在一个框里。 Mybatis 单独一列,是因为它是第三方的持久层框架:既不归 Servlet 规范管,也不是 Spring 的亲儿子,SpringBoot 只是通过自动配置把它集成进来(所以图上的 SpringBoot 底座横贯中间和右边两列)。

    换成一句话:左边是”要用的方案”,中间是”框架的能力”,右边是”持久层框架”,下面是”把这一切装起来并跑起来的底座”。

  • 2-3 为什么说 SpringBoot 是这张图的”底座”?它自己在图上不写业务,到底做了什么? 要求:至少说出两件它替我们做的事,并解释”底座”这个位置的含义。

    提示(先自己想,实在想不出再点开)

    一级 · 思路:回想只写了两行依赖坐标的 pom,以及启动日志里那句 Tomcat started on port(s): 8080 二级 · 角度:依赖是谁带进来的(起步依赖 + 依赖传递)?那么多配置是谁配好的(自动配置)?Web 服务器是装出来的还是依赖带进来的(内嵌 Tomcat)? 三级 · 骨架:SpringBoot 的两大能力是 ______ 和 ______;再加上 ______,所以一个 ______ 方法就能把应用跑起来

    参考答案(做完再点开)

    因为其他技术(Spring framework、MyBatis、SpringMVC、拦截器、全局异常处理……)都是靠它组装起来、并被它拉起来的。 它做的事至少有三件:

    1. 起步依赖:pom 里写一行 spring-boot-starter-web,靠依赖传递把内嵌 Tomcat、SpringMVC、JSON 转换等一整套 jar 带进来(31 篇,本机实测的依赖树见过这件事);
    2. 自动配置:它按”约定优于配置”的思路替我们配好大量 bean,条件不满足就不配(@Conditional 系列),这也是 application.yml 里往往只需要写几个数据源参数的原因(89 篇);
    3. 内嵌 Tomcat + 打包运行:Tomcat 是以普通 jar 依赖的形式跟着工程下载的,运行启动类的 main 方法就把服务器和应用一起拉起来,不用自己装 Tomcat、不用打 war 丢进 webapps(31 篇,实测启动日志里有 Tomcat started on port(s): 8080)。

    所以在图上它不是”第 N 层技术”,而是地基:地基不在业务链路上,但上面那些列都站在它上面。至于配置优先级、Bean 管理(88 篇)和自定义 starter(90 篇),讲的都是它是怎么做到这些的。

  • 2-4 判断题:图上把”拦截器”和”全局异常处理”划进了 SpringMVC 那一格,而不是和 AOP、事务管理并排——这样分有道理吗?为什么? 要求:先判断,再说明这两个东西”web 层”的属性体现在哪里。

    提示(先自己想,实在想不出再点开)

    一级 · 思路:问自己一句——AOP 和事务管理是”给谁用都行”的能力,还是”只有处理请求时才用得上”的能力? 二级 · 角度:拦截器拦的是谁(控制器方法 vs 任意方法)?全局异常处理器是挂在什么类上的(普通 bean 还是 web 层的 advice)? 三级 · 骨架:有道理——拦截器拦的是 ______,全局异常处理处理的是 ______ 抛出的异常;它们只出现在 ______ 这一层,而 AOP/事务管理是 ______ 的能力

    参考答案(做完再点开)

    有道理。

    • 拦截器拦的是”控制器方法”的执行——它只能拦进到 SpringMVC 的请求,离开 web 层就不存在了(84 篇);
    • 全局异常处理是接住 Controller 方法链上抛出的异常、把它转成 Result 响应——没有请求就没有”响应格式”这回事,它同样只在 web 层生效(76 篇);
    • 相比之下,AOP 和事务管理是 Spring 容器的通用能力:任意一个 bean 的方法都能被 AOP 增强,任意一个 Service 方法都能开启事务,跟”有没有 web 请求”无关。

    所以 PPT 第 3 页它们还只是五个并排的词,到第 5 页就被收进 SpringMVC 那一格——同一排词按”只属于 web 层 / 属于整个 Spring”重新分了一次家。这也顺便解释了为什么拦截器排在 Filter 后面(一个是 SpringMVC 内部的机制,一个是 Servlet 规范的组件)。

三、综合题#

  • 3-1 把”新增员工”这条链路从浏览器讲到数据库,说清每个环节是谁在干活 背景:Tlias 的”新增员工”接口要接收一个表单(姓名、性别、入职时间、头像文件、多行工作经历),往 emp 和 emp_expr 两张表里写数据,还要记录一次操作日志;数据库里 emp.username 建了唯一约束,撞名要正常返回提示。 请按顺序回答(每一步都要点明”在哪一层 / 是图上哪一格”):

    1. 进门:请求从浏览器出发时带着什么凭证?路上先后被哪两道”门”检查?没带凭证时在哪一步就被挡住、还进不进得到 Controller?
    2. 收参:请求里的表单数据(普通字段 + 文件)是怎么变成 Controller 方法参数的?分别靠什么技术?
    3. 调业务:Controller 是”自己 new 一个 Service”,还是拿到容器给的对象?这件事由哪两个词负责?
    4. 业务里挂着的两件事:Service 执行过程中,有哪两个”横切能力”在起作用?各自解决什么问题(多表写入 / 留痕)?
    5. 落库:Service 往下调的是谁?它凭什么不用手写 JDBC?SQL 最终怎么到 MySQL?
    6. 出错:如果撞了 emp.username 的唯一约束,异常从哪一层抛出来、被谁接住、最终前端收到什么形状的响应?
    7. 回程:结果怎么变成浏览器认识的 JSON?
    8. 收官一问:把上面这些环节按”图上的区域”归类——JavaWeb 解决方案、Spring framework(含 SpringMVC 那一格)、Mybatis、SpringBoot 各出了哪些力?为什么说 SpringBoot 是底座?

    涉及知识点

    知识点在这里的应用
    过滤器 Filter / 拦截器 Interceptor第 1 步——令牌校验的两道门
    SpringMVC(接收请求 / 响应数据)第 2、7 步——参数绑定与 JSON 响应
    IOC / DI第 3 步——Service、Mapper 都是容器注入的
    事务管理 / AOP第 4 步——多表写入的一致性 + 操作日志
    MyBatis第 5 步——接口 + 注解/XML 映射,参数与结果自动处理
    全局异常处理第 6 步——异常统一转成 Result
    阿里云 OSS第 2 步——头像文件先上传到云存储,拿到 URL 再入库
    三层架构全程——请求的走向就是 Controller → Service → Dao → MySQL
    提示(先自己想,实在想不出再点开)

    一级 · 思路:别按”类名”背,按”图上从外向里再原路返回”走——先两道门,再 SpringMVC 收参、Controller、Service(挂事务和 AOP)、MyBatis、MySQL,然后响应原路返回,异常有专门的出口 二级 · 方法:带的是 JWT 令牌(请求头里),先过 Filter 再过 Interceptor;控制器参数靠 @RequestParam / @RequestBody / MultipartFile 绑定;Service 和 Mapper 靠依赖注入拿到;多表写入用 @Transactional,切面用 AOP(记录操作日志);数据访问靠 MyBatis(@Insert / XML + #{});异常交给全局异常处理器转成 Result;返回对象由 SpringMVC 转 JSON 三级 · 骨架:① JWT → Filter → Interceptor(挡在 401)② MultipartFile + 普通参数 → Controller 方法 → 头像先上 ______ 拿 URL ③ Controller 注入 Service → Service 注入 Mapper ④ @Transactional 管两表 + 切面记日志 ⑤ MyBatis 发 SQL → MySQL ⑥ 唯一约束异常 → 全局异常处理器 → Result.error(...) ⑦ 返回对象 → JSON ⑧ 归类到四个区域,底座是 ______

    参考答案(做完再点开)

    1. 进门:请求在请求头里带着登录成功时拿到的 JWT 令牌。先过过滤器 Filter(Servlet 规范,JavaWeb 解决方案那一列),再过拦截器 Interceptor(SpringMVC 那一格)。令牌不合法的话,在过滤器(或拦截器)这一步就被挡住、直接返回 401,根本进不到 Controller——这正是”统一拦截”的意义:几十个接口不用各写一遍校验(83、84 篇)。 2. 收参:这一步是 SpringMVC 干的(图上”接收请求”)。普通表单字段靠 @RequestParam 一类的方式绑定到方法参数;头像文件用 MultipartFile 接收,按 72/73 篇的流程先上传到阿里云 OSS,拿回一个可访问的 URL;工作经历是多行数据,用对象/集合接收。 3. 调业务:Controller 不自己 new,而是用依赖注入拿容器创建好的 Service 对象;Service 里同样注入 Mapper。负责这两个词的是 IOC(创建权交给容器) 和 DI(容器把依赖注入进来),对应图上横在三层上方的前两格(38、39 篇)。 4. 业务里挂着的两件事:① 事务管理——emp 和 emp_expr 两张表要么一起成功、要么一起失败,方法上加 @Transactional,避免出现”基本信息存了、工作经历没存”的残缺数据(70、71 篇);② AOP——在方法前后自动织入公共逻辑,这里用来记录操作日志(谁、什么时候、做了什么),业务代码一行都不改(87 篇)。顺带 @Transactional 本身也是靠 AOP 代理实现的。 5. 落库:Service 往下调 Mapper(持久层/数据访问层),它是 MyBatis 的接口——只写接口方法 + 注解或 XML 映射,SQL 里的 #{} 负责参数封装、结果自动映射成对象、连接交给数据库连接池,不用手写 JDBC 的注册驱动/获取连接/释放资源那一套(51-55 篇)。SQL 最终发到 MySQL,数据落在 emp、emp_expr 两张表里。 6. 出错:唯一约束冲突的异常由 Dao/Service 这一层抛出,一路往上到 Controller;全局异常处理器(SpringMVC 那一格)把它接住,转成统一响应,前端收到的是

    {"code":0,"msg":"...","data":null}

    而不是 SpringBoot 默认的 {"timestamp","status","error","path"}(76 篇实测过默认结构)。 7. 回程:Controller 返回的 Result 对象由 SpringMVC(响应数据) 转成 JSON 写回浏览器——这一步和第 2 步是同一格的两个方向(34、35 篇)。 8. 归类:

    • JavaWeb 解决方案:过滤器(拦请求、校验令牌);
    • Spring framework:IOC/DI(造对象、注入依赖)、AOP(记日志)、事务管理(两表一致),以及 SpringMVC 那一格(接收请求、响应数据、拦截器、全局异常处理);
    • Mybatis:数据访问,SQL 与结果映射;
    • SpringBoot:把这些技术组装起来并跑起来——一行起步依赖把 web 相关的一整套 jar(含内嵌 Tomcat)带进来,自动配置把 MyBatis、SpringMVC 这些配好,所以它是底座;application.yml 里的数据源参数、Bean 的创建与作用域,都归它管(31、56、88-90 篇)。

    一句话收尾:这条链路就是整张图在动——浏览器从左下角进,穿过两道门(Filter、Interceptor)进入 SpringMVC,沿着三层架构往下走到 MySQL,再原路带着 Result 回到浏览器;图上的每一个技术都对应链路上的一个环节,没有一个词是白画的。

评论区

[ 标签 ]
# AI37# AI 编程2# AI工具1# AI绘图1# AI辅助开发2# Ajax7# Apifox1# AstrBot3# Astro2# CC Switch1# CDN2# Claude Code1# claudecode2# ClaudeCode1# Cloudflare2# CloudFlare2# CloudFlare-ImgBed3# coc4# CSS10# DeepSeek6# deepseek2# DELETE1# Docker5# EdgeOne3# Gist1# git1# GitHub1# hexo-circle-of-friends1# HTML9# HTTP10# ImageManager1# Java23# java13# JavaScript11# JavaWeb113# JDBC7# JSON2# JUnit1# LangChain25# Linux4# Logback1# Maven17# Muse Spark1# Mybatis1# MyBatis18# MySQL45# MySql1# NapCat1# Node.js1# obsidian2# Obsidian5# OpenCode4# ORM1# PathVariable1# PicGo1# PyCharm1# Python70# RequestBody1# RequestMapping1# RESTful风格1# skills1# Slf4j1# SpringBoot37# SpringMVC5# SQL2# Streamlit5# Svelte2# TailwindCSS1# Telegram3# Tlias2# Vercel1# vscode2# Vue20# Waline3# Web3# WebDAV1# Web基础6# Web开发6# WinSCP1# YAML1# 三层架构1# 中二宣言1# 书籍1# 使用文档10# 写作1# 函数2# 刷步数1# 前端52# 动态1# 动漫1# 包1# 单词2# 博客8# 博客工作流1# 博客开发2# 参数接收1# 友链1# 反思2# 后端48# 图床6# 地图1# 备份2# 大模型1# 奇思妙想1# 存储1# 学习方法6# 学校1# 宝塔面板3# 宝宝10# 实战4# 对象1# 导航栏1# 工具2# 布局2# 开发1# 开发工具1# 开发规范1# 开心1# 异常处理1# 影视2# 微信1# 性能优化2# 总结1# 想法15# 感受1# 感悟11# 指南1# 提示词工程2# 插件5# 故障排除1# 效率工具2# 教程10# 数据分析9# 数据库27# 数据结构1# 文件操作2# 斩神1# 日常95# 日志框架1# 朋友圈1# 朱元璋1# 模块1# 模板1# 正则表达式2# 测试3# 游戏2# 爬虫7# 生活迁移1# 电影2# 电脑1# 碎碎念1# 视觉识别1# 类1# 类型注解1# 网络基础2# 网络教室1# 羊毛2# 脚本2# 脚本工具1# 自动化2# 蓝奏云1# 表单1# 订阅推荐2# 记录2# 评论系统1# 词根1# 词缀1# 说说1# 足迹1# 跑步2# 路径参数1# 转载2# 运动1# 部署11# 部落冲突1# 配置1# 随机图1# 面向对象5# 音乐3# 音标1# 项目实战11# 饮食1# 驼峰命名1# 高德地图1
[ 公告 ]

如果你喜欢,那么欢迎来到我的世界!

了解更多
[ 音乐 ]
封面

音乐

暂未播放

0:000:00
暂无歌词
找不到相关结果。
[ contents ]
[ 全部文章 ]