当前位置: 首页 > news >正文

Java-Spring入门指南(十三)SpringMVC基本概念与核心流程详解

Java-Spring入门指南(十三)SpringMVC核心流程

  • 前言
  • 一、SpringMVC是什么?
    • (1)MVC设计模式的职责划分
    • (2)Spring MVC的核心价值
  • 二、为什么需要SpringMVC?
      • 1. 传统Servlet开发的痛点
      • 2. SpringMVC的优势
  • 三、SpringMVC核心流程详解
      • 流程分步拆解
  • 四、核心组件深度解析
      • 1. DispatcherServlet
      • 2. HandlerMapping
      • 3. HandlerAdapter
      • 4. Controller
      • 5. ViewResolver
      • 6. Model


前言

  • 在前几篇博客中,我们深入学习了Spring的IOC(控制反转)与AOP(面向切面编程),掌握了如何通过Spring管理对象、解耦业务逻辑与通用增强逻辑
  • 而在实际Web应用开发中,如何高效处理HTTP请求、组织页面与业务的交互是核心问题。
  • Spring MVC作为Spring家族专为Web层设计的框架,完美承接了Spring的核心优势,让Web开发变得更简洁、模块化。

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的Java-Spring入门指南知识文章专栏
欢迎来阅读指出不足
https://blog.csdn.net/2402_83322742/category_13040333.html?spm=1001.2014.3001.5482

在这里插入图片描述

在这里插入图片描述


一、SpringMVC是什么?

Spring MVC 是 Spring Framework 中的一个Web层框架,基于经典的 MVC设计模式(Model-View-Controller,模型-视图-控制器)实现,用于简化Java Web应用的请求处理与页面渲染流程。
在这里插入图片描述

(1)MVC设计模式的职责划分

  • Model(模型):封装业务数据与核心业务逻辑(通常由Service、Repository等组成,与Spring核心容器的Bean一致)。
  • View(视图):负责页面渲染(如JSP、Thymeleaf、HTML等,展示Model中的数据)。
  • Controller(控制器):作为请求的“入口”,接收HTTP请求,调用Model处理业务,最终选择View返回响应。

(2)Spring MVC的核心价值

它并非重新发明MVC,而是以Spring的IOC容器为基础,为MVC各组件提供了更灵活的配置与更简洁的开发方式,让Web层与业务层(Service、DAO等)能无缝集成,同时通过“前端控制器+组件化分工”的设计,大幅简化了传统Servlet开发的复杂度。

二、为什么需要SpringMVC?

在Spring MVC出现前,Java Web开发主要依赖原生Servlet/JSPStruts2等框架,存在诸多问题:

1. 传统Servlet开发的痛点

  • 配置繁琐:每个请求都需编写独立Servlet,配置web.xml<servlet><servlet-mapping>,当请求数量大时,配置爆炸式增长。
  • 代码耦合严重:Servlet中既要处理请求参数、又要调用业务逻辑、还要手动转发/重定向页面,职责不单一。
  • 视图与逻辑混杂:若用JSP+Scriptlet,Java代码与HTML页面高度混杂,维护性极差。

2. SpringMVC的优势

  • 集中式请求调度:通过DispatcherServlet(前端控制器)统一接收所有请求,再分发给不同Controller,无需为每个请求单独配置。
  • 组件化分工清晰HandlerMapping(找Controller)、HandlerAdapter(执行Controller)、ViewResolver(解析视图)等组件各司其职,符合“高内聚、低耦合”。
  • 与Spring无缝集成:Spring MVC的Controller、Service等都可作为Spring Bean管理,直接享受IOC、AOP等特性。
  • 灵活的视图支持:不仅支持JSP,还能轻松集成Thymeleaf、Freemarker等模板引擎,甚至纯JSON接口(前后端分离场景)。

三、SpringMVC核心流程详解

通过一张图,我们能直观看到Spring MVC从“接收请求”到“返回响应”的全链路流程:

在这里插入图片描述

流程分步拆解

  1. 步骤1:HTTP请求到达前端控制器
    客户端(浏览器、APP等)发送HTTP请求,所有请求首先被DispatcherServlet拦截(需在web.xml中配置其为“前端控制器”)。

  2. 步骤2-3:查找处理器(Handler)
    DispatcherServletHandlerMapping(处理器映射器)询问:“当前请求应该由哪个处理器(Controller方法)处理?”
    HandlerMapping根据请求的URL、请求方式(GET/POST等),匹配到对应的HandlerExecutionChain(处理器执行链,包含目标Controller方法及拦截器等)并返回。

  3. 步骤4-7:执行处理器(Controller)
    DispatcherServlet拿到HandlerExecutionChain后,通过HandlerAdapter(处理器适配器)调用具体的Controller方法。

    • Controller内部调用Service处理业务逻辑,Service再调用Repository操作数据库(如MySQL),同时可能与Model(封装数据的对象)交互。
    • Controller处理完业务后,将结果(如Model数据、视图名称)返回给HandlerAdapter,再由HandlerAdapter回传给DispatcherServlet
  4. 步骤8-12:解析与渲染视图
    DispatcherServletViewResolver(视图解析器)询问:“如何解析返回的视图名称?”
    ViewResolver根据配置(如前缀、后缀)找到对应的View(如JSP文件、Thymeleaf模板),DispatcherServlet再渲染View(填充Model数据),最终将完整的页面(或JSON数据)响应给客户端。

四、核心组件深度解析

Spring MVC的高效运行,依赖以下核心组件的协作:

1. DispatcherServlet

  • 作用:是整个Spring MVC的“大脑”,统一接收所有HTTP请求,协调其他组件完成请求处理。
  • 类比:如同餐厅的“前台”,所有顾客(请求)先找前台,再由前台安排服务员(Controller)、厨师(Service)、传菜员(ViewResolver)等分工。
  • 配置方式:需在web.xml中配置(或Spring Boot自动配置),指定其拦截的请求路径(如/**.do)。

2. HandlerMapping

  • 作用:根据请求的URL、请求方法等信息,找到“哪个Controller的哪个方法”应该处理该请求。
  • 具体工作:内部维护“请求路径 → Controller方法”的映射关系(可通过注解@RequestMapping、配置文件等方式定义)。
  • 类比:如同“菜单-厨师”的映射表,前台(DispatcherServlet)问“顾客点了宫保鸡丁,该找哪个厨师?”,HandlerMapping就返回对应的厨师(Controller方法)。

3. HandlerAdapter

  • 作用:因为Controller的实现形式可能不同(如注解式Controller、实现特定接口的Controller),HandlerAdapter负责“适配”不同形式的Controller,调用其方法。
  • 类比:不同厨师(Controller)有不同的做菜习惯(实现方式),传菜员(HandlerAdapter)负责按照统一方式从厨师那里取菜(调用方法),再交给前台。

4. Controller

  • 作用:是业务逻辑的“入口”,接收请求参数,调用Service处理业务,最终返回“逻辑视图名+Model数据”。
  • 实现方式:最常用的是注解式Controller(如@Controller+@RequestMapping),也可实现Spring的Controller接口。

5. ViewResolver

  • 作用:将Controller返回的“逻辑视图名”(如"hello")解析为“物理视图地址”(如/WEB-INF/views/hello.jsp)。
  • 配置示例:在Spring配置文件中指定前缀、后缀:
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/"/><property name="suffix" value=".jsp"/>
    </bean>
    
    此时,逻辑视图名"hello"会被解析为/WEB-INF/views/hello.jsp

6. Model

  • 作用:封装Controller处理后的数据,供View渲染时使用。
  • 形式:可以是普通Java对象、MapModel接口等,Spring会自动将其数据传递到View中。

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的Java-Spring入门指南知识文章专栏
欢迎来阅读指出不足
https://blog.csdn.net/2402_83322742/category_13040333.html?spm=1001.2014.3001.5482

非常感谢您的阅读,喜欢的话记得三连哦

在这里插入图片描述

http://www.dtcms.com/a/426980.html

相关文章:

  • Java Web实战 - 实现用户登录功能
  • 设计模式详解——工厂模式
  • 【大模型】KNighter: 内容审查 漏洞分析
  • WampServer下载安装教程(附安装包,图文并茂)
  • 基于matlab的直流电机调速系统仿真分析-一套
  • MVC 简介
  • c#设计模式—访问者模式
  • 【大数据实战】如何从0到1构建用户画像系统(案例+数据仓库+Airflow调度)
  • 打破数据枷锁:在AWS上解锁Oracle数据库的无限潜能
  • 广州网站推广公司wordpress备份恢复阿里云
  • 不用装专业软件!reaConverter:PSD 转 JPG、PDF 转图片
  • 大模型训练流程及GPU内存解析(110)
  • 学习Python中Selenium模块的基本用法(18:使用ActionChains操作鼠标)
  • 从UI到UE:企业级软件如何做出“高端感”的桌面端界面设计
  • 服务专业的建网站公司电话新站优化案例
  • QCustomPlot 核心功能与图表设置(下)——高级功能实现
  • 莱芜网站排名价格珠海高端网站建设
  • 运营商数据安全的垂直破局:技术适配与场景深耕的双重进化
  • 《Local_Pdf_Chat_RAG 深度学习笔记:PDF 本地化对话的 RAG 原理与实践》
  • Node.js 完全安装与使用指南:Windows 平台详细教程
  • jsp在网站开发中的优势番禺制作网站系统
  • 【Rust GUI开发入门】编写一个本地音乐播放器(5. 制作音乐列表组件)
  • 成都哪家公司做网站比较好h5网站建设机构
  • 少儿舞蹈小程序(20):手机号登录与多角色注册
  • 淘宝扭蛋机小程序的社交化运营策略
  • 跨会话泄露:AI时代下的安全挑战与防御策略
  • Nginx if指令安全使用指南
  • AI模型测评平台工程化实战十二讲(第五讲:大模型测评分享功能:安全、高效的结果展示与协作)
  • 2025文档管理软件推荐:效率、安全与协作全解析
  • 包头网站建设价格北京到广州高铁多长时间