文章目录
什么是SpringMVC
SpringMVC是Spring框架中的一个模块,专门用于开发Web应用程序。它是一个基于MVC 设计模式的Web框架。MVC模式把应用分成三个部分:Model 负责数据处理和业务逻辑,View 负责展示数据,Controller负责接收请求、调用业务逻辑、控制页面跳转。它支持灵活的配置方式,可以用XML配置也可以用注解配置。同时提供强大的数据绑定功能,能够自动将请求参数绑定到Controller方法参数上。另外还支持多种视图技术,比如JSP、Thymeleaf、FreeMarker等。
核心组件
SpringMVC包含几个核心组件:
- DispatcherServlet是前端控制器,整个流程的入口点。
- HandlerMapping是处理器映射器,负责URL与Controller的映射关系。
- HandlerAdapter是处理器适配器,负责调用具体的Controller方法。
- Handle(Controller)是我们编写的控制器,处理具体业务逻辑。
- ViewResolver是视图解析器,用来解析逻辑视图名。
- View是视图对象,负责最终的页面渲染。
执行流程详解
第一步:用户发起请求
用户通过浏览器发送HTTP请求到服务器,比如访问 http://localhost:8080/user/list
。
第二步:DispatcherServlet接收请求
前端控制器DispatcherServlet作为统一入口接收所有请求。它在web.xml中配置,拦截所有匹配的请求。
第三步:HandlerMapping查找Handler
DispatcherServlet调用HandlerMapping,根据请求URL查找对应的Controller和方法。HandlerMapping会扫描所有的@RequestMapping注解,建立URL和方法的映射关系。
java
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/list")
public String userList() {
return "user/list";
}
}
第四步:返回HandlerExecutionChain
HandlerMapping找到合适的Handler后,会返回一个HandlerExecutionChain对象。这个对象包含了目标Controller方法以及相关的拦截器链(如果实现了拦截器)。
第五步:HandlerAdapter处理请求
DispatcherServlet根据Handler类型找到对应的HandlerAdapter。HandlerAdapter负责调用Controller方法,包括参数解析、方法调用、返回值处理等工作。首先调用拦截器的preHandle方法,然后执行Controller方法,最后调用拦截器的postHandle方法。
第六步:Controller执行业务逻辑
Controller方法开始执行具体的业务逻辑:
java
@RequestMapping("/list")
public String userList(Model model) {
// 调用Service层处理业务
List<User> users = userService.findAll();
// 准备模型数据
model.addAttribute("users", users);
// 返回逻辑视图名
return "user/list";
}
Controller接收请求参数,调用Service层处理业务逻辑,准备模型数据,最后返回逻辑视图名。
第七步:ViewResolver解析视图
ViewResolver根据Controller返回的逻辑视图名解析出具体的View对象。比如InternalResourceViewResolver会把"user/list "解析成"/WEB-INF/views/user/list.jsp"。
java
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}
第八步:View渲染并返回响应
View对象将模型数据渲染到页面模板中,生成最终的HTML响应。渲染完成后,通过HttpServletResponse将HTML返回给客户端浏览器。
执行流程图

总结
SpringMVC的执行流程 就是这样一个完整的链条:
从用户发起请求开始,经过DispatcherServlet统一调度,通过HandlerMapping找到对应的Controller,用HandlerAdapter调用具体方法,Controller处理业务逻辑后返回视图名,ViewResolver解析视图,最终View渲染页面返回给用户。
整个过程体现了SpringMVC松耦合、职责分离的设计思想,每个组件都有明确的职责,协同工作完成Web请求的处理。