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,后端只给数据)。

相关推荐
weixin_419658312 分钟前
Spring的三级缓存和SpringMVC的流程
java·spring·缓存
paopaokaka_luck12 分钟前
基于SpringBoot+Vue的DIY手工社预约管理系统(Echarts图形化、腾讯地图API)
java·vue.js·人工智能·spring boot·后端·echarts
自在极意功。12 分钟前
贪心算法深度解析:从理论到实战的完整指南
java·算法·ios·贪心算法
骁的小小站3 小时前
Verilator 和 GTKwave联合仿真
开发语言·c++·经验分享·笔记·学习·fpga开发
kkkkk0211063 小时前
软考高级-系统架构设计师案例专题三:系统开发基础
笔记·系统架构
计算机学姐4 小时前
基于微信小程序的高校班务管理系统【2026最新】
java·vue.js·spring boot·mysql·微信小程序·小程序·mybatis
一路向北⁢4 小时前
基于 Apache POI 5.2.5 构建高效 Excel 工具类:从零到生产级实践
java·apache·excel·apache poi·easy-excel·fast-excel
毕设源码-赖学姐7 小时前
【开题答辩全过程】以 基于Android的校园快递互助APP为例,包含答辩的问题和答案
java·eclipse
damo017 小时前
stripe 支付对接
java·stripe
新子y7 小时前
【小白笔记】区分类方法/实例方法和静态函数/命名空间函数
笔记·分类