概述
用户发送url请求到DispatcherServlet,也就是前端处理器,然后前端处理器去HandlerMapping(处理器映射器)中获取相应的Handler,再根据这个Handler去处理器适配器中获取相应的适配器,然后通过适配器的处理,返回ModelAndView,前端处理器将这个ModelAndView传给ViewReslover(视图解析器),然后视图处理器返回View,然后前端处理器对View进行渲染相应给用户
1. 用户发起请求
- 客户端(浏览器等)发送 HTTP 请求至服务器,请求首先被
DispatcherServlet(前端控制器)拦截。
2. 请求映射(HandlerMapping)
DispatcherServlet查询 HandlerMapping,根据请求的 URL、参数等信息,找到匹配的 处理器(Handler) ,通常对应@Controller注解的类中的方法。- 示例:
RequestMappingHandlerMapping处理@RequestMapping注解。
3. 处理器适配(HandlerAdapter)
DispatcherServlet通过 HandlerAdapter 执行处理器。适配器模式使得不同类型的 Controller(如基于注解、传统实现类)能统一调用。- 示例:
RequestMappingHandlerAdapter处理@Controller方法。
4. 执行处理器(Controller 方法)
- 调用 Controller 方法,处理业务逻辑(可能涉及 Service 层、数据库操作等)。
- 参数绑定:SpringMVC 自动将请求参数、路径变量、表单数据等绑定到方法参数(如
@RequestParam、@PathVariable)。 - 数据校验:可选使用
@Valid注解进行数据验证。
5. 返回处理结果
- 处理器返回
ModelAndView(包含模型数据和视图名)或直接返回数据(如 REST 接口返回 JSON)。 - 若使用
@ResponseBody或@RestController,结果会通过HttpMessageConverter直接序列化为 JSON/XML 等格式,跳过视图解析。
6. 解析视图(ViewResolver)
- 若返回视图名称,
DispatcherServlet调用 ViewResolver 将逻辑视图名解析为具体的视图对象(如 JSP、Thymeleaf 模板)。 - 示例:
InternalResourceViewResolver解析 JSP 路径。
7. 渲染视图(View 层)
- 视图对象将模型数据填充到模板中,生成最终响应内容(如 HTML 页面)。
- 非视图场景(如返回 JSON)直接输出数据。
8. 返回响应
DispatcherServlet将渲染结果返回客户端,完成请求处理。