详解 Spring MVC(Spring MVC 简介)

news2024/9/21 0:39:01

什么是 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.coloradmin.cn/o/1693818.html

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

相关文章

26计算机操作系统408考研-操作系统进程与线程篇章(三)

操作系统进程与线程篇章 ` 文章目录 操作系统进程与线程篇章前言一、进程概念进程控制块进程创建进程终止进程的阻塞和唤醒进程唤醒进程挂起和激活线程多线程线程实现与线程模型总结互斥和同步并发原理硬件同步信号量机制信号量的应用管程经典同步问题消息传递前言 一、进程概…

Qt 科目一考试系统(有源码)

项目源码和资源:科目一考试系统: qt实现科目一考试系统 一.项目概述 该项目是一个基于Qt框架开发的在线考试系统,主要实现了考试题目的随机抽取、考试时间限制、成绩统计等功能。用户可以通过界面操作进行考试,并查看自己的考试成绩。 二.技…

清理安卓手机广告

保存脚本另存为 Fuck_AD.sh,在手机执行后体验效果。 echo ""echo " " echo " - 开始执行清理广告库文件" sleep 3files(/data/app/*/*/lib/arm64/libpangleflipped.so/data/app/*/*/lib/arm64/libzeus_direct_dex.so/data/app/*/*/l…

力扣--哈希表13.罗马数字转整数

首先我们可以知道,一个整数,最多由2个罗马数字组成。 思路分析 这个方法能够正确将罗马数字转换为阿拉伯数字的原因在于它遵循了罗马数字的规则,并且对这些规则进行了正确的编码和处理。 罗马数字规则 罗马数字由以下字符组成&#xff1a…

第八届能源、环境与材料科学国际学术会议(EEMS 2024)

文章目录 一、重要信息二、大会简介三、委员会四、征稿主题五、论文出版六、会议议程七、出版信息八、征稿编辑 一、重要信息 会议官网:http://ic-eems.com主办方:常州大学大会时间:2024年06月7-9日大会地点:新加坡 Holiday Inn …

langchian进阶二:LCEL表达式,轻松进行chain的组装

LangChain表达式语言-LCEL,是一种声明式的方式,可以轻松地将链条组合在一起。 你会在这些情况下使用到LCEL表达式: 流式支持 当你用LCEL构建你的链时,你可以得到最佳的首次到令牌的时间(输出的第一块内容出来之前的时间)。对于一些链&#…

C语言.数据结构.顺序表

1.顺序表的概念及结构 1.1线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串… 线性表在逻辑上是线性结构,…

创建FreeRTOS工程

创建STM32CubeMX工程 配置时钟 配置FreeRTOS 生成Keil MDK的工程 打开工程 结尾 这就是我们用STM32CubeMX创建的最基本的一个FreeRTOS的工程。可以看到,这个与我们使用stm32开发的裸机程序有相同的地方,也有不同的地方,我们可以发现&am…

Redis 哨兵机制的工作原理——Java全栈知识(22)

Redis 哨兵机制的工作原理 在之前的文章我们讲到了 Redis 的三种集群架构:跳转文章:Redis集群模式 接下来我们详细讲哨兵机制的作用以及实现原理 以下是 Redis 哨兵的结构图 1、Redis 哨兵的作用 哨兵的作用如下: 1、监控,2、…

Mysql基础(七)DQL之select 语句(二)

一 select 语句续 WHERE子句后面跟着的是一个或多个条件,用于指定需要检索的行COUNT(): 多少条数据 where 11 和 count(1) 与 count(*) count(1)、count(*)和count(指定字段)之间的区别 ① order by 排序 mysql 之数据排序扩展 1、使用 order by 语句来实现排序2、排序可…

数据迁移利器登场!Elasticdumpv6.110震撼发布,助你轻松搬迁大数据!

简介 Elasticdump 是一个用于导出和导入 Elasticsearch 数据的工具。它能够从一个 Elasticsearch 集群读取数据并写入到另一个 Elasticsearch 集群、文件系统或其他数据存储(例如 S3)。这个工具非常有用,特别是在进行数据迁移、备份和恢复操作…

# AI产品经理的自我修养:既懂用户,更懂技术!

今天上班的时候,发现很多AI社群都在讨论一篇播客《一个顶级AI产品经理的自我修养,对谈光年之外产品负责人Hidecloud》,这篇播客的嘉宾是光年之外的产品负责人——Hidecloud(张涛),聊了许多关于他在做AI产品…

ubuntu20.04 安装系统后-开机黑屏-nvidia显卡驱动没问题_thinkpad-intel-13700H

文章目录 硬件现象原因&解决 硬件 thinkpad p1 gen6笔记本, intel 13代cpu 13700H,nvidia rtx 2000 Ada laptop gpu 13700H应该是有集显的,但可能没装集显驱动or由于Bios设置的缘故,我的win任务管理器只能看到一个gpu(gpu0)&#xff1…

Spring Boot 01:Spring Boot 项目的两种创建方式

一、前言 记录时间 [2024-05-25] 本文讲述 Spring Boot 项目的两种创建方式,分别是 IDEA 和官网。 由 Spring 官网知,当前 Spring Boot 的最新版本为 3.3.0,需要最低 JDK 版本为 17。 Spring 官网项目创建地址JDK 17 版本下载地址 准备工作…

【Linux网络】端口及UDP协议

文章目录 1.再看四层2.端口号2.1引入linux端口号和进程pid的区别端口号是如何生成的传输层有了pid还设置端口号端口号划分 2.2问题2.3netstat 3.UDP协议3.0每学一个协议 都要讨论一下问题3.1UDP协议3.2谈udp/tcp实际上是在讨论什么? 1.再看四层 2.端口号 端口号(Po…

《计算机网络微课堂》1-6 计算机体系结构

常见的计算机网络体系结构 从本节课开始,我们要用 4 次课的时间来介绍有关计算机网络体系结构的知识,具体包含以下内容: 一,常见的计算机网络体系结构二,计算机网络体系结构分层的必要性三,计算机网络体系…

MPLS LDP原理与配置

1.LDP基本概念 (1)LDP协议概述 (2)LDP会话、LDP邻接体、LDP对等体 (3)LSR ID 与LDP ID (4)LDP消息 ⦁ 按照消息的功能,LDP消息一共可以分为四大类型:发现…

【UE数字孪生学习笔记】 使用DataSmith对模型快速导入 UE5.3.2使用unreal DataSmith文件

声明:部分内容来自于b站,慕课,公开课等的课件,仅供学习使用。如有问题,请联系删除。 部分内容来自UE官方文档,博客等 UE5.3.2使用 3D Max 导出的unreal DataSmith文件 1. 去UE官网下载DataSmith导出器并导…

QAnything 1.4.1 中的文档解析

2024年初我们开源了QAnything,一个基于检索增强生成式应用(RAG)的本地知识库问答系统。对于本地知识库,QAnything支持多种格式的文档输入,允许用户上传包括PDF、图片、Word、PowerPoint、Excel、TXT,甚至音…

默认路由实现两个网段互通实验

默认路由实现两个网段互通实验 **默认路由:**是一种特殊的静态路由,当路由表中与数据包目的地址没有匹配的表项时,数据包将根据默认路由条目进行转发。默认路由在某些时候是非常有效的,例如在末梢网络中,默认路由可以…