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对象响应给客户。

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

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

相关文章

【Redis】五大数据类型

🎯Redis 数据类型 💭Redis支持五种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)及zset(sorted set有序集合)。 📝String(字符串) Redis的String类型是一种最基本的数据类型&…

Django核心

安装django pip install django # pip install django3.1.6创建django项目 在一个项目中可以包含多个应用程序。 django-admin startapp app_name #创建一个应用程序 django-admin startproject project_name #创建一个项目运行django项目 python manage.py runserver 80…

Fortran 中的函数与子程序

Fortran 中的函数与子程序 简介 Fortran 是不区分大小写的函数(Function): 函数是一段具有输入和输出的代码块,它接受一些输入参数,经过一系列计算后返回一个结果。 在Fortran中,函数的定义以关键字"…

LVS-DR负载群集的优势和部署实例

目录 一、DR模式数据包流向分析 二、DR模式的特点 三、DR模式中需要解决的问题 四、LVS-DR部署实例 1.配置NFS共享存储器 2.配置节点web服务(两台的配置相同) 3.配置LVS负载调度器 一、DR模式数据包流向分析 1.Client 客户端发送请求到 Director …

伪类元素content,icon变形倾斜问题

![在这里插入图片描述](https://img-blog.csdnimg.cn/b58d128a80fd4a069a5e47cf2e87e256.png 检查发现原本设置了一个 font-style 为 italic,为倾斜样式 解决办法: font-style: normal;

亿级日活业务稳如磐石 华为云发布性能测试服务CodeArts PerfTest

HDC期间可参与华为云PaaS生态抽奖活动,活动链接在文末 计算机软件作为人类逻辑智慧的伟大结晶之一,已经渗透到了人类社会的各个角落。早期的计算机发展对硬件有很强的依赖性,只有少数的个人或者机构才能拥有软件这种“奢侈品”。但随着软件行…

蓝桥杯专题-试题版含答案-【字母统计】【计算球体积】【16进制的简单运算】【C小加随机数】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 👉关于作者 专注于Android/Unity和各种游…

阿里云直播配置

一、开通阿里云直播 首先进入阿里云直播产品主页:https://www.aliyun.com/product/live 。 点击下方的“立即开通”。 如果是还未注册的用户请按照页面提示进行完成注册并实名认证。 2、首次进入会提示开通服务,点击“开通服务”,然后选择计…

【现场问题】flink-cdc,sql一直校验不通过,为什么,明明sql没有错误

flink-cdc 问题展示问题解决校验结果 问题展示 这里的flink-cdc的sql对了好几遍,都没问题,包括单个执行create,也是显示校验通过 如图: 但是多个一起就报错了: java.lang.IllegalArgumentException: only single state…

华为HCIP第一天---------RSTP

一、介绍 1、以太网交换网络中为了进行链路备份,提高网络可靠性,通常会使用冗余链路,但是这也带来了网络环路的问题。网络环路会引发广播风暴和MAC地址表震荡等问题,导致用户通信质量差,甚至通信中断。为了解决交换网…

游戏出海长期向好趋势未改,茄子科技助力企业把握出海机遇

在中国游戏出海成为更多企业的必选题之时,如何把握出海机遇,在激烈竞争中实现增长,成为中国游戏厂商的着力点。秉承着红海将至的市场发展背景,出海全球化、本地化的战略已经成为企业大势所趋,越来越多的游戏厂商开始挑…

【操作系统】c语言--使用信号量解决生产者和消费者问题

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…