请求入口: HTTP 请求到达 DispatcherServlet
。
寻找处理器: DispatcherServlet
查询 HandlerMapping
,根据请求信息(URL, HTTP Method 等)找到能够处理该请求的 Controller 方法 (Handler)。
适配与调用: DispatcherServlet
通过 HandlerAdapter
来调用选定的 Controller 方法。HandlerAdapter
负责处理方法参数的解析和数据绑定(例如,将请求参数注入到 @RequestParam
标记的参数,将 JSON 请求体反序列化到 @RequestBody
标记的对象)。
Controller 处理: Controller 方法执行:
- 接收解析后的请求数据。
- 调用 Service 层等(与 Model 交互)执行业务逻辑。
- 将结果数据放入
Model
对象(或 ModelAndView
)。
- 返回逻辑视图名(String)或
ModelAndView
对象(或直接返回数据对象给 @ResponseBody
)。
视图解析 (非 @ResponseBody
): 如果 Controller 返回的是逻辑视图名或 ModelAndView
,DispatcherServlet
会将逻辑视图名交给 ViewResolver
。
获取具体视图: ViewResolver
根据逻辑视图名解析得到具体的 View
实例(例如,一个指向特定 JSP 文件的 JstlView
对象)。
数据渲染: DispatcherServlet
将 Controller 准备好的 Model
数据传递给 View
实例。View
实例使用这些数据渲染最终的响应(例如,JSP 引擎执行 JSP 文件并生成 HTML)。
REST 响应 (@ResponseBody
): 如果 Controller 方法使用了 @ResponseBody
或属于 @RestController
,HandlerAdapter
会使用合适的 HttpMessageConverter
将返回的对象序列化为特定格式(如 JSON)并直接写入响应体。此过程通常跳过视图解析和 View
渲染步骤。
响应返回: DispatcherServlet
将最终生成的响应(渲染后的 HTML 或序列化后的数据)返回给客户端。