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请求的处理。

相关推荐
happymaker062621 小时前
Spring学习日记——DAY03(yml文件)
java·spring boot·spring
霸道流氓气质21 小时前
Spring AI 结构化输出 Agent 实战:让大模型返回精准 JSON
人工智能·spring·json
段ヤシ.21 小时前
回顾Java知识点,面试题汇总Day10(持续更新)
java·开发语言·spring
小江的记录本1 天前
【Java基础】集合框架: ArrayList vs LinkedList 核心区别、扩容机制(附《思维导图》+《面试高频考点清单》)
java·数据库·python·mysql·spring·面试·maven
夕除1 天前
spring boot 10
java·python·spring
Mahir081 天前
Spring 核心原理:IoC/DI 与 Bean 生命周期全景解析
java·后端·spring·面试·bean生命周期·控制反转ioc·依赖注入di
小江的记录本1 天前
【Java基础】泛型:泛型擦除、通配符、上下界限定(附《思维导图》+《面试高频考点清单》)
java·数据结构·后端·mysql·spring·面试·职场和发展
Don.TIk2 天前
ChapterOne-搭建项目骨架
java·spring·spring cloud·mybatis
南极企鹅2 天前
事务&@Transactional注解
java·数据库·spring·oracle·mybatis
me8322 天前
【AI】踩坑LangChain4j集成千问模型:版本适配问题完整解决历程
java·spring·阿里云·ai