Spring MVC 框架详解

手写Spring框架之MVC 简介 手写Spring框架第一篇博客(必读): 手写Spring框架 上一篇博客实现了Bean容器和IOC功能, 本篇博客来实现简化版的 Spring MVC. 在看下面的内容之前, 我们首先来回顾下 Spring MVC的架构图: Spring MVC 最核心部分的就是前端控制器DispatcherServlet, 而DispatcherServlet其实就是一个Servlet, 所以我们有必... 阅读详情

📕我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、优快云博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。

📘拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、SpringBoot、SpringMVC、SpringCloud、Mybatis、Dubbo、Zookeeper),消息中间件底层架构原理(RabbitMQ、RocketMQ、Kafka)、Redis缓存、MySQL关系型数据库、 ElasticSearch全文搜索、MongoDB非关系型数据库、Apache ShardingSphere分库分表读写分离、设计模式、领域驱动DDD、Kubernetes容器编排等。不定期分享高并发、高可用、高性能、微服务、分布式、海量数据、性能调优、云原生、项目管理、产品思维、技术选型、架构设计、求职面试、副业思维、个人成长等内容。

Java程序员廖志伟

🌾阅读前,快速浏览目录和章节概览可帮助了解文章结构、内容和作者的重点。了解自己希望从中获得什么样的知识或经验是非常重要的。建议在阅读时做笔记、思考问题、自我提问,以加深理解和吸收知识。阅读结束后,反思和总结所学内容,并尝试应用到现实中,有助于深化理解和应用知识。与朋友或同事分享所读内容,讨论细节并获得反馈,也有助于加深对知识的理解和吸收。💡在这个美好的时刻,笔者不再啰嗦废话,现在毫不拖延地进入文章所要讨论的主题。接下来,我将为大家呈现正文内容。

优快云

一、基础架构

Spring MVC 是 Spring 框架的一部分,它是一个基于 Java 的全栈 Web 应用程序框架,广泛应用于构建企业级应用。Spring MVC 的核心设计理念是遵循 MVC(Model-View-Controller)模式,该模式将 Web 应用程序分为三个主要组件:控制器(Controller)、模型(Model)和视图(View),以实现应用程序的逻辑、数据表示和用户交互的分离。

  1. 前端控制器模式

前端控制器模式在 Spring MVC 中由 DispatcherServlet 实现,它作为前端控制器负责管理整个请求处理流程。当用户发起请求时,DispatcherServlet 会根据请求的 URL 和 HTTP 方法,通过请求映射机制找到对应的控制器,并委托控制器进行处理。

  1. MVC组件协作流程

在 Spring MVC 中,MVC 组件之间的协作流程如下:

(1)用户向应用程序发送请求。

(2)DispatcherServlet 接收请求,解析请求的 URL 和参数,并调用相应的控制器方法。

(3)控制器方法处理业务逻辑,并准备模型数据,将模型数据传递给视图。

(4)DispatcherServlet 调用视图解析器,将模型数据转换为 HTML 页面。

(5)DispatcherServlet 将生成的 HTML 页面发送给客户端。

  1. RESTful 支持

Spring MVC 支持RESTful架构风格,允许开发者通过标准的HTTP方法(如GET、POST、PUT、DELETE)来操作资源。在 Spring MVC 中,可以通过使用 @RequestMapping、@GetMapping、@PostMapping 等注解来定义RESTful风格的控制器,使得控制器方法能够映射到对应的 HTTP 方法。

二、核心组件

  1. 控制器(Controller)

控制器是 Spring MVC 的核心组件之一,负责接收请求并处理业务逻辑。控制器通常通过注解来映射请求和处理方法。

(1)注解驱动开发:Spring MVC 支持使用注解来简化控制器开发,如 @RequestMapping 用于映射请求路径和 HTTP 方法,@ResponseBody 用于返回响应体等。

(2)请求映射规则:控制器方法可以通过 @RequestMapping 注解定义请求映射规则,包括路径、HTTP 方法、参数等。

(3)返回值处理:控制器方法可以返回多种类型的值,如视图名、模型数据、字符串、JSON等。

  1. 视图解析器(ViewResolver)

视图解析器负责将控制器返回的模型数据转换为 HTML 页面。

(1)模板引擎集成:Spring MVC 支持多种模板引擎,如 JSP、Thymeleaf、FreeMarker 等,可以通过配置文件或注解来指定所使用的模板引擎。

(2)内容协商策略:视图解析器可以根据客户端请求的 Accept 头部信息,选择合适的视图进行渲染。

(3)视图重定向:视图解析器可以将请求重定向到另一个视图或控制器。

  1. 处理器映射(HandlerMapping)

处理器映射负责将请求映射到对应的控制器方法。

(1)默认实现类:Spring MVC 默认使用 RequestMappingHandlerMapping 作为处理器映射的实现类。

(2)自定义映射规则:开发者可以通过实现 HandlerMapping 接口来自定义请求映射规则。

(3)拦截器链:处理器映射可以配置拦截器,拦截器可以在请求处理的不同阶段执行特定的逻辑。

三、数据处理

  1. 参数绑定机制

Spring MVC 提供了强大的参数绑定机制,可以将请求参数自动绑定到控制器方法的参数上。

(1)基本数据类型:Spring MVC 可以自动将请求参数绑定到基本数据类型的参数上,如 int、String 等。

(2)复杂类型:Spring MVC 可以自动将请求参数绑定到复杂类型的参数上,如对象、集合等,通过使用 @RequestParam、@PathVariable 等注解。

  1. 数据转换器

Spring MVC 提供了数据转换器,可以将请求参数转换为自定义类型。

(1)类型转换:数据转换器可以将请求参数转换为自定义类型,如 ConversionService 提供的类型转换功能。

(2)格式化:数据转换器可以对请求参数进行格式化处理,如日期格式化等。

  1. 表单验证

Spring MVC 提供了表单验证功能,可以确保请求参数满足特定的要求。

(1)注解验证:通过使用 @Valid、@NotNull、@Size 等注解,可以方便地对表单进行验证。

(2)自定义验证器:可以自定义验证器,实现复杂的验证逻辑,通过实现 Validator 接口。

四、文件操作

  1. 多文件上传

Spring MVC 支持多文件上传,可以通过 MultipartFile 接口访问上传的文件。

(1)文件上传请求:使用 multipart/form-data 类型的请求,可以上传多个文件。

(2)文件处理:控制器方法可以接收 MultipartFile 类型的参数,处理上传的文件,如保存到服务器或数据库。

  1. 下载响应控制

Spring MVC 可以通过 HttpServletResponse 实现文件下载。

(1)文件下载请求:使用 GET 方法,可以下载服务器上的文件。

(2)响应设置:通过设置响应头,可以实现文件下载,如设置 Content-Disposition 头部为 attachment。

  1. 静态资源处理

Spring MVC 可以配置静态资源处理器,将静态资源映射到特定的 URL。

(1)配置静态资源处理器:在 Spring MVC 配置文件中,可以配置静态资源处理器,如 ResourceHandler。

(2)URL映射:通过配置 URL 映射,可以将静态资源映射到特定的 URL,如 /resources/**。

五、异常处理

  1. 全局异常处理器

Spring MVC 提供了全局异常处理器,可以捕获并处理应用程序中的异常。

(1)@ControllerAdvice注解:使用 @ControllerAdvice 注解,可以创建全局异常处理器。

(2)@ExceptionHandler注解:使用 @ExceptionHandler 注解,可以指定异常处理方法。

  1. 状态码映射

全局异常处理器可以根据异常类型,返回不同的 HTTP 状态码。

(1)异常类型:全局异常处理器可以根据异常类型,返回不同的 HTTP 状态码,如 400、500 等。

(2)自定义状态码:可以自定义异常类型和状态码的映射关系。

  1. 错误页面定制

Spring MVC 可以配置错误页面,当发生异常时,将跳转到错误页面。

(1)错误页面配置:在 Spring MVC 配置文件中,可以配置错误页面。

(2)URL映射:通过配置 URL 映射,可以将错误页面映射到特定的 URL。

六、扩展机制

  1. 拦截器开发

Spring MVC 提供了拦截器机制,可以拦截请求和响应。

(1)实现HandlerInterceptor接口:可以自定义拦截器,实现拦截逻辑。

(2)拦截器链:Spring MVC 的拦截器可以组成拦截器链,实现复杂的拦截逻辑。

  1. 跨域解决方案

Spring MVC 可以通过配置 CORS(跨域资源共享)头来处理跨域请求。

(1)CORS配置:在 Spring MVC 配置文件中,可以配置 CORS。

(2)CORS头部:CORS 头部可以控制跨域请求的访问权限。

  1. 异步请求处理

Spring MVC 支持异步请求处理,可以提高应用程序的性能。

(1)@Async注解:使用 @Async 注解,可以异步执行方法。

(2)异步响应:异步请求的响应可以返回 CompletableFuture 或 DeferredResult 对象。

总结:

本文详细介绍了 Spring MVC 的基础架构、核心组件、数据处理、文件操作、异常处理和扩展机制等知识点,并提供了技术实现细节,以提升文章的专业性和技术深度。通过对这些知识点的深入理解,开发者可以更好地掌握 Spring MVC,并将其应用于实际项目中,构建高性能、可扩展的 Web 应用程序。在实际开发过程中,可以根据项目需求,灵活运用这些知识点,实现更加复杂和高效的应用程序功能。

优快云

📥博主的人生感悟和目标

Java程序员廖志伟

希望各位读者大大多多支持用心写文章的博主,现在时代变了,信息爆炸,酒香也怕巷子深,博主真的需要大家的帮助才能在这片海洋中继续发光发热,所以,赶紧动动你的小手,点波关注❤️,点波赞👍,点波收藏⭐,甚至点波评论✍️,都是对博主最好的支持和鼓励!

- 💂 博客主页: Java程序员廖志伟
- 👉 开源项目: Java程序员廖志伟
- 🌥 哔哩哔哩: Java程序员廖志伟
- 🎏 个人社区: Java程序员廖志伟
- 🔖 个人微信号: SeniorRD

Java程序员廖志伟

📙经过多年在优快云创作上千篇文章的经验积累,我已经拥有了不错的写作技巧。同时,我还与清华大学出版社签下了四本书籍的合约,并将陆续出版。这些书籍包括了基础篇、进阶篇、架构篇的📌《Java项目实战—深入理解大型互联网企业通用技术》📌,以及📚《解密程序员的思维密码--沟通、演讲、思考的实践》📚。具体出版计划会根据实际情况进行调整,希望各位读者朋友能够多多支持!

🔔如果您需要转载或者搬运这篇文章的话,非常欢迎您私信我哦~

基于Spring的MVC框架设计与实现 说明:这篇博客中并非讲SpringMVC,而是讲述我曾经实现过的一个MVC框架, 阅读详情

相关推荐

用V E S C 6-M K V I 第六代调速控制器给VESC电调刷固件

文章摘要:本文介绍了一款先进的电机控制器,具备多项创新技术。核心亮点包括三相电流/电压检测、四象限无缝运行、多模式兼容等先进电机控制技术,以及智能感知与安全保护、高效能电源管理、多样化连接与扩展功能。此外,该控制器支持实时数据监测与用户交互,具备开源生态和工业级可靠性,适用于电动载具、机器人及工业领域。用户需注意散热要求和兼容性提示,可通过VESC-Tool软件进行灵活配置。产品可在常竹科技淘宝店购买,并加入技术交流群获取支持。

2403_89422757的博客 1364

Spring、Spring MVC、MyBaits框架的学习

Spring、Spring MVC、MyBaits框架的学习

m0_56375612的博客 433

医学成像学习笔记(一):核磁共振成像(MRI)k空间为何是图像频谱详解

前言   k空间是核磁共振成像图像重建的核心,可能很多人像笔者一样第一次学时会非常疑惑,为何k空间是图像的频域空间,观其填充过程,明明是空域信号的采样填充呀。网上很少有文章讨论这个问题,所以笔者在此写下自己的理解,供大家参考。 MRI位置编码   现在的MRI一次扫描的是一个断层或者多个断层,所谓断层就是一个有厚度的面,通过z方向梯度场来选择。我们扫描一个断层的目的是为了获得该断层各位置的质子情况,它们携带着组织的性质信息,反应出来的就是信号强度。如果整个断层都采用相同的磁场强度,而我们只能得到一个断

意疏的学习笔记 1万+

【Spring MVC】MVC设计模式的Java Web框架

Spring MVC 是 Spring 框架中的一个模块,基于 Model-View-Controller (MVC) 设计模式,用于构建灵活和可扩展的 Java Web 应用程序。它通过前端控制器 DispatcherServlet 处理所有请求,并将请求分发给对应的控制器,负责业务逻辑处理,再将结果传递给视图进行渲染,简化了开发过程并实现了应用程序的高效组织和维护。​

科马的博客 3383

支付系统保证可靠性的秘诀 ----- 订单的补偿和补单

文章目录WHAT? 前言WHY? 为什么要用多级缓存?HOW 怎么做?方案 版本1:数据库存储专线配置通过优先级进行动态上下线方案 版本1 劣势:方案 版本2 :本地缓存替代数据库方案 版本2 劣势:方案 版本3:分布式缓存做自动补偿方案 版本3 总结:Where 分布式多级缓存还能用在哪些地方?总结 WHAT? 前言 刚入职场的时候觉得支付宝等第三方支付系统好强大,要保证这么多的交易不能错,也不能重复还要保证正确的扣钱,直到后面接触订单系统以及第三方支付公司的核心交易系统后才真正窥探到了支付系统的核心

boboaisisi的专栏 3534

WOFOST作物模型(3):敏感性分析

使用TAGP(Total Above Ground Production),地上总产量TSUM1,temperature sum from emergence to anthesis,萌发至开花所需温度TSUM2,temperature sum from anthesis to maturity,开花至成熟所需温度SPAN,life span of leaves growing at 35 Celsius,生长温度为35度时的叶龄。

所有专家都曾始于新手 1145

Spring MVC 框架解析

📕我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》、(架构篇)、作者、清华大学出版社签约作家、Java领域优质创作者、优快云博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。

我是Java程序员廖志伟,感谢朋友们的支持!不定期贡献一篇高品质、过万文字、图文并茂且附有视频解说、满载代码示例注释的良心之作,坚决杜绝粗制乱造。 797

[AI8051U入门第一步]环境安装和按键控制流水灯

本文介绍了AI8051U单片机的开发环境搭建及GPIO应用。主要内容包括:1)通过ISP软件完成Keil开发环境配置;2)AI8051U特性介绍,包括32位8051内核、浮点运算单元及丰富外设;3)GPIO输入输出模式解析,并附流水灯控制代码;4)提供完整的系统初始化、延时函数及LED控制代码实现。文章配套资源包含完整工程代码,适用于智能硬件及物联网开发。

sinat_58149788的博客 669

Spring MVC框架中的MVC是什么

本文深入解析了SpringMVC框架中MVC设计模式的应用。首先介绍了MVC模式的基本概念及其在Web开发中的价值,包括模型、视图和控制器的职责划分。重点阐述了SpringMVC的实现机制,围绕DispatcherServlet的核心处理流程,详细说明了HandlerMapping、HandlerAdapter等组件的作用。通过对比MVC与MVVM、MVP等模式,分析了各自的适用场景和优缺点。文章还结合SpringBoot的简化特性,提供了分层架构设计、异常处理等最佳实践,并给出一个完整的用户管理系统实现案

持续输出Java相关知识 1237

【PostgreSQL教程】PostgreSQL 高级篇之子查询

子查询也可称为内部查询、嵌套查询,指的是在 PostgreSQL 查询中的 WHERE 子句中嵌入查询语句。一个 SELECT 语句的查询结果能够作为另一个语句的输入值。子查询可以与 SELECT、INSERT、UPDATE 和 DELETE 语句一起使用,并可使用运算符如 =、、>=、

No8g攻城狮的博客 1205

电子元器件选型与实战应用—01 电阻选型

大家好, 我是记得诚。这是《电子元器件选型与实战应用》专栏的第一篇文章,今天的主角是电阻,在每一个电子产品中,都少不了电阻的身影,其重要性不言而喻。

记得诚 3530

Spring MVC 框架

MVC是一种软件架构的设计思想,目的是为了降低项目中各个模块间的耦合度M:Model 模型V:View 视图C:Controller 控制器模型层: 负责业务逻辑的处理和数据库的操作视图层: 负责页面数据的最终展示控制器层: 负责接收客户端的请求,并调用模型处理业务,最终返回响应超文本传输协议。

qq_68630091的博客 1392

2023.03.27更新大麦网PC端抢购软件和使用教程

近期发现大麦网页端抢购页面悄然发生变化,之前可以在页面选择票价、档次,并且点击按钮进行购票,现在不行了,新的页面如下图所示。已经安全没有了点击按钮,因此,但是并不代表不能像以前之前那样。

猫敷雪 1万+

Java经典框架之Spring MVC

在Web开发中,Controller全部在SpringMVC中扫描,除了Controller之外的Bean,全部在Spring容器中扫描(Service、Dao),按这种方式扫描,扫描完完成后,Controller可以访问到Service。最早的校验,就是服务端校验。能够获取到Dao中返回的信息,那就说明访问到来Controller中的方法,说明Spring MVC没有问题,同时Controller可以获取Service对象,Service可以获取Dao中的对象,那说明Spring的IoC容器也是OK的!

m0_52514893的博客 1931

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

spring框架mvc框架_掌握Spring框架5,第1部分:Spring MVC

spring框架mvc框架 Spring MVC是Spring框架的传统库,用于构建Java Web应用程序。 它是用于构建功能齐全的Java Web应用程序和RESTful Web服务的最受欢迎的Web框架之一。 在本教程中,您将概述Spring MVC,并学习如何使用Spring Boot,Spring Initializr和Thymeleaf构建Java Web应用程序。 下载 下载...

cxu0262的博客 180

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

总结-高效学习Spring、Spring MVC框架

然而,Spring的用途不仅仅限于服务器端的开发。2). 由上边原因,SpringMVC的方法之间基本上独立的,独享request response数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架,方法之间不共享变量,而Struts2搞的就比较乱,虽然方法。3). 由于Struts2需要针对每个request进行封装,把request,session等servlet生命周期的变量封装成一个一个Map,供给每个Action使用,并保证线程安全,所以在原则上,是比较耗费内存的。

2401_87878486的博客 758

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Spring——MVC框架整合

Spring——MVC框架整合 第一章 MVC框架整合思想 1.1 搭建WEB运行环境 <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency&gt

weixin_46932548的博客 246

Spring 与 MVC 框架整合思路

整合 MVCMVC 框架整合思想为什么要整合 MVC 框架搭建 Web 运行环境Spring 整合 MVC 框架的核心思路1. 准备工厂2. 代码整合Spring 整合 Struts2 MVC 框架整合思想 为什么要整合 MVC 框架 MVC 框架提供了控制器(Controller)调用 Servlet DAO —> Service 请求响应的处理 接收请求参数 request.getParameter("") 控制程序的运行流程 视图解析(JSP、JSON、Freemarker、Thymeleaf

萌宅鹿的技术小屋 2098

什么是Spring的MVC框架?

Spring 配备构建Web 应用的全功能MVC框架。Spring可以很便捷地和其他MVC框架集成,如Struts,Spring 的MVC框架用控制反转把业务对象和控制逻辑清晰地隔离。它也允许以声明的方式把请求参数和业务对象绑定。     spring mvc是一个基于mvc的web框架。spring mvc是spring框架的一个模块,springmvc和spring无需通过中间整合层进行

mcj773951914的博客 1638

Spring的MVC框架

什么是Spring的MVC框架     Spring 配备构建Web 应用的全功能MVC框架。Spring可以很便捷地和其他MVC框架集成,如Struts,Spring 的MVC框架用控制反转把业务对象和控制逻辑清晰地隔离。它也允许以声明的方式把请求参数和业务对象绑定。     spring mvc是一个基于mvc的web框架。spring mvc是spring框架的一个模块,springm...

樊建华 264
上一篇: JVM与Spring Boot核心知识
下一篇: Spring MVC核心技术解析
Java廖志伟
博客等级 码龄2年 3609粉丝 1517原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值