Spring MVC 是一个基于 Java 的请求驱动型 Web 框架,其核心设计围绕 前端控制器模式,通过 DispatcherServlet 协调各个组件处理 HTTP 请求。以下是其完整的执行流程,共分为 8 个核心步骤:
入口:所有请求首先由 DispatcherServlet
(前端控制器)接收。
配置:在 web.xml
中定义 DispatcherServlet
并映射 URL 路径(如 /
):
dispatcher
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
/WEB-INF/spring-mvc.xml
1
dispatcher
/
作用:确定请求对应的 Controller 方法。
组件:HandlerMapping
(如 RequestMappingHandlerMapping
)根据 URL 和注解(如 @RequestMapping
)匹配处理器。
Controller方法定义示例:
@Controller
public class UserController {
@GetMapping("/user/{id}")
public String getUser(@PathVariable("id") Long id, Model model) {
User user = userService.findById(id);
model.addAttribute("user", user);
return "user/detail";
}
}
作用:适配器模式,执行 Controller 方法。
组件:HandlerAdapter
(如 RequestMappingHandlerAdapter
)负责调用方法,处理参数绑定(如 @RequestParam
、@RequestBody
)。
流程:
解析方法参数(通过 ArgumentResolver
)。
执行 Controller 方法。
处理返回值(通过 ReturnValueHandler
)。
业务逻辑:Controller 调用 Service 层,处理业务并返回数据。
返回值类型:
ModelAndView
:包含模型数据和视图名。
String
:视图名(如 "redirect:/success"
)。
@ResponseBody
:直接返回 JSON/XML 数据。
模型填充:将数据存入 Model
对象,供视图渲染使用。
@PostMapping("/user/create")
public String createUser(User user, RedirectAttributes redirectAttrs) {
userService.save(user);
redirectAttrs.addFlashAttribute("message", "用户创建成功!");
return "redirect:/user/list";
}
作用:将逻辑视图名(如 "user/detail"
)解析为实际视图对象(如 JSP、Thymeleaf)。
配置:在 spring-mvc.xml
中配置视图解析器:
模板引擎:将模型数据填充到视图模板,生成 HTML。
示例:JSP 页面中访问模型数据:
用户详情
用户名:${user.name}
输出:将渲染后的内容写入 HttpServletResponse
,返回客户端。
小结