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 应用程序提供了一套完整的 MVC(Model-View-Controller)模式实现。MVC 模式是软件设计领域的一种经典设计模式,它将应用程序分解为模型(Model)、视图(View)和控制器(Controller)三个核心组件,以实现业务逻辑、数据表示和用户交互的分离。

  1. 前端控制器模式 Spring MVC 采用前端控制器模式,这种模式的核心思想是将请求的接收、请求的解析、请求的处理以及响应的生成等职责集中在控制器(Controller)这一组件上。在 Spring MVC 中,前端控制器通常是 DispatcherServlet,它负责接收客户端的请求,并调用相应的处理器(Handler)进行处理。

  2. MVC组件协作流程 在 Spring MVC 中,组件之间的协作流程可以概括为以下步骤:

  • 客户端发送请求到前端控制器(DispatcherServlet)。
  • DispatcherServlet 根据请求的 URL 和 HTTP 方法,通过处理器映射器(HandlerMapping)找到对应的处理器(Handler)。
  • 处理器(通常是控制器 Controller)接收到请求后,执行业务逻辑处理,并生成模型数据(Model)。
  • 处理器将模型数据和视图名(View)返回给前端控制器。
  • DispatcherServlet 通过视图解析器(ViewResolver)将视图名转换为视图对象。
  • 视图解析器负责将模型数据传递给视图,并渲染视图。
  • 渲染后的视图以 HTML 或其他格式返回给客户端。
  1. RESTful支持 Spring MVC 提供了对 RESTful 风格的支持,这使得开发者可以轻松构建遵循 RESTful 架构的 Web 服务。RESTful 架构是一种基于 HTTP 协议的架构风格,它通过使用不同的 HTTP 方法(如 GET、POST、PUT、DELETE 等)来表示资源的创建、读取、更新和删除操作。

【二、核心组件】

  1. 控制器(Controller) 控制器是 MVC 模式中负责处理用户请求的核心组件。在 Spring MVC 中,控制器通常通过实现 Controller 接口或使用 @Controller 注解来创建。
  • 注解驱动开发:Spring MVC 提供了一系列注解,如 @Controller、@RequestMapping、@ResponseBody 等,以简化控制器代码的编写。
  • 请求映射规则:通过 @RequestMapping 注解可以指定请求的 URL 和 HTTP 方法,从而实现请求的映射。
  • 返回值处理:控制器方法可以返回一个视图名、模型数据,或直接返回一个字符串或对象。
  1. 视图解析器(ViewResolver) 视图解析器负责将视图名转换为视图对象。在 Spring MVC 中,视图解析器通常与特定的视图技术(如 JSP、Thymeleaf、FreeMarker 等)相关联。
  • 模板引擎集成:Spring MVC 支持 Thymeleaf、JSP、FreeMarker 等模板引擎,通过配置视图解析器可以方便地集成这些模板引擎。

  • 内容协商策略:视图解析器可以根据请求的 Accept 类型选择合适的视图。

  • 视图重定向:通过配置视图解析器,可以实现视图的重定向功能。

  • 处理器映射(HandlerMapping) 处理器映射(HandlerMapping)负责根据请求找到对应的处理器。在 Spring MVC 中,处理器映射器是请求处理流程中的关键组件。

  • 默认实现类:DispatcherServlet 内置了多种处理器映射规则,如 SimpleUrlHandlerMapping、HandlerExecutionChainBuilder 等。

  • 自定义映射规则:开发者可以通过实现 HandlerMapping 接口来定制映射规则。

  • 拦截器链:拦截器可以添加到处理器映射链中,用于在请求处理前后执行特定逻辑。

【三、数据处理】

  1. 参数绑定机制 Spring MVC 提供了强大的参数绑定机制,可以将请求参数绑定到控制器方法的参数上。这种机制允许开发者将请求参数与控制器方法的参数进行自动映射。
  • 类型转换:Spring MVC 可以自动将请求参数转换为控制器方法参数的类型。
  • 类型转换器:Spring MVC 提供了一系列内置的类型转换器,如 StringToNumberConverter、StringToDateConverter 等。
  • 类型转换器注册:开发者可以注册自定义的类型转换器,以处理特殊的数据类型。
  1. 数据转换器 Spring MVC 支持数据转换器,可以将请求参数转换为模型对象。这种转换机制使得开发者可以轻松地将请求参数映射到模型对象中。
  • 数据转换器接口:Spring MVC 提供了 Converter 接口,用于实现数据转换逻辑。
  • 转换器注册:开发者可以通过实现 Converter 接口并注册到 ConverterRegistry 中,来添加自定义的数据转换器。
  1. 表单验证 Spring MVC 提供了强大的表单验证功能,可以通过注解如 @Valid、@NotNull、@Size 等来指定验证规则。
  • 验证器:Spring MVC 提供了多种内置的验证器,如 NotNullValidator、SizeValidator 等。
  • 自定义验证器:开发者可以自定义验证器,以处理特定的验证逻辑。
  • 验证器注册:通过实现 Validator 接口并注册到 ValidatorRegistry 中,可以添加自定义的验证器。

【四、文件操作】

  1. 多文件上传 Spring MVC 支持多文件上传,通过使用 MultipartFile 类来接收上传的文件。
  • 文件上传请求:Spring MVC 可以处理 multipart/form-data 类型的请求,以接收上传的文件。
  • 文件保存:开发者可以通过将 MultipartFile 类型的参数注入到控制器方法中,来保存上传的文件。
  • 文件上传限制:Spring MVC 允许配置文件上传的大小限制,以防止恶意上传大文件。
  1. 下载响应控制 Spring MVC 可以通过设置 Content-Disposition 响应头来控制文件的下载行为。
  • 设置下载文件名:通过设置 Content-Disposition 响应头的 filename 属性,可以指定下载文件的名称。
  • 设置下载文件类型:通过设置 Content-Disposition 响应头的 Content-Type 属性,可以指定下载文件的类型。
  1. 静态资源处理 Spring MVC 可以配置静态资源处理器,将静态资源(如 CSS、JavaScript、图片等)映射到特定的 URL。
  • 静态资源处理器:Spring MVC 提供了 ResourceHandler,用于处理静态资源请求。
  • 静态资源映射:通过配置 ResourceHandler 的 locations 属性,可以指定静态资源的存放路径。

【五、异常处理】

  1. 全局异常处理器 Spring MVC 支持全局异常处理器,用于处理整个应用程序中的异常。
  • 异常处理器接口:Spring MVC 提供了 HandlerExceptionResolver 接口,用于实现全局异常处理逻辑。
  • 异常处理器注册:通过实现 HandlerExceptionResolver 接口并注册到 HandlerExceptionResolverRegistry 中,可以添加自定义的全局异常处理器。
  1. 状态码映射 全局异常处理器可以设置返回的状态码,例如 404 或 500。
  • 异常状态码映射:通过实现 HandlerExceptionResolver 接口中的 resolveException 方法,可以设置异常返回的状态码。
  1. 错误页面定制 通过配置错误页面,可以在发生异常时展示自定义的错误信息。
  • 错误页面配置:在 Spring MVC 的配置文件中,可以通过 <error-page> 元素配置错误页面。
  • 错误页面映射:通过配置 <error-page> 元素的 location 属性,可以指定错误页面的路径。

【六、扩展机制】

  1. 拦截器开发 拦截器可以添加到处理器映射链中,用于在请求处理前后执行特定逻辑。
  • 拦截器接口:Spring MVC 提供了 HandlerInterceptor 接口,用于实现拦截器逻辑。
  • 拦截器注册:通过实现 HandlerInterceptor 接口并注册到 InterceptorRegistry 中,可以添加自定义的拦截器。
  1. 跨域解决方案 Spring MVC 支持跨域请求,可以通过配置 CORS 来允许跨域访问。
  • CORS 配置:在 Spring MVC 的配置文件中,可以通过 <cors> 元素配置 CORS。
  • CORS 配置属性:通过配置 <cors> 元素的属性,可以设置 CORS 的相关参数,如允许的域名、允许的 HTTP 方法等。
  1. 异步请求处理 Spring MVC 支持异步请求处理,可以使用 @Async 注解来实现。
  • 异步请求处理:通过使用 @Async 注解,可以将控制器方法标记为异步方法。
  • 异步方法执行:异步方法将在一个单独的线程中执行,从而提高应用程序的性能。

优快云

📥博主的人生感悟和目标

Java程序员廖志伟

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

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

Java程序员廖志伟

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

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

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

相关推荐

Ansys Lumerical 启动时出现 Error: Could not connect to Ansys license server specified at 1055@ 的一种解决办法

考虑到 2020 版的时候是直接在全局变量里指定具体地址,但是 2024 版本是写成 1055@localhost ,并且之后在站里搜相关 Ansys 的问题都指向 1055 端口被占用,虽然问题不一样,但是本着死马当活马医,就按照。我最近在跑超透镜结构,听说2024版本现在有GPU加速可以用,就把Lumerical从2020升到2024版本,结果发现一开头的破解办法完全不一样了。一开始安装的时候以为2020没有删干净,导致2024版的安装一直锁着目标地址,解决办法参考。的办法来操作,在关闭了。

qq_51404184的博客 5760

Spring、Spring MVC、MyBaits框架的学习

Spring、Spring MVC、MyBaits框架的学习

m0_56375612的博客 433

set_data_check专题[使用,report_timing,setup/hold检查]

set_data_check用于约束『数据-对-数据』的『建立保持』时间检查,通常被称为非时序约束 ( non-sequential constraints ), 理论上set_data_check 可以设在任意的两个data pin 上,其中一个pin 称为 constrained pin 类似于寄存器的data pin, 另一个pin 称为related pin 类似于寄存器的clock pin.

cy413026的博客 1万+

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

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

科马的博客 3384

化学科学催化反应产率预测之Transformer建模SMILES(Datawhale AI 夏令营)

循环神经网络:由于所有的前文信息都蕴含在一个隐向量中,随着序列长度的增加,早期的上下文信息会逐渐被遗忘。卷积神经网络:受限的上下文窗口在建模长文本时存在天然不足。需要多层卷积操作才能处理长文本。在本篇文章中,我们学习了Transformer的基本架构及其在化学反应产率预测中的应用。通过利用Transformer的Encoder部分对SMILES进行建模,我们能够更有效地捕捉序列数据的特征,从而提高模型的预测性能。

不想宅的冷同学 1096

【外挂编程】外挂编程技术揭秘(二)

引言: 经过上一篇文章大家可能对外挂有了一个初步的认识,之前的内容比较简单,应该大家很容易掌握。我写作过程中我发现三个篇幅可能写不完,后续还可能要多加几个篇幅,这篇我们就先以内存挂为主吧。话不多说了,让我们开始吧。 文章中代码github地址: https://github.com/Diamonds-ZhaoYu/hz_example 环境要求: 系统:Windows 语言...

c-rain 4035

Spring MVC 框架解析

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

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

Vivado IP核调参大师:高效配置RS编码器的避坑指南

本文深入解析Vivado中RS编码器IP核的高效配置方法,涵盖符号宽度选择、码长优化和AXI4-Stream接口控制等关键参数。重点指导如何避开常见陷阱,实现FPGA设计中的资源优化与性能平衡,提升RS编码在通信系统中的可靠性。

metaverse5vr的博客 222

Spring MVC框架中的MVC是什么

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

持续输出Java相关知识 1240

别再傻傻用外部中断了!STM32H743定时器编码器模式4倍频测速保姆级配置(附CubeMX+HAL库代码)

本文详细介绍了STM32H743定时器编码器模式的4倍频测速配置方法,通过CubeMX和HAL库实现高效脉冲计数。相比传统外部中断方案,硬件编码器模式显著降低CPU占用率,提升测速精度,适用于电机控制和运动检测等高要求场景。

weixin_33711647的博客 403

从零到一:手把手教你用Python搭建医学影像识别CNN模型(附完整代码)

本文详细介绍了如何使用Python和TensorFlow/Keras从零开始构建一个医学影像识别的CNN模型,涵盖数据预处理、模型架构设计、训练调优及部署全流程。通过实战案例和完整代码,帮助开发者快速掌握深度学习在医学影像识别中的应用,特别适合医疗AI领域的初学者和研究者。

spark7igniter的博客 200

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

GEE APP:基于Sentinel-1 SAR数据的洪水检测与制图系统:利用GEE平台实现洪涝区域提取、面积统计及矢量栅格化导出

本文介绍了一个基于Google Earth Engine平台的Sentinel-1 SAR洪水监测应用,通过自动化流程实现洪水淹没区域的精准检测与分析。系统采用Refined Lee滤波降噪和Otsu自适应阈值算法,结合SRTM地形数据消除干扰,可自动计算淹没面积并生成可视化结果。该工具提供用户友好的交互界面,支持多格式数据导出,适用于灾害应急响应、环境监测和城市规划等领域,具有云平台处理、算法鲁棒性强和操作简便等技术优势。

此星光明博客 327

Spring MVC 框架

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

qq_68630091的博客 1392

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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的博客 181

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

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

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

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、Spring MVC框架

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

2401_87878486的博客 758

什么是Spring的MVC框架?

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

mcj773951914的博客 1638
上一篇: Spring MVC 框架解析
下一篇: 微服务架构核心技术解析
Java开发廖志伟
博客等级 码龄2年 3491粉丝 1534原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值