SpringMVC的执行流程

文章目录

什么是SpringMVC

SpringMVC是Spring框架中的一个模块,专门用于开发Web应用程序。它是一个基于MVC 设计模式的Web框架。MVC模式把应用分成三个部分:Model 负责数据处理和业务逻辑,View 负责展示数据,Controller负责接收请求、调用业务逻辑、控制页面跳转。它支持灵活的配置方式,可以用XML配置也可以用注解配置。同时提供强大的数据绑定功能,能够自动将请求参数绑定到Controller方法参数上。另外还支持多种视图技术,比如JSP、Thymeleaf、FreeMarker等。

核心组件

SpringMVC包含几个核心组件:

  1. DispatcherServlet是前端控制器,整个流程的入口点。
  2. HandlerMapping是处理器映射器,负责URL与Controller的映射关系。
  3. HandlerAdapter是处理器适配器,负责调用具体的Controller方法。
  4. Handle(Controller)是我们编写的控制器,处理具体业务逻辑。
  5. ViewResolver是视图解析器,用来解析逻辑视图名。
  6. 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请求的处理。

相关推荐
天若有情6732 小时前
【java EE】IDEA 中创建或迁移 Spring 或 Java EE 项目的核心步骤和注意事项
后端·spring·java-ee·intellij-idea
钱多多_qdd4 小时前
基础篇:IoC(三):Bean实例化策略InstantiationStrategy
java·spring
安冬的码畜日常7 小时前
【JUnit实战3_27】第十六章:用 JUnit 测试 Spring 应用:通过实战案例深入理解 IoC 原理
spring·观察者模式·设计模式·单元测试·ioc·依赖注入·junit5
敲代码的嘎仔9 小时前
JavaWeb零基础学习Day6——JDBC
java·开发语言·sql·学习·spring·单元测试·maven
程序猿小蒜12 小时前
基于springboot的校园社团信息管理系统开发与设计
java·前端·spring boot·后端·spring
兔兔爱学习兔兔爱学习12 小时前
Spring Al学习9:模型上下文协议(MCP)
java·学习·spring
m0_7482480212 小时前
Spring MVC中@RequestMapping注解的全面解析
java·spring·mvc
Kay_Liang13 小时前
Spring中@Controller与@RestController核心解析
java·开发语言·spring boot·后端·spring·mvc·注解
行思理14 小时前
Spring MVC 注释新手教程
java·spring·mvc
朝新_15 小时前
【SpringBoot】玩转 Spring Boot 日志:级别划分、持久化、格式配置及 Lombok 简化使用
java·spring boot·笔记·后端·spring·javaee