详解 Spring MVC(Spring MVC 简介)

什么是 Spring MVC?

Spring MVC 是 Spring 框架提供的一个基于 MVC 模式的轻量级 Web 框架,是 Spring 为表示层开发提供的一整套完整的解决方案,Spring MVC 使用了 MVC 架构模式,将 Web 层职责解耦,基于请求驱动模型,简化了 Web 应用程序的开发过程。

什么是 MVC?

MVC 是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范,是一种架构设计模式,MVC 模式降低了视图和与业务逻辑的耦合。

  • 模型(Model):数据模型,提供要展示的数据,包含数据的查询和组装。
  • 视图(View):负责进行模型的展示,就是我们通过界面可以看到的界面。
  • 控制器(Controller):接受用户请求,委托给模型处理,模型处理完数据返回给视图,由视图进行展示,控制器可以理解为一个控制中心、调度员的角色。

Spring MVC 的特点?

  • 轻量级、简单易学习,使开发人员能够快速开发出高质量的Web应用程序。
  • 可维护性,Spring MVC 框架采用了 MVC 设计模式,将模型、视图、控制器进行了分离,使得代码更加清晰、易于维护。
  • 灵活,Spring MVC 框架对于多种数据源和视图技术提供了支持,如JSP、Velocity、Freemarker等,可以让使用者灵活的选择技术方案。
  • 可扩展,Spring MVC 框架提供了很多扩展点,开发人员可以利用这些扩展点去扩展自己需要的功能,如可以自定义视图解析器、拦截器等。
  • 易于集成,Spring MVC 可以与 Spring 无缝集成,可以提升开发效率。
  • 灵活的URL映射,支持多种处理器映射方式,如基于注解的映射和基于URL映射的映射。
  • 单元测试,Spring MVC提供了强大的约定大于配置的契约式编程支持,以及简单的web层单元测试。
  • 支持国际化,可以根据用户区域显示多国语言。
  • 高效,Spring MVC 框架具有高效的处理请求和响应的能力。

Spring MVC 的核心组件?

  • DispatcherServlet(前端控制器):DispatcherServlet 是 Spring MVC 的核心,即是整个请求处理流程的入口,也贯穿这个流程,负责协调各个组件的工作,是一个中心控制器的作用。
  • HandlerMapping(处理器映射器):HandlerMapping 主要是将客户端的请求映射到具体的处理程序上,也就是帮助找到具体 Controller,一般会根据请求的 url 及类型,来找到具体的处理器。
  • HandlerAdapter(处理器适配器):HandlerAdapter 负责适配不同类型的处理程序,匹配到具体的 Handler。
  • Controller(控制器):Controller 负责处理客户端的请求并响应,它通常包含一些处理方法,这些处理方法被称为 Handler。
  • ModelAndView(模型和视图):ModelAndView 是一个持有模型数据和视图信息的容器对象,它将处理的模型数据和视图名称封装在一起传递给 DispatcherServlet。
  • ViewResolver(视图解析器):ViewResolver 负责将逻辑视图解析为具体的视图对象,并返回给 DispatcherServlet。
  • View(视图):它负责将模型数据渲染为最终结果,View 通常是一个 JSP 页面、FreeMarker 模板、Thymeleaf 模板或其他类型的模板文件,View 负责将模型数据填充到模板中,并生成最终的 HTML、XML、JSON 等格式的响应。

Spring MVC 的工作流程?

  • 客户端发送请求到前端控制器 DispatcherServlet。
  • 前端控制器 DispatcherServlet 收到请求后,寻找处理器映射器 HandlerMapping 处理。
  • 处理器映射器 HandlerMapping 根据请求 url 找到具体的处理器 Handler,生成处理器映射器对象及处理器拦截器一并返回给前端控制器 DispatcherServlet。
  • 前端控制器 DispatcherServlet 调用处理器适配器 HandlerAdapter,处理器适配器 HandlerAdapter 经过适配调用具体的处理器 Handler(Controller)。
  • Controller 调用 Service 完成业务逻辑处理,返回 ModelAndView。
  • DispatcherServlet 将 ModelAndView 传递给 ViewReslover。
  • ViewReslover 解析出具体的 View。
  • DispatcherServlet 根据具体的 View 渲染视图并返回给客户端。

Spring MVC 工作流程简图

在这里插入图片描述
简单的画了一个 Spring MVC 的工作流程,希望可以加深记忆。

欢迎提出建议及对错误的地方指出纠正。

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

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

相关文章

基于Java、SpringBoot和uniapp在线考试系统安卓APP和微信小程序

摘要 基于Java、SpringBoot和uniapp的在线考试系统安卓APP微信小程序是一种结合了现代Web开发技术和移动应用技术的解决方案,旨在为教育机构提供一个方便、高效和灵活的在线考试平台。该系统采用Java语言进行后端开发,使用SpringBoot框架简化企业级应用…

SpringCloud微服务之Nacos、Feign、GateWay详解

SpringCloud微服务之Nacos、Feign、GateWay详解 1、Nacos配置管理1.1、统一配置管理1.1.1、在nacos中添加配置文件1.1.2、从微服务拉取配置 1.2、配置热更新1.2.1、方式一1.2.2、方式二 1.3、配置共享1.3.1、配置共享的优先级 1.4、搭建nacos集群1.4.1、初始化数据库1.4.2、下载…

plt多子图设置

import matplotlib.pyplot as plt# 使用 subplots 函数创建一个 2x3 的子图网格 fig, axs plt.subplots(nrows2, ncols3, figsize(16, 10)) # 调整 figsize 来改变图像大小# 遍历每个子图,并绘制一些内容(这里只是简单的示例) for ax in ax…

React与Vue的区别?

一、区别: 1. 语法 Vue采用自己特有的模板语法; React是单向的,采用jsx语法创建react元素。 2.监听数据变化的实现原理不同 Vue2.0 通过Object.defineproperty()方法的getter/setter属性, 实现数据劫持, 每次修改完数据会触发diff算法(双端对比) …

VUE 页面生命周期基本知识点

在 Vue.js 中,页面生命周期(更准确地说是组件生命周期)指的是组件从创建到销毁的一系列过程。了解这些生命周期钩子可以帮助我们更好地管理组件的状态和行为。以下是 Vue 组件的主要生命周期钩子: beforeCreate 在实例初始化之后&…

vue使用element plus组件上传服务器

在Vue项目中使用Element Plus组件上传文件到服务器,你可以使用ElUpload组件。以下是一个简单的示例,展示了如何使用ElUpload组件来上传文件,并将其保存到服务器。 首先,确保你已经安装了Element Plus。 npm install element-plu…

从入门到精通:详解Linux进程管理

前言 在这篇文章中,我将带领大家深入学习和理解Linux系统中的进程管理。无论你是初学者还是有一定经验的开发者,相信这篇文章都会对你有所帮助。我们将详细讲解冯诺依曼体系结构、操作系统概念、进程管理、进程调度、进程状态、环境变量、内存管理以及其…

C语言之函数和函数库以及自己制作静态动态链接库并使用

一:函数的本质 1:C语言为什么会有函数 (1)整个程序分为多个源文件,一个文件分为多个函数,一个函数分成多个语句,这就是整个程序的组织形式。这样的组织好处在于:分化问题、、便于程序…

分布式版本控制工具 git

git 是什么 分布式版本控制工具。github 是代码托管平台。 git 有什么用 保存文件的所有修改记录。使用版本号(sha1 哈希值) 进行区分。随时可浏览历史版本记录。可还原到历史指定版本。对比不同版本的文件差异。 为什么要使用 git 多人协作开发一个大…

SQL 优化

SQL 优化是指通过各种手段提高 SQL 查询的执行效率,减少资源消耗,提高数据库的整体性能。以下是一些详细的 SQL 优化方法,包括索引优化、查询优化、数据库设计优化等。 1. 索引优化 创建适当的索引: 单列索引:在查询中频繁使用的单个列上创建索引。多列索引(复合索引):…

STM32手写超频到128M函数

今天学习了野火的STM32教程学会了如何设置STM32的时钟频率,步骤比较详细,也很容易理解,就是视频教程不能跳着看,只能一节节的看,不然会知识不连贯,造成有些知识不理解,连续着看还是没有什么难度…

docker-file 网络

docker挂载 1.绑定挂载(Bind Mounts):绑定挂载是将主机上的文件或目录挂载到容器中。 docker run -v /host/path:/container/path image_name 2.卷挂载(Volume Mounts):卷挂载将 Docker 数据卷挂载到容器中…

【CTF Web】CTFShow web4 Writeup(SQL注入+PHP+字符型注入)

web4 1 管理员阿呆又失败了&#xff0c;这次一定要堵住漏洞 解法 注意到&#xff1a; <!-- flag in id 1000 -->拦截很多种字符&#xff0c;连 select 也不给用了。 if(preg_match("/or|\-|\\\|\/|\\*|\<|\>|\!|x|hex|\(|\)|\|select/i",$id)){die(&q…

yolov8推理由avi改为mp4

修改\ultralytics-main\ultralytics\engine\predictor.py&#xff0c;即可 # Ultralytics YOLO &#x1f680;, AGPL-3.0 license """ Run prediction on images, videos, directories, globs, YouTube, webcam, streams, etc.Usage - sources:$ yolo modepred…

Android开发-Android开发中的TCP与UDP通信策略的实现

Android 开发中的 TCP 与 UDP 通信策略的实现 1. 前言2. 准备工作3. Kotlin 中 TCP 通信实现客户端代码示例&#xff1a;服务器代码示例&#xff1a; 4. Kotlin 中 UDP 通信实现客户端代码示例&#xff1a;服务器代码示例&#xff1a; 5. TCP 与 UDP 应用场景分析TCP 实现可靠传…

搭建访问阿里云百炼大模型环境

最近这波大降价&#xff0c;还有限时免费&#xff0c;还不赶快试试在线大模型&#xff1f;下面整理访问百炼平台的千问模型方法。 创建RAM子账号并授权 创建RAM子账号 1. “访问控制RAM”入口&#xff08;控制台URL&#xff09; 然后点击进入“RAM管理控制台” 2. 添加用户 …

vue 区分多环境打包

需求&#xff1a;区分不同的环境&#xff08;测试、正式环境&#xff09;&#xff0c;接口文档地址不同&#xff1b; 配置步骤&#xff1a; 1、在根目录下面新建 .env.xxx 文件&#xff08;xxx 根据环境不同配置&#xff09; 文件中一定要配置的参数项为&#xff1a;NODE_ENV…

【Python搞定车载自动化测试】——Python实现CAN总线Bootloader刷写(含Python源码)

系列文章目录 【Python搞定车载自动化测试】系列文章目录汇总 文章目录 系列文章目录&#x1f4af;&#x1f4af;&#x1f4af; 前言&#x1f4af;&#x1f4af;&#x1f4af;一、环境搭建1.软件环境2.硬件环境 二、目录结构三、源码展示1.诊断基础函数方法2.诊断业务函数方法…

python 火焰检测

在日常生活,总是离不开火,有时候我们需要预防火灾发生,但是我们又不可能一直盯着,这时候我们就需要一款程序帮我们盯着,一旦发生火灾从而告知我们,今天就带大家编写这么一款应用。 安装需要的库 pip install opencv-python 代码实现 import cv2 # Library for…

qmt量化教程4----订阅全推数据

文章链接 qmt量化教程4----订阅全推数据 (qq.com) 上次写了订阅单股数据的教程 量化教程3---miniqmt当作第三方库设置&#xff0c;提供源代码 全推就主动推送&#xff0c;当行情有变化就会触发回调函数&#xff0c;推送实时数据&#xff0c;可以理解为数据驱动类型&#xff0…