SpringMVC执行流程

一、整体执行流程(文字版)

  1. 用户发起请求,请求到达前端控制器 DispatcherServlet

  2. DispatcherServlet 调用 HandlerMapping,根据 URL 找到对应的处理器 Handler(Controller)

  3. HandlerMapping 返回 处理器执行链(HandlerExecutionChain),包含 Handler 和拦截器

  4. DispatcherServlet 将 Handler 交给 HandlerAdapter,由适配器执行 Controller 方法

  5. 执行 拦截器前置方法(preHandle)

  6. 调用 Controller 业务方法,处理业务逻辑,返回 ModelAndView

  7. 执行 拦截器后置方法(postHandle)

  8. DispatcherServlet 将 ModelAndView 交给 ViewResolver 视图解析器,解析出具体视图

  9. 渲染视图,执行 拦截器完成方法(afterCompletion),最终响应给浏览器

    二、简化流程图(记忆版)

请求 → DispatcherServlet → HandlerMapping → Handler → HandlerAdapter → Controller → ModelAndView → ViewResolver → 视图渲染 → 响应

三、核心组件作用(面试必问)

  1. DispatcherServlet:前端控制器,整个流程的入口,总调度

  2. HandlerMapping:处理器映射器,根据 URL 找 Controller

  3. HandlerAdapter:处理器适配器,适配执行不同类型 Controller

  4. Controller:业务处理器,处理请求

  5. ModelAndView:封装数据和视图名

  6. ViewResolver:视图解析器,解析视图名称

  7. Interceptor:拦截器,在 Controller 前后做增强

    四、面试一句话精简版

请求先到 DispatcherServlet,由 HandlerMapping 找到 Controller,HandlerAdapter 执行 Controller,返回 ModelAndView,再由 ViewResolver 解析视图并渲染,最后响应客户端,中间经过拦截器。

相关推荐
mldong4 小时前
工作流引擎的灵魂:状态机与 submitType
后端
码匠许师傅4 小时前
【C++ 面试真题】C++ 的 const 和 constexpr 有什么区别?
c++·面试
朦胧之6 小时前
Go 基础
后端·go
码农颜7 小时前
5.4.1 锁分类
java·数据库·mysql
lun7 小时前
Agent 工具调用成长史:理清楚 Function Calling、MCP、CLI 的关系
后端
Python私教7 小时前
Codex 自动写 Commit 够安全吗?一套证据化 Git 提交流程
人工智能·git·后端
Python私教7 小时前
AI Agent 上生产要不要开写权限?我把执行链拆成 4 道闸门
人工智能·后端·python
lun7 小时前
Claude Code 多 Agent 实现:subAgent & Agent Teams
后端
linux-hzh8 小时前
百日算法修炼 · Day 03
java·算法
不负岁月无痕8 小时前
简单理解操作系统结构
java·linux·c语言·开发语言·c++·面试