什么是Spring Web MVC

官方对Spring MVC的描述是这样的:Spring Web MVC 是基于Severlet API构建的原始Web框架,从一开始就包含在Spring框架中。它的正式名称“Spring Web MVC”来自其源模块的名称(Spring-webmvc),但它通常被称为“Spring MVC”。

什么是Servlet呢?
Servlet 是一种实现动态页面的技术. 准确来讲Servlet是⼀套 Java Web 开发的规范,或者说是⼀套 Java Web 开发的技术标准. 只有规范并不能做任何事情,必须要有人去实现它. 所谓实现 Servlet 规范,就是真正编写代码去实现 Servlet 规范提到的各种功能,包括类、⽅法、属性等.
Servlet 规范是开放的,除了 Sun 公司,其它公司也可以实现 Servlet 规范,目前常见的实现了 Servlet 规范的产品包括 Tomcat、Weblogic、Jetty、Jboss、WebSphere 等,它们都被称
为"Servlet 容器". Servlet 容器用来管理程序员编写的 Servlet 类.

从上述定义我们可以得出一个信息:Spring Web MVC是一个Web框架。我们简称为:Spring MVC 。

那么什么是MVC呢?

MVC定义

MVC是Model View Controller的缩写,它是软件工程中到的一种软件架构设计模式,它把软件系统分为模型、视图和控制器三个基本部分。

View(视图):指在应用程序中专门用来和浏览器进行交互,展示数据的资源。

Model(模型):是应用程序的主体部分,用来处理程序中数据逻辑的部分。

Controller(控制器):可以理解为分发器,用来决定对于视图发来的请求,需要用哪一个模型来处理,以及处理完后要跳转回哪一个视图。即用来连接视图和模型。

比如我们去面试

我们进到公司之后,会先有一个HR接待我们,然后HR会带我们去找这个公司对应岗位的负责人,负责人会带我们去对接和我们面试的面试官。

在这个过程中,HR就是View(视图),负责接待我们;负责人就是Controller(控制器),根据我们的情况来去对接面试官;面试官就是Model(模型),根据负责人的要求来完成面试。

什么是Spring MVC?

MVC是一种架构设计模式,也是一种思想,而Spring MVC是对MVC思想的具体实现。除此之外,Spring MVC还是一个Web框架。

总的来说,Spring MVC是一个实现了MVC模式的Web框架。所以,Spring MVC是一个实现了MVC模式的Web框架,所以,Spring MVC主要关注有两个点:1、MVC   2、Web框架。

其实,我们早在上一篇文章就已经使用过Spring MVC了,在创建Spring Boot项目是,我们勾选的Spring Web框架其实就是Spring MVC框架:

这时候,有的同学就有疑问了,前面创建的不是Spring Boot 项目吗?怎么又变成Spring MVC项目了?他们之间到底有着什么样的关系呢?

Spring Boot 只是实现Spring MVC的其中一种方式而已。Spring Boot可以添加很多的依赖,借助这些依赖实现不同的功能,Spring Boot 通过添加Spring Web MVC框架,来实现web功能。

打个比方:

Spring是火车的话,那么Spring MVC就是卖火车票这个任务,Spring Boot是123

06,Spring MVC和Spring Boot都不能脱离Spring单独存在,换句话说它们都依赖于Spring。(卖火车票这件事和12306这个程序都不能离开火车),而Spring Boot是实现Spring MVC的一种方式(卖火车票能通过12306售卖,也可以通过售票处售卖)。

不过Spring在实现MVC时,也结合自身特点,做了一些改变,相对而言,下面这个图或许更加合适一些。 

学习Spring MVC

既然是Web框架,那么当用户在浏览器中输入了url之后,我们的Spring MVC项目就可以感知到用户的请求,并给与响应。

咱们学习Spring MVC,重点也就是学习如何通过浏览器和用户程序进行交互。

主要分以下三个方面:

1、建立连接:将用户(浏览器)和Java程序连接起来,也就是访问一个地址能够调用到我们的Spring程序。

2、请求:用户请求时会带一些参数,在程序中要想办法获取到参数,所以请求这块主要是获取参数的功能。

3、响应:执行了业务逻辑之后,要把程序执行的结果放回给用户,也就是响应。

对于Spring MVC来说,掌握了以上三个功能就相当于掌握了Spring MVC。

项目准备

SPringleMVC项目创建和Spring Boot创建项目相同,在创建的时候选择Spring Web就相当于创建了Spring MVC项目。

创建项目时勾选上Spring Web模块即可,如下图所示:

 建立连接

在Spring MVC中使用@RequestMapping来实现URL路由映射,也就是浏览器连接程序的作用。

先在工作目录中,写一个RequestController类:

再添加上如下代码和注解: 

@RestController
public class RequestController {@RequestMapping("/hello")public String sayHello(){return "hello spring mvc";}
}

启动之后,访问:127.0.0.1:8080/hello ,就可以看到程序返回的数据了。

@RequestMapping注解介绍

@RequestMapping是Spring Web MVC应用程序中最常被用到的注解之一,它是用来注册接口的路由映射的。表示服务收到请求时,路径为/hello的请求就会调用sayHello这个方法的代码。

路由映射:当一个用户访问URL时,将用户的请求对应到程序某个类的某个方法的过程就叫做路由映射。

既然@RequestMapping已经可以达到我们的目的了,我们为什么还要加@RestController呢?

我们可以试着把@RestController去掉,重新启动服务器后,再访问一次。

可以看到,程序报了404(Not Found),找不到该页面,这就是@RestController起到的作用。

一个项目中,会有很多的类,每个类可能会有很多的方法,Spring怎么知道要去执行哪个方法呢?Spring会对所有的类进行扫描,如果类加了注解@RestController,Spring才会去看这个类里面的方法有没有加@RequestMapping这个注解。当然它的作用不止这一点,我们先用,后面再详细讲解。

@RequestMapping使用

@RequestMapping既可以修饰类,也可以修饰方法,当修饰类和方法时,访问的地址是类路径+方法路径。

@RequestMapping标识一个类:设置映射请求路径的初始信息。

@RequestMapping标识一个方法:设置映射请求请求路径的具体信息。

在原有代码的基础上,使用@RequestMapping修饰类。

@RequestMapping("/request")
@RestController
public class RequestController {@RequestMapping("/hello")public String sayHello(){return "hello spring mvc";}
}

刷新服务器,并访问:127.0.0.1:8080/request/hello 

@RequestMapping是GET还是POST请求

GET请求 :

浏览器发送的请求类型都是get,通过以上案例,可以看出@RequestMapping支持get请求。

我们也可以通过Fiddler抓包进行查看:

也可以得到:@RequestMapping支持get请求。

Post请求:

我们通过form表单来构造请求:在stactic目录下创建test.html。

html代码如下: 

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<form action="/request/hello" method="post"><input type="submit" value="提交">
</form>
</body>
</htm

 刷新之后,访问:标题。

点击提交的同时,使用Fiddler进行抓包。可以看到@RequestMapping是支持Post请求的。

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

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

相关文章

一个基于若依(ruoyi-vue3)的小项目部署记录

一、背景 收到朋友的求助&#xff0c;他拿到了一个项目的源代码&#xff0c;说需要我帮助部署。部署要求是需要域名访问。 因为没有文档和其他资料以及帮助&#xff0c;我先清理了源收到的资料&#xff1a; 1.后端&#xff1a;是java代码&#xff0c;一看就是若依框架。心里大大…

【实战总结】WMIC在HW行动中的4类关键应用

WMIC命令完全指南&#xff1a;网络安全运维工程师的深度实践手册 关键词&#xff1a;WMIC命令、Windows管理、网络安全运维、系统信息收集、进程分析、自动化审计 【实战总结】WMIC在HW行动中的4类关键应用 1. 前言 在Windows环境下的网络安全运维中&#xff0c;WMIC&#x…

LKT4304稳定可靠高兼容性国产安全加密芯片

随着 IOT 的飞速发展&#xff0c;智能家居&#xff0c;智能汽车&#xff0c;智能工控等物联网设备和云服务的安全问题成为IOT普及的关键障碍。在设计之初就为物联网产品配备正确的安全解决方案&#xff0c;是帮助预防措施的关键所在。LKT4304是凌科芯安专为物联网应用场景而推出…

Android 网络开发核心知识点

Android 网络开发核心知识点 一、基础网络通信 1. HTTP/HTTPS 协议 HTTP方法&#xff1a;GET、POST、PUT、DELETE等状态码&#xff1a;200(成功)、404(未找到)、500(服务器错误)等HTTPS加密&#xff1a;SSL/TLS握手过程报文结构&#xff1a;请求头/响应头、请求体/响应体 2. 网…

DVWA靶场通关笔记-弱会话IDs(Weak Session IDs Medium级别)

目录 一、Session ID 二、代码审计&#xff08;Medium级别&#xff09; 1、配置security为Medium级别 2、源码分析 &#xff08;1&#xff09;index.php &#xff08;2&#xff09;Medium.php &#xff08;3&#xff09;对比分析 &#xff08;4&#xff09;渗透思路 三…

编辑器Vim的快速入门

如大家所了解的&#xff0c;Vim是一个很古老的编辑器&#xff0c;但是并没有随着时间的流逝消失在编辑器/IDE 的竞争中&#xff0c;Vim 独创的模式机制和 hjkl 移动光标方式使得使用者在编辑文件时可以双手不离开键盘&#xff0c;极大地提升了工作效率。由于 Vim 学习曲线极为陡…

深度学习核心:从基础到前沿的全面解析

&#x1f9e0; 深度学习核心&#xff1a;从基础到前沿的全面解析 &#x1f680; 探索深度学习的核心技术栈&#xff0c;从神经网络基础到最新的Transformer架构 &#x1f4cb; 目录 &#x1f52c; 神经网络基础&#xff1a;从感知机到多层网络&#x1f5bc;️ 卷积神经网络&am…

MySQL索引:数据库的超级目录

MySQL索引&#xff1a;数据库的「超级目录」 想象你有一本1000页的百科全书&#xff0c;要快速找到某个知识点&#xff08;如“光合作用”&#xff09;&#xff1a; ❌ 无索引&#xff1a;逐页翻找 → 全表扫描&#xff08;慢&#xff01;&#xff09;✅ 有索引&#xff1a;直接…

景观桥 涵洞 城门等遮挡物对汽车安全性的影响数学建模和计算方法,需要收集那些数据

对高速公路景观桥影响行车视距的安全问题进行数学建模&#xff0c;需要将物理几何、动力学、概率统计和交通流理论结合起来。以下是分步骤的建模思路和关键模型&#xff1a;一、 核心建模目标 量化视距&#xff08;Sight Distance, SD&#xff09;&#xff1a;计算实际可用视距…

Git 用户名和邮箱配置指南:全局与项目级设置

查看全局配置 git config --global user.name # 查看全局name配置 git config --global user.email # 查看全局email配置 git config --global --list # 查看所有全局配置查看当前项目配置 git config user.name # 查看当前项目name配置 git config user.email # 查看当前项目…

视频序列和射频信号多模态融合算法Fusion-Vital解读

视频序列和射频信号多模态融合算法Fusion-Vital解读概述模型整体流程视频帧时间差分归一化TSM模块视频序列特征融合模块跨模态特征融合模块概述 最近看了Fusion-Vital的视频-射频&#xff08;RGB-RF&#xff09;融合Transformer模型。记录一下&#xff0c;对于实际项目中的多模…

frp内网穿透下创建FTP(解决FTP“服务器回应不可路由的地址。使用服务器地址替代”错误)

使用宝塔面板&#xff0c;点击FTP&#xff0c;下载Pure-FTPd插件 点击Pure-FTPd插件&#xff0c;修改配置文件&#xff0c;找到PassivePortRange, 修改ftp被动端口范围为39000 39003&#xff0c;我们只需要4个被动端口即可&#xff0c;多了不好在内网穿透frp的配置文件中增加…

STM32控制四自由度机械臂(SG90舵机)(硬件篇)(简单易复刻)

1.前期硬件准备 2s锂电池一个&#xff08;用于供电&#xff09;&#xff0c;stm32f103c8t6最小系统板一个&#xff08;主控板&#xff09;&#xff0c;两个摇杆&#xff08;用于摇杆模式&#xff09;&#xff0c;四个电位器&#xff08;用于示教器模式&#xff09;&#xff0c…

华为OD机试_2025 B卷_最差产品奖(Python,100分)(附详细解题思路)

题目描述 A公司准备对他下面的N个产品评选最差奖&#xff0c; 评选的方式是首先对每个产品进行评分&#xff0c;然后根据评分区间计算相邻几个产品中最差的产品。 评选的标准是依次找到从当前产品开始前M个产品中最差的产品&#xff0c;请给出最差产品的评分序列。 输入描述 第…

飞算JavaAI:重塑Java开发效率的智能引擎

飞算JavaAI:重塑Java开发效率的智能引擎 一、飞算JavaAI核心价值 飞算JavaAI是全球首款专注Java语言的智能开发助手,由飞算数智科技(深圳)有限公司研发。它通过AI大模型技术实现: 全流程自动化:从需求分析→软件设计→代码生成一气呵成工程级代码输出:生成包含配置类、…

Java和Go各方面对比:现代编程语言的深度分析

Java和Go各方面对比&#xff1a;现代编程语言的深度分析 引言 在当今的软件开发领域&#xff0c;选择合适的编程语言对项目的成功至关重要。Java作为一门成熟的面向对象语言&#xff0c;已经在企业级开发中占据主导地位超过25年。而Go&#xff08;Golang&#xff09;作为Google…

CloudCanal:一款企业级实时数据同步、迁移工具

CloudCanal 是一款可视化的数据同步、迁移工具&#xff0c;可以帮助企业构建高质量数据管道&#xff0c;具备实时高效、精确互联、稳定可拓展、一站式、混合部署、复杂数据转换等优点。 应用场景 CloudCanal 可以帮助企业实现以下数据应用场景&#xff1a; 数据同步&#xff…

如何发现 Redis 中的 BigKey?

如何发现 Redis 中的 BigKey&#xff1f; Redis 因其出色的性能&#xff0c;常被用作缓存、消息队列和会话存储。然而&#xff0c;在 Redis 的使用过程中&#xff0c;BigKey 是一个不容忽视的问题。BigKey 指的是存储了大量数据或包含大量成员的键。它们不仅会占用大量内存&…

Golang读取ZIP压缩包并显示Gin静态html网站

Golang读取ZIP压缩包并显示Gin静态html网站Golang读取ZIP压缩包并显示Gin静态html网站1. 读取ZIP压缩包2. 解压并保存静态文件3. 设置Gin静态文件服务基本静态文件服务使用StaticFS更精细控制单个静态文件服务4. 完整实现示例5. 高级优化内存映射优化使用Gin-Static中间件6. 部…

参数列表分类法:基本参数与扩展参数的设计模式

摘要 本文提出了我设计的一种新的函数参数设计范式——参数列表分类法&#xff0c;将传统的"单一参数列表"扩展为"多参数列表协同"模式。通过引入"基本参数列表"和"扩展参数列表"的概念&#xff0c;为复杂对象构建提供了更灵活、更具表…