卡码笔记
首页
计算机基础
C++
Java
面经
笔记广场 (opens new window)
代码随想录 (opens new window)
首页
计算机基础
C++
Java
面经
笔记广场 (opens new window)
代码随想录 (opens new window)
  • 基础与面向对象

  • 集合

  • 异常

  • 字符串

  • JVM

  • 并发与多线程

  • JDK

  • Spring

    • Spring,SpringBoot,SpringMVC和SpringCloud区别?
    • 怎么理解SpringBoot?
    • SpringBootStarter是什么?
    • SpringBoot的启动流程是什么?
    • SpringBoot的常用注解有哪些?
    • SpringMVC的执行流程是什么?
      • 简要回答
      • 详细回答
      • 知识图解
      • 知识扩展
    • Spring的常见注解有哪些?
    • Spring中的设计模式有哪些?
    • Spring的循环依赖问题怎么解决?
    • 说说你对SpringIOC的理解?
    • 对SpringAOP的理解?
    • Bean的作用域?
    • Bean的生命周期?
  • 设计模式

# SpringMVC执行流程

# 简要回答

  • SpringMVC的核心是前端控制器与组件协作,全程由前端控制器DispatcherServlet统一调度,解耦组件。执行流程可以概括为:
    1. 用户发送请求至前端控制器(DispatcherServlet)。
    2. 前端控制器调用HandlerMapping,获取对应处理器和拦截器并返回执行链。
    3. HandlerAdapter进行适配调用具体的处理器Handler(页面控制器Controller)。
    4. 处理器Handler执行完成后返回ModelAndView。
    5. 视图解析器解析视图名后返回具体的View实例。
    6. View实例结合模型数据渲染并相应给用户。

# 详细回答

  1. 请求接收:客户端发送HTTP请求,经过Tomcat等Web服务器接收后转发到SpringMVC的前端控制器(DispatcherServlet) 。
  2. 查找处理器映射器:前端控制器收到请求后,根据请求信息(请求URL、请求方法、请求参数)调用 处理器映射器HandlerMapping。
  3. 返回处理器执行链:处理器映射器根据xml配置、注解找到具体的处理器,生成处理器执行链(HandlerExecutionChain),包含处理器Handler以及处理器拦截器Interceptor,返回给DispatcherServlet。
  4. 适配处理器:DispatcherServlet调用处理器适配器(HandlerAdapter) ,使用supports()方法找到适配当前处理器的适配器。
  5. 拦截器前置执行、处理器执行:处理器适配器(HandlerAdapter)先调用处理器执行链中的拦截器preHandle()方法,再调用具体的处理器(Handler) 的业务方法。
  6. 处理器返回:Handler执行完成返回ModelAndView对象,若为REST接口则直接返回JSON等数据。
  7. 拦截器后置执行:HandlerAdapter调用拦截器的postHandle()方法,然后将Handler的执行结果ModelAndView返回给DispatcherServlet。
  8. 视图解析:DispatcherServlet将ModelAndView传给视图解析器(ViewResolver) ,视图解析器(ViewResolver)根据ModelAndView的视图名解析为真实视图对象,返回具体的View实例。
  9. 视图渲染:DispatcherServlet将模型数据传递给View实例 ,View根据自身的视图模版与模型数据生成最终的响应内容,返回给DispatcherServlet。
  10. 拦截器完成执行、响应客户端:DispatcherServlet调用拦截器的afterCompletion()方法后将渲染后的视图返回给客户端。

# 知识图解

  1. SpringMVC的执行流程 image

# 知识扩展

  1. 扩展
    • SpringMVC
      • 是Spring中一个重要模块,能够让Spring快速构建MVC架构的Web程序。MVC就是模型Model,视图View和控制器Controller,核心思想是通过将业务逻辑、数据和显示分离,主要关注处理Web请求、管理用户会话。控制应用程序流程。
      • 模型Model:分为数据模型和业务模型,可以作为实体类承载用户数据,也可以作为Service或DAO对象处理用户提交的请求,负责业务逻辑的处理。
      • 视图View:负责将模型数据展示给用户,直接与用户进行交互。如果使用@RestController注解代替传统的@Controller注解,方法会返回JSON格式数据,不会解析视图。
      • 控制器Controller:接收用户请求,将用户请求转发给响应的Model处理,根据Model的处理结果给用户提供响应,实现模型与视图的分离,不处理具体业务逻辑。
      • 用户通过View界面向服务端提交请求,Controller接收到请求后对请求进行解析,找到相应的Model后,对用户请求进行处理后返回给Controller,对响应页面渲染后返回到客户端。
    • 前端控制器(DispatcherServlet)
      • DispatcherServlet是SpringMVC的核心控制器,它负责接收请求,调用相应的处理器,并返回相应的结果。核心作用是协调HandlerMapping、HandlerAdapter等组件,解耦各模块。
    • 处理器适配器(HandlerAdapter)
      • SpringMVC有多种处理器(Controller),注解式、接口式、Servlet式,不同处理器的调用方式不同,HandlerAdapter可以将不同处理器的调用接口统一,让DispatcherServlet无需关心处理器类型,调用适配器的handle()方法符合开闭原则。
  2. 面试官可能追问
  • Q1:DispatcherServlet是怎么初始化的?
    • 服务器启动时,DispatcherServlet会作为Servlet被初始化,执行init()方法,加载SpringMVC的配置文件并初始化核心组件如HandlerMapping、HandlerAdapter和ViewResolver并缓存,初始化完成后等待接收请求。
  • Q2:处理器返回null时,SpringMVC怎么处理?
    • 如果方法标注@ResponseBody,会通过MessageConverter将返回值转换成空响应体(JSON)并返回给客户端。如果不是REST接口,DispatcherServlet会跳过视图解析和渲染步骤,返回空响应。
  • Q3:@RestController和@Controller有什么区别?如果@Controller想返回JSON可以怎么做?
    • RestController注解是Controller注解和ResponseBody注解的结合,类中的所有方法默认返回JSON;所以在有Controller注解的方法上添加@ResponseBody注解可以返回JSON。
Last Updated: 3/10/2026, 6:08:48 PM

← SpringBoot的常用注解有哪些? Spring的常见注解有哪些? →

评论

验证登录状态...

侧边栏
夜间
卡码简历
代码随想录
卡码投递表🔥
2026群
添加客服微信 PS:通过微信后,请发送姓名-学校-年级-2026实习/校招
支持卡码笔记
鼓励/支持/赞赏Carl
1. 如果感觉本站对你很有帮助,也可以请Carl喝杯奶茶,金额大小不重要,心意已经收下
2. 希望大家都能梦想成真,有好的前程,加油💪