前言
SpringMVC是Java后端面试必考高频知识点,不管是SpringBoot零基础开发,还是八股文面试,五大组件、执行流程、拦截器三大考点几乎必问。
本文摒弃晦涩源码废话,用大白话+流程链路拆解,零基础能看懂,面试直接背诵,全文适配当下前后端分离开发场景,剔除老旧JSP冗余知识点。
一、什么是SpringMVC?(面试标准作答)
SpringMVC 是Spring 框架专属Web层模块,基于经典MVC设计模式开发,全权接管项目中HTTP请求接收、分发、业务处理、结果响应全流程。
日常开发所有SpringMVC常用功能
我们日常CRUD开发用到的功能,全部归属SpringMVC管控:
接口注解:@RestController、@RequestMapping、@GetMapping等路由注解
参数能力:URL参数、JSON参数接收、类型自动转换、参数校验
响应能力:后端实体类自动序列化返回JSON数据
拓展能力:自定义拦截器、全局跨域、文件上传、请求封装
SpringBoot适配要点
SpringBoot项目默认自动集成SpringMVC,零xml配置、开箱即用,开发者无需手动整合依赖、配置核心调度器。
核心定位总结
核心链路:前端HTTP请求 → 后端接口业务处理 → 格式化结果响应前端
二、SpringMVC 五大核心组件(面试重中之重)
SpringMVC整套请求流转,完全依靠5大组件分工协作、配合完成,牢记每个组件核心职责+大白话别称,面试秒答。
1. DispatcherServlet 前端控制器
别称:总调度、大管家、中枢核心
职责:项目所有HTTP请求统一入口,拦截全部浏览器请求,负责调度、统筹其余四大组件,把控整条请求完整生命周期,SpringMVC最核心组件。
2. HandlerMapping 处理器映射器
别称:找路员、接口匹配器
职责:根据请求URL地址、请求方式(GET/POST/PUT/DELETE),匹配项目中对应的Controller接口方法,最终返回处理器执行链(目标Handler + 拦截器链)。
3. HandlerAdapter 处理器适配器
别称:执行人、适配工具
职责:承接映射器匹配好的Controller方法,完成接口参数绑定、数据类型转换、参数合法性校验,通过反射调用业务接口,适配各类格式请求执行。
4. ViewResolver 视图解析器
别称:页面渲染器
重点考点:当下前后端分离项目基本废弃不用
职责:老旧JSP单体项目专用,根据视图名称匹配后端页面资源;现在项目统一返回JSON数据,视图解析器直接失效,无需配置。
5. Handler 处理器
大白话解释:开发者手写的Controller接口方法
职责:执行业务逻辑、调用Service业务层、联动Mapper操作数据库,真正完成业务数据处理。
三、SpringMVC 完整执行流程(面试必背流程)
极简总链路(背诵版)
浏览器HTTP请求 → Tomcat容器 → DispatcherServlet → HandlerMapping → HandlerAdapter → Controller → Service → Mapper → 逐层结果返回 → 框架自动JSON序列化 → 响应前端
分步超详细拆解(可直接面试口述)
第1步:发起请求
前端浏览器、Axios、Postman等客户端发起HTTP请求,例如:/user/login,请求被服务端Tomcat容器接收。
第2步:Tomcat转交请求
Tomcat只做请求接收,不处理任何业务逻辑,直接将全部请求转交SpringMVC核心调度:DispatcherServlet。
第3步:匹配接口路由
DispatcherServlet调用HandlerMapping,根据请求地址、请求方式匹配对应Controller接口;匹配成功后返回处理器执行链(接口方法+拦截器)。
第4步:获取执行适配器
前端控制器获取适配当前接口的HandlerAdapter,交由适配器全权执行接口逻辑。
第5步:参数自动处理
HandlerAdapter自动完成全套参数操作:
解析Path参数、Form参数、Body JSON参数
完成字符串、基本类型、实体类自动类型转换
执行@Valid参数校验、异常封装
封装参数,赋值给Controller方法入参
第6步:执行业务代码
适配器通过反射执行Controller接口方法,Controller调用Service层业务代码,Service调用Mapper层操作数据库,完成完整业务读写。
第7步:接口返回业务数据
业务执行完毕,Controller统一返回自定义Result、分页实体、字符串、POJO实体等数据。
第8步:自动JSON序列化
前后端分离架构下,SpringMVC内置Jackson工具,自动将后端Java对象转为JSON字符串,开发者无需手动转换。
第9步:响应前端,请求结束
DispatcherServlet封装响应报文,通过HttpServletResponse输出流将JSON数据返回客户端,单次HTTP请求生命周期完结。
四、SpringMVC拦截器:执行时机+业务场景
拦截器是SpringMVC原生功能,区别于Filter过滤器,仅管控Controller接口请求,面试常考执行顺序、使用场景、和过滤器区别。
完整执行顺序(从上至下执行)
请求进入DispatcherServlet
HandlerMapping完成接口路由匹配
preHandle() 前置拦截:返回true放行请求,返回false直接截断请求、终止流程
执行目标Controller接口业务方法
postHandle() 后置处理:Controller执行完毕,视图渲染之前执行
afterCompletion() 最终回调:请求全部处理完毕、响应结束后最终执行,多用于资源释放
企业常用业务场景
JWT、Token登录身份校验拦截
接口权限校验、角色权限管控
全局请求日志、响应日志打印
接口限流、非法请求拦截
统一全局跨域配置、请求头封装