SpringMVC 核心是 DispatcherServlet,繼承體系:HttpServlet → HttpServletBean → FrameworkServlet → DispatcherServlet。本文剖析三大階段:Servlet 初始化、WebApplicationContext 建立、請求分發處理。
web.xml <init-param>,用 BeanWrapper 綁定屬性 (如 contextConfigLocation)。initWebApplicationContext() 建立 SpringMVC 專屬 WebApplicationContext,父上下文為 ContextLoaderListener 建立的根上下文。HandlerMapping, HandlerAdapter, ViewResolver, HandlerExceptionResolver 等),掃描容器 Bean 或載入預設實現。HttpServlet.service() → FrameworkServlet.processRequest() → DispatcherServlet.doService() → doDispatch()。
HandlerMapping 根據 URL 找到 HandlerMethod (Controller 方法)。RequestMappingHandlerAdapter)。HandlerMethodArgumentResolver 解析方法參數 (RequestParam, RequestBody, 自訂註解等)。HandlerMethodReturnValueHandler 轉換為 ModelAndView。HandlerExceptionResolver 處理過程中拋出的異常。ViewResolver 解析視圖名,View.render() 輸出響應。// FrameworkServlet.initWebApplicationContext() ConfigurableWebApplicationContext wac = createWebApplicationContext(); wac.setParent(rootContext); // 關聯父上下文 configureAndRefreshWebApplicationContext(wac); // 刷新容器,觸發 onRefresh // DispatcherServlet.initStrategies() 初始化策略 this.handlerMappings = initHandlerMappings(wac); this.handlerAdapters = initHandlerAdapters(wac); this.viewResolvers = initViewResolvers(wac); ...