在前几期中,我们探讨了 Spring 的 IoC 容器、Bean 创建、AOP、事务管理以及 Spring Boot 的自动装配,这些为 Spring MVC 的运行奠定了基础。作为 Spring 生态中处理 Web 请求的核心模块,Spring MVC 通过 DispatcherServlet
实现了灵活的请求分发与处理。本篇将深入 DispatcherServlet
的源码,剖析其请求处理的全流程。
1. Spring MVC 的核心组件
Spring MVC 的工作基于 MVC 模式(Model-View-Controller),核心组件包括:
DispatcherServlet
:前端控制器,统一处理所有请求。HandlerMapping
:映射请求到处理器(Controller)。HandlerAdapter
:适配并执行处理器方法。ViewResolver
:解析视图名称为具体视图。
这些组件通过 IoC 容器管理,协同完成请求处理。
2. DispatcherServlet 的基本配置
在 Spring Boot 中,spring-boot-starter-web
自动配置 Spring MVC:
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "Hello, Spring MVC!";
}
}
DispatcherServlet
默认注册为 Servlet,映射到/
。
3. DispatcherServlet 的初始化
DispatcherServlet
继承自 FrameworkServlet
,其初始化在 onRefresh()
中完成:
@Override
protected void onRefresh(ApplicationContext context) {
initStrategies(context);
}
protected void initStrategies(ApplicationContext context) {
initMultipartResolver(context);
initLocaleResolver(context);
initThemeResolver(context);
initHandlerMappings(context);
initHandlerAdapters(context);
initHandlerExceptionResolvers(context);
initRequestToViewNameTranslator(context);
initViewResolvers(context);
initFlashMapManager