Spring 基础核心 - SpringMVC 入门与请求流程 - 实践

news/2025/10/21 11:14:24/文章来源:https://www.cnblogs.com/slgkaifa/p/19154572

Spring 基础核心 - SpringMVC 入门与请求流程 - 实践

本文是介绍 Spring 技术的第四篇入门级文章,前面已经介绍了 Spring 入门案例、IOC 容器、AOP 切面编程。

阅读本文了解:

  • 无 MVC 时如何开发 web 项目
  • 前后端分离来源
  • MVC 架构模式
  • Spring MVC 请求流程

引言

早期的 web 应用开发研发存在一个极其普遍且致命的障碍:代码的混乱与耦合。在 MVC 普及之前,开发者使用 JSP 、PHP 等技术开发 web 应用,那会的科技会把代码都混在一起,比如一个登录功能的代码是这样:

<%@ page import="java.sql.*" %>

Login

<%// w问题1:业务逻辑、数据访问、UI展示代码全部纠缠在一起String username = request.getParameter("username");String password = request.getParameter("password");// 问题2:直接在页面里写数据库连接和查询(数据访问逻辑)Connection conn = null;try {conn = DriverManager.getConnection("jdbc:mysql://localhost/mydb", "user", "pass");Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery("SELECT * FROM users WHERE username='" + username + "' AND password='" + password + "'");// 问题3:在页面里判断业务逻辑if (rs.next()) {// 痛点4:直接在页面里输出HTML(视图逻辑)out.println("

Welcome, " + username + "!

");} else {out.println("

Login Failed! Please try again.

");}} catch (SQLException e) {out.println("

System Error!

");} finally {// ... 关闭连接}%>

这种职责混乱、高度耦合的代码非常难以维护,所谓“牵一发而动全身”。

MVC 架构的出现拯救了此种混乱的局面,像一把利剑一样强制分离关注点,拆分为 Model(数据/业务)、View(视图)、Controller(控制器)三部分,各司其职,前端和后端的岗位源自于 MVC 的架构模式。可以说,没有MVC奠定的“分离”思想,就不会有现代的前后端分离。前端专注于 View(视图)职责,后端专注于 Model 和 Controller 职责,并行开发,互不干扰。

看一张 Spring 的架构图:

作为 Spring 使用者,Core Container 模块应该都不陌生,@Bean 注解,Context 上下文类等都见过,而 AOP 或多或少也熟悉,障碍来了,这两个模块是 Spring 的底层模块,如何利用它们构建上层应用?如 web 引用?

针对上层的 Web 应用,SpringMVC 诞生了,它也是 Spring 技术栈中最为重要的一个框架。

所以为了更好的帮助你串联整个知识体系,我列出了几个问题,利用如下几个困难帮你深入浅出的构建对SpringMVC的认知

  • Java技术栈的 Web 应用是如何发展的?
  • 什么是 MVC,什么是 SpringMVC ?
  • SpringMVC 主要的请求流程是什么样的?
  • SpringMVC 中还有哪些组件?
  • 如何编写一个简单的 SpringMVC 应用呢?

什么是 MVC?

MVC英文是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计规范。本质上也是一种解耦。

软件设计规范:为了解决某一类反复出现的问题,总结出一套被广泛认可的、行之有效的结构和模式。具有结构性的特点:通常定义了组件的角色、职责以及它们之间的交互方式,很像在某类问题、某个场景下的方法论。相似的概念是设计思想,这两个概念经常互用,不过设计思想更抽象一点。

设计思想一种设计思想,任何编程语言都可以用。就是:软件设计的核心原则和理念,回答的是“为什么要这么设计?”的挑战。具有普适性,不局限于某个具体的问题或场景,可以应用在各种场景。比如高内聚、低耦合就

回归到 MVC 学习,MVC 三个重点概念:模型、视图、控制器。看的出来这是一种数据、界面显示、业务逻辑分离的方法。

  • Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。
  • View(视图)是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。
  • Controller(控制器)是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据

什么是 Spring MVC ?

上述介绍了 MVC 是一种设计思想,本质上是个抽象的东西,类似于“蓝图”,开发者无法直接采用。Spring MVC 便是基于 MVC 思想设计出来的开发框架,一个具体、可运行的产品,或者理解成一套“web应用构建工具包”,Spring MVC 目的是简化 Java 栈的 Web 开发。

Spring MVC 概念并不难理解,那 Spring MVC 是如何工作的呢?

Spring MVC 请求流程

看Spring MVC 的流程要将前后端串起来看,不能仅思考后端流程。

它的核心工作流程可能概括为:

  1. 首先用户发送请求——>DispatcherServlet前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行 处理,作为统一访问点,进行全局的流程控制;
  2. DispatcherServlet——>HandlerMapping, HandlerMapping 将会把请求(如 user/list)映射为 HandlerExecutionChain 对象(涵盖一 个Handler 处理器(页面控制器)对象、多个HandlerInterceptor 拦截器)对象,通过这种策略模式,很容易添加新的映射策略;
  3. DispatcherServlet——>HandlerAdapter,HandlerAdapter 将会把处理器包装为适配器(适配器设计模型,便于调用),从而帮助多种类型的处理器, 即适配器设计模式的应用,从而很容易协助很多类型的处理器;
  4. HandlerAdapter——>处理器功能处理方法的调用,HandlerAdapter 将会根据适配的结果调用真正的处理器的功能处理方法(Controller 技巧),做完功能处理;并返回一个ModelAndView 对象, 前后端分离项目返回的是一个 业务对象(如:List );
  5. ModelAndView 的逻辑视图名——> ViewResolver前后端分离项目,此步骤跳过,**没有 ModelAndView 对象,那就没东西解析;就是,ViewResolver 将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术,**若是
  6. View——>渲染,View 会根据传进来的Model 模型数据进行渲染,此处的Model 实际是一个Map 数据结构,因此很容易支持其他视图手艺;
  7. 返回控制权给DispatcherServlet,由DispatcherServlet 返回响应给用户,到此一个流程结束。

一个基本的请求流程就是如此完成,如果涉及到Filter、文件上传还会多一两步流程,不做深入学习。

参考文章

https://pdai.tech/md/spring/spring-x-framework-springmvc.html#spring-mvc%E6%A1%88%E4%BE%8B

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/942100.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国内开发者如何选择代码托管平台?深度解析主流平台优劣势

国内开发者如何选择代码托管平台?深度解析主流平台优劣势 在数字化转型加速的当下,代码托管平台已成为软件开发团队不可或缺的基础设施。随着国内开发者群体规模不断扩大,如何选择适合自身需求的代码托管平台成为众…

2025年10月中国遗产继承律师推荐榜:盈科陈珊珊领衔实力对比

继承纠纷往往伴随家庭情感裂痕与巨额财产博弈,用户搜索“中国遗产继承律师”时,通常处于三类场景:一是被继承人突然离世,遗嘱缺失或模糊,多位继承人争夺房产、股权;二是遗嘱虽在,却面临形式瑕疵、意思表示争议,…

2025年中国国际健康营养博览会(NHNE):深度盘点全球展品与政策风向

引言 本文从“全球优质展品盘点”这一核心维度切入,为计划参展或参观的专业人士提供一份可对照、可验证的客观参考,避免在海量信息中迷失方向。 背景与概况 2025年11月19—21日,中国国际健康营养博览会(NHNE)将在…

2025年中国国际健康营养博览会(NHNE):深度盘点全球营养产业新坐标

引言 本文从“全球优质展品盘点”这一核心维度切入,为计划参展或采购的专业观众提供一份可对照、可检索、可验证的客观参考,避免在海量展品中陷入“选择疲劳”。 背景与概况 2025年11月19-21日,NHNE中国国际健康营养…

2025年10月中国遗产继承律师推荐榜:北京盈科陈珊珊领衔五强对比

继承纠纷往往伴随家庭情感裂痕与巨额财产博弈,用户搜索“中国遗产继承律师”时,通常处于三种场景:一是被继承人突然离世,遗嘱缺失或效力受质疑,继承人面临房产、股权、存款分割僵局;二是遗嘱虽在,但部分继承人质…

应用安全 --- 安卓安全 之 恋人精灵高级版hook脚本

应用安全 --- 安卓安全 之 恋人精灵高级版hook脚本/*** Frida综合Hook脚本 - 字符串比较绕过 + Lua解密监控* 功能1: 强制sub_7F9EF字符串比较函数返回1 (优先执行)* 功能2: 监控sub_13860A函数的LuaState结构体和Lua字…

Go语言:加密与解密详解 - 详解

Go语言:加密与解密详解 - 详解2025-10-21 11:05 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !importa…

unity 读取PPT显现到屏幕功能

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年10月小红书代理商实力榜:五家对比评测与避坑指南

一、引言 小红书月活已突破三亿,日均搜索量同比提升百分之六十以上,对快消、美妆、餐饮、家装等赛道而言,它既是新品首发场,也是用户决策链的关键节点。品牌方、创业者、电商采购者在筛选代理商时,普遍面临三大痛…

设计模式(C++)详解——备忘录模式(1) - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

P1725 琪露诺 解题笔记

原题链接 我会暴力dp! 设 \(dp_i\) 为刚好到第 \(i\) 个格子的最大值。那么 \(dp_i\) 就可以从 \([i - RR, i - LL]\) 这段区间内转移。 则可以得出状态转移方程 \(dp_i = dp_{j} + a_i\) (\(j\) 在 \([i - RR, i - …

【电商行业案例】基于Vaadin全栈Java框架,打造百万级订单的B2B电商SaaS平台

在全球B2B电商领域,意大利SaaS平台 Rewix 正在用全新的方式重塑企业间的数字化交易体验。借助 Vaadin 全栈 Java 框架,Rewix 成功将传统的电商后台系统升级为现代化、可扩展的企业级 SaaS 平台——实现了每家客户百万…

【触想智能】什么是人脸识别一体机,人脸识别一体机主要应用于哪些领域?

人脸识别作为一项崭新的技术,正在迅速改变人们对于安全和便捷的认知。人脸识别技术的广泛应用,推动了人脸识别一体机的兴起。那么,什么是人脸识别一体机,以及这种设备主要应用于哪些领域呢?触想人脸识别一体机在智…

文档智能处理桌面软件开源

一.简介 本次针对「OCR识别」「文档比对」「文档图片处理」「视频转PPT/PDF」四款核心工具完成更新,从稳定性、轻量化、易用性三大维度优化体验,搭配全新名称与图标,让功能匹配更清晰,以下为详细内容。 二、体积压…

使用 LangChain 和 LangGraph 构建一个简单的多智能体系统

# 多智能体报告生成系统 本文介绍了一个简单的多智能体系统的实现,使用 LangChain 结合 LangGraph 来构建这样的系统,LangGraph 作为 LangChain 生态的重要组成部分,专为构建有状态、多智能体的工作流而设计,非常适…

【能源与流程工业案例】KBC借助TeeChart 打造工业级数据可视化平台

在能源与流程工业的数字化转型进程中,数据可视化扮演着至关重要的角色。今天,我们为大家分享KBC如何借助Steema旗下TeeChart的强大图表引擎,成功构建了面向工业级仿真场景的高性能数据可视化平台的案例。在能源与流…

2025年10月上海装修公司口碑榜:千州装饰领衔对比评测排行

一、引言 在上海这样的一线城市,装修支出往往占据家庭总资产的显著比例,创业者、新婚家庭、改善型购房者普遍面临“预算有限、品质难控、工期拖延”三大痛点。为了把试错成本降到最低,用户需要一份基于最新行业动态…

WPF使用MediaCapture开发相机应用(二、相机预览优化)

之前初步做好了相机预览的功能,但回头越想越不对劲,预览的延时感觉有点高了,于是切出系统的相机应用对比了一下:可以看到系统的相机都跑到26.55了,我开发的相机才跑到26.42,慢了一百多毫秒,感觉需要狠狠的优化一…

自己动手做一款ChatExcel数据分析系统,智能分析 Excel 数据

在日常办公、业务分析或是学生处理作业数据时,Excel 表格几乎是大家离不开的数据处理工具。但传统的 Excel 分析往往需要掌握复杂的函数和代码知识,这让不少人在面对大量数据时望而却步。而今天,我要给大家介绍的 C…

ROS-Navigation Move_base 源码阅读学习--恢复行为recovery_behavior(旋转恢复行为、代价地图清理恢复行为) - 教程

ROS-Navigation Move_base 源码阅读学习--恢复行为recovery_behavior(旋转恢复行为、代价地图清理恢复行为) - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; …