Spring MVC是什么?详解它的组件、请求流程及注解

作者:Insist--

个人主页:insist--个人主页

作者会持续更新网络知识和python基础知识,期待你的关注

前言

本文将讲解Spring MVC是什么,它的优缺点与九大组件,以及它的请求流程与常用的注解。

目录

一、Spring MVC是什么?

二、Spring MVC的优缺点

1、优点

2、缺点

三、Spring MVC的九大组件

1、HandlerMapping

2、HandlerAdapter

3、HandlerExceptionResolver

4、ViewResolver

5、RequestToViewNameTranslator

6、LocaleResolver

7、ThemeResolver

8、MultipartResolver

9、FlashMapManager

四、Spring MVC请求流程

五、Spring MVC常用的注解有哪些?

1、@RequestMapping

2、@RequestBody

3、@ResponseBody


一、Spring MVC是什么?

c49d6682fabf6b211a55e0f2dcf408cb.jpeg

Spring MVC 是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的。

二、Spring MVC的优缺点

4e34b360590a4a8ea25a4a5d1c72d878.jpg

SpringMVC是一个典型的轻量级MVC框架,在整个MVC架构中充当控制器框架,相对于之前的struts2框架,SpringMVC运行更快,其注解式开发更高效灵活

1、优点

①拥有强大的模块化功能,代码可读性高;

②可以通过 POJO (Plain Ordinary Java Object,简单的Java对象)对测试数据进行简单的注入;

③可以灵活使用DI(DependencyInjection,依赖注入,或者叫控制反转);

④不同模块间是低耦合的(上面四点优点归根结底还是耦合度低)。

2、缺点

①对于新手来说,实现的难度比较大;

②学习曲线比较陡峭,即入门比较难。

三、Spring MVC的九大组件

1、HandlerMapping

根据Request找到相应的处理器。因为Handler(Controller)有两种形式,一种是基于类的Handler,另一种是基于Method的Handler(也就是我们常用的)。

2、HandlerAdapter

调用Handler的适配器。如果把Handler(Controller)当做工具的话,那么HandlerAdapter就相当于干活的工人。

3、HandlerExceptionResolver

对异常的处理。

4、ViewResolver

用来将String类型的视图名和Locale解析为View类型的视图。

5、RequestToViewNameTranslator

有的Handler(Controller)处理完后没有设置返回类型,比如是void方法,这是就需要从request中获取viewName。

6、LocaleResolver

从request中解析出Locale。Locale表示一个区域,比如zh-cn,对不同的区域的用户,显示不同的结果,这就是i18n(SpringMVC中有具体的拦截器LocaleChangeInterceptor)。

7、ThemeResolver

主题解析,这种类似于我们手机更换主题,不同的UI,css等。

8、MultipartResolver

处理上传请求,将普通的request封装成

MultipartHttpServletRequest。

9、FlashMapManager

用于管理FlashMap,FlashMap用于在redirect重定向中传递参数。

四、Spring MVC请求流程

在Web应用程序中,请求是必不可少的,每次请求由用户(客户端)发起,到用户(客户端)接收到响应结束,下图展示了一个请求在Spring MVC中所经历的每个流程:

d58f871f9f144ce48add7f0f986bd9f4.jpg

下面我将对图中的每个流程做个讲解

1、请求离开浏览器时(上图①),会带有用户所请求内容的信息,比如请求的URL和提交的表单信息。

2、然后进入到请求的第一站,即Spring的DispatcherServlet,它的任务是将请求发送给Spring MVC控制器。

3、因为在应用程序中会有多个控制器,因此DispatcherServlet会查询一个或多个处理器映射(handler mapping),处理器映射会根据请求所携带的URL来确定应该将请求发送给哪个控制器(上图②)。

4、确定好控制器后,DispatcherServlet会将请求发送给确定好的控制器,然后等待控制器处理用户提交的信息,不过一般情况下,控制器本身几乎不处理工作,而是将业务逻辑委托给一个或多个服务对象进行处理(图中的③)。

5、控制器完成业务逻辑处理后,通常会产生一些模型(Model)信息,这些信息需要返回给用户并在浏览器上显示,为了更友好的展示这些信息,比如以html形式展示,我们需要将信息发送给一个视图(View),比如JSP。

6、控制器所做的最后一件事就是将模型数据打包,并且标示出用于渲染输出的视图名。它会将请求连同模型和视图名发送回DispatcherServlet(上图④),不过控制器只会返回一个视图的逻辑名称,而不是返回具体的某个特定视图,这个逻辑名称将会用来查找产生结果的真正视图。DispatcherServlet会使用视图解析器(view resolver)来将逻辑视图名匹配为某个特定视图(上图⑤),比如JSP或者Thymeleaf。

7、请求的最后一站是视图的实现(上图⑥),在这里视图将使用模型数据渲染输出,这个输出会通过响应对象传递给用户/客户端(上图⑦)。

五、Spring MVC常用的注解有哪些?

1、@RequestMapping

用于处理请求 url 映射的注解,可用于类或方法上。用于类上,则表示类中的所有响应请求的方法都是以该地址作为父路径。

2、@RequestBody

注解实现接收http请求的json数据,将json转换为java对象。

3、@ResponseBody

注解实现将conreoller方法返回对象转化为json对象响应给客户。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

「深度学习之优化算法」(十)烟花算法

1. 烟花算法简介 (以下描述,均不是学术用语,仅供大家快乐的阅读)   烟花算法(Firework Algorithm,FWA)是一种受烟花爆炸产生火星,并继续分裂爆炸这一过程启发而得出的算法。算法的思想简单,但具体实现复杂。算法提出时间并不长,但是已经有了不少的改进研究和较为全…

网络安全(黑客)内网渗透基础知识

0x01 内网概述 内网也指局域网(Local Area Network,LAN)是指在某一区域内由多台计算机互联成的计算机组。一般是方圆几千米以内。局域网可以实现文件管理、应用软件共享、打印机共享、工作组内的历程安排、电子邮件和传真通信服务等功能。 内…

K8s集群部署最新Jenkins 2.387.1

K8s集群部署最新Jenkins 2.387.1 概述环境准备设置存储目录并启动NFS服务安装 NFS 服务端 动态创建 NFS存储(动态存储)部署jenkins服务 概述 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作…

5、架构:通用 Schema 设计

作为前端开发一定会非常熟悉 AST 抽象语法树(Abstract Syntax Tree),当浏览器加载 JS 代码时,它会首先将代码转换为一棵抽象语法树(AST),然后再根据 AST 来渲染对应的 DOM 结构,对于…

[工业互联-16]:工业Windows操作系统与实时性方案

目录 第1章 Windows操作系统 1.1 简介 1.2 Windows架构 第2章 工业Windows操作系统 2.1 简介 2.2 常见的工业Windows操作系统版本 2.3 定制化工业Windows 第3章 EtherCAT实时Windows方案 3.1 实时Windows的缘由 3.2 总体框架 3.3 ROS2方案 3.4 方案1:使…

Sumifs函数(excel)

SUMIFS 函数是一个数学与三角函数,用于计算其满足多个条件的全部参数的总量。excel如何使用Sumifs函数? 工具/原料 联想ThinkPad X1 windows7 WPS office2021 方法/步骤 首先运行office软件,打开一份表格,今天我们要计算以“…

ASL-QPSO|改进量子粒子群自适应算法及其实现(Matlab)

作者在前面的文章中介绍了量子粒子群算法,量子粒子群算法不但继承粒子群算法的优点,还有它自身计算模型更加简洁,控制参数更少等更加突出的优势,但依然存在着一定的局限性。 例如也会存在着早熟收敛的问题,随着迭代次数…

Android oss policy上传

OSS Policy方式上传 一、 流程对比1.1 普通上传1.2 服务端签名后直传 二、获取上传的policy签名配置三、请求OSS上传文件四、调用应用服务器接口同步文件五、关于上传OSS报错注意事项六、附送链接 一、 流程对比 1.1 普通上传 缺点: 上传慢:用户数据需…

OpenCloudOS社区开源,助力软件开发

早前红帽宣布限制源代码访问性的政策,并解释说RHEL相关源码仅通过CentOS Stream公开,付费客户和合作伙伴可通过Red Hat Customer Portal访问到源代码,由此也导致非客户获取源码越来越麻烦, 据了解,CentOS是红帽发行的…

设计模式之责任链模式

文章目录 1、基本介绍2、包含角色3、场景推导4、责任链模式的优缺点5、使用场景 1、基本介绍 王二狗本来是干Android开发的,最近公司想让他把IOS的活也干了,但是Windows笔记本不能开发IOS,所以二狗提出买一台Mac笔记本电脑。这花钱的事需要领…

用android studio 测试发行包

在google play 发行app,需要用bundle,而不是apk。 bundle 比apk 要小很多,比如我的app-release.aab 29,736 KB, 而app-release.apk 是62,305KB。这就是少了一半多。但是apk 直接复制就可以安装,bundle 需要上传google…

前置微小信号放大器怎么用

前置微小信号放大器是一种用于将微弱信号从传感器转换成足够强度的信号以便更好地进行检测和处理的设备。它主要应用于各种传感器领域,例如温度传感器、压力传感器、光学传感器和生物传感器等。前置微小信号放大器的作用是提高信号的信噪比,减小噪声干扰…

Java类和对象

文章目录 什么是面向对象类的语法类的实例化 类和对象的关系this引用this引用的特性类的构造方法构造方法的特性 对象初始化的流程封装访问限定符包的概念常见的包 Staticstatic修饰成员变量static修饰成员方法 代码块的概念内部类内部类的特性 什么是面向对象 面向对象是解决…

Spring Cloud Alibaba 之 Nacos精讲

🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢…

二次-InsCode Stable Diffusion 美图活动一期

模型: AbyssOrangeMix2 - SFW_Soft NSFW_AbyssOrangeMix2_sfw.safetensors 参数配置: 正:Mountains and seas, people 负:NSFW, (worst quality:2), (low quality:2), (normal quality:2), lowres, normal quality, ((monochr…

手把手教大家实现 npm 包,并发布 npm 仓库,搭建文档(二)

昨天写了第一篇文章,反响平平 一个 NPM 包,帮助数十万程序员提高数十倍效率,难道不开源出来?(一) 首先贴下我们的官网 【预览页】 https://kennana.github.io/toolkit-use/ 我们的推特 【toolkituse】 https://twitter.com/Toolkituse 我们的github 【toolkit-u…

【人工智能与机器学习】基于卷积神经网络CNN的猫狗识别

文章目录 1 引言2 卷积神经网络概述2.1 卷积神经网络的背景介绍2.2 CNN的网络结构2.2.1 卷积层2.2.2 激活函数2.2.3 池化层2.2.4 全连接层 2.3 CNN的训练过程图解2.4 CNN的基本特征2.4.1 局部感知(Local Connectivity)2.4.2 参数共享(Parameter Sharing)…

Django_类视图(五)

目录 类视图优点 使用方法 定义类视图 添加类视图路由 类视图原理 类视图的二次封装 类视图二次封装代码如下 编写视图 配置路由 访问url结果 源码等资料获取方法 类视图优点 使用django的函数视图,如果要让同一个视图实现不同的请求方式实现不同的逻辑…

unity3d 入门1

新建一个3D core项目; 自动新建一个示例场景,仅包含2个对象,一个主摄像机,一个方向光;在Hierarchy层次视图中看到如下;场景使用一个小立方体来表示,下面的对象也使用一个小立方体 表示&#xf…

dedecms后台数据库备份迁移流程

dedecms网站正常使用需要两部分,网站文件和数据库.两者缺一不可. dedecms上传网站文件后,还要导入数据库,如果您只有网站后台备份,没有其他格式sql备份文件,请按照下面流程重装dedecms,并操作恢复数据库 . 需要选确定/wwwroot/data/backupdata/下是否有对应备份 如不存在备份…