Spring MVC高频面试清单(含通俗理解+生活案例)

一、请说说Spring MVC的核心组件有哪些?各自的作用是什么?

• 核心回答:Spring MVC有8个核心组件,DispatcherServlet(前置控制器)是核心调度者,其他组件围绕它配合工作;开发者不用手动创建这些组件,Spring会自动管理,只需关注业务相关的Handler(Controller)、数据和视图(前后端分离场景下视图可省略)。

• 通俗理解(类比社区超市运作):

◦ DispatcherServlet:相当于超市收银台,所有顾客(客户端)的购物结算请求都先到收银台,收银台再安排货架导购、打包员等(其他组件)配合,是整个流程的"总指挥"。

◦ Handler:相当于货架导购,负责帮顾客找具体商品(处理业务逻辑),比如顾客要"牛奶",导购就去乳制品货架把牛奶拿给顾客。

◦ HandlerMapping:相当于超市的"商品导购图",收银台(DispatcherServlet)接到顾客要"牛奶"的需求后,查导购图就知道"牛奶在乳制品区,归李导购负责"(精准映射请求到对应的Handler)。

◦ HandlerInterceptor:相当于超市的"商品质检员",导购拿商品前(请求处理前)检查牛奶有没有过期,拿给顾客后(请求处理后)确认包装没破损,还能拦截"拿临期商品却不告知"的行为(自定义拦截逻辑,比如登录验证)。

◦ HandlerExecutionChain:相当于"导购+质检员"的组合,顾客找牛奶时,李导购会和对应的质检员一起工作,确保拿的商品又好又合规。

◦ HandlerAdapter:相当于超市的"导购助手",导购拿牛奶前,助手会帮着核对顾客要的品牌(比如"常温纯牛奶")、确认保质期(处理表单参数验证、数据类型转换,比如把顾客输入的"2箱"转成数字2),导购只需专注找商品,不用管这些细节。

◦ ModelAndView:相当于"商品+购物袋",导购把牛奶(Model数据)找好后,会连同适合装牛奶的购物袋(View视图,比如JSP页面)一起交给收银台,告诉收银台"这是顾客要的东西,该用这个袋子装"。

◦ ViewResolver:相当于超市的"购物袋使用指南",收银台拿到"牛奶+购物袋"后,按指南确认"牛奶要用厚塑料袋装(解析为物理视图,比如把'milkView'逻辑视图转成'milk.jsp'页面)",避免用错袋子。

二、Spring MVC的完整工作流程是怎样的?用生活例子说明

• 核心回答:流程以DispatcherServlet为核心,分7步完成请求处理,从接收请求到响应客户端;实际开发中只需写Handler(Controller)、处理数据(Model)、设计视图(View),其他步骤Spring自动完成。

• 通俗例子(继续用超市购物类比):

  1. 顾客(客户端)走进超市,拿着购物清单(请求)走到收银台(DispatcherServlet),说"我要2箱常温纯牛奶";

  2. 收银台查"商品导购图"(HandlerMapping),发现"常温纯牛奶归乳制品区李导购负责"(确定对应的Handler),但不直接喊导购;

  3. 收银台告诉"导购助手"(HandlerAdapter):"让李导购给顾客拿2箱常温纯牛奶"(通知适配器去执行Handler);

  4. 导购助手先核对"2箱""常温纯牛奶"的要求(处理参数),再告诉李导购,李导购找到牛奶(Handler处理业务逻辑),把"2箱牛奶(Model数据)+厚塑料袋(View方案)"(ModelAndView)交给助手,助手再层层传回收银台;

  5. 收银台按"购物袋使用指南"(ViewResolver),确认"牛奶必须用厚塑料袋装"(将逻辑视图解析为物理视图,比如JSP页面);

  6. 收银台把牛奶装进厚塑料袋里(将Model数据填充到View中);

  7. 收银台把装好的牛奶递给顾客(响应客户端)。

• 补充思考:现在做前后端分离项目时,顾客不用"购物袋"(不需要View),只需直接拿牛奶(Json数据),流程会更简单,这就是Restful接口的场景。

三、Spring MVC中Restful风格接口的流程是什么?和传统ModelAndView流程有什么区别?

• 核心回答:Restful接口以返回Json数据为目标,依赖@ResponseBody注解,流程和传统模式框架一致,但省略"解析视图""填充视图"步骤;关键是通过专门组件把业务数据转成Json,直接响应给客户端,适合前后端分离。

• 通俗例子(类比"超市外卖"场景):

  1. 顾客(客户端)在手机上下单(发Restful请求),备注"要2箱常温纯牛奶,不用装购物袋,直接装外卖盒送过来"(@ResponseBody的作用,不用View);

  2. 超市收银台(DispatcherServlet)接到订单,查"商品导购图"(HandlerMapping),确定"牛奶归李导购负责"(找到对应的Handler/Controller);

  3. 收银台告诉"导购助手"(HandlerAdapter):"让李导购按外卖订单准备牛奶"(通知适配器执行Controller);

  4. 导购助手把李导购"包装成外卖专属导购"(ServletInvocableHandlerMethod),李导购找到2箱牛奶(Controller处理业务,比如查询用户信息);

  5. 超市的"外卖打包员"(HandlerMethodReturnValueHandler)接手处理:

◦ 先拿一个"食品专用外卖盒"(ServletServerHttpResponse,Spring封装的输出流,用来装数据);

◦ 用"打包机器"(HttpMessageConverter,默认用Jackson框架)把牛奶装进外卖盒,装的时候会按"外卖规范"贴标签(将数据转成Json格式,比如把"用户信息"转成{"id":1,"name":"小明"});

  1. 打包完成后,没有"找购物袋、装袋"的步骤(ModelAndView为null,不用处理View),直接让外卖员把外卖盒送给顾客(响应Json数据)。

• 核心区别:传统流程像"到店购物"(需要装购物袋、顾客自己拎走,对应要解析View、填充数据);Restful流程像"外卖配送"(不用购物袋,直接装外卖盒送上门,对应不用处理View,只返回Json数据),更适合前端和后端分开开发的场景(比如前端是手机App,后端只给数据)。

相关推荐
杨运交21 分钟前
[069][公共模块]Spring Boot 全局异常处理与参数校验实战(下):校验异常精细化处理与 WebFlux 适配
java·spring boot·后端
小鱼爱吃草灬灬23 分钟前
实时面试辅助排查清单:音频来源、问题输入与上下文
面试·职场和发展·音视频
Raas10040 分钟前
MAI Gateway(魔芋企业级AI网关)对比分析:AI网关和OpenRouter区别?企业级能力差距一览
java·服务器·网络·人工智能·gateway·ai网关·mai gateway
APItesterCris1 小时前
告别人工盯品!借助 Open‑Claw 快速搭建电商商品全自动监控与数据分析系统(完整实操代码)
java·大数据·前端·数据库
AIGC大时代1 小时前
Obsidian × Claude Cowork × Word:把研究笔记变成可验收写作链
笔记·word·claude·学术写作·obsidian·研工作流
DevNo1 小时前
从笔记混乱到有序:我尝试的三款知识库工具
笔记
聚美智数1 小时前
图片去摩尔纹 - 屏幕翻拍波纹消除 - 图像摩尔纹消解 - 屏幕干涉纹修复 API 接口介绍
经验分享·ocr
噜~噜~噜~1 小时前
操作系统笔记-3.1.1.2 内存管理的概念
笔记·操作系统
青山木1 小时前
Hot 100 --- 跳跃游戏 II
java·数据结构·算法·leetcode·贪心算法
ly76891 小时前
Spring 中的 @Configuration 与 @Component 差异:为何代理时机决定 Bean 生命周期行为
java·后端·spring·注解·代理·bean生命周期