当前位置: 首页 > news >正文

初识Spring MVC

什么是Spring MVC?

官方给的解释是

Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的 正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为"Spring MVC"
注:Severlet是一个java web开发的规范

MVC定义

MVC 是 Model View Controller 的缩写,它是软件⼯程中的⼀种软件架构设计模式,它把软件系统分为模型,视图和控制器三个基本部分
假设我们打开一个有道搜索网页,这就处于view,这时候我们输入hello点击搜索,这里就由controller收到请求信息,他就像一个领导,最后指派给model来真正执行翻译逻辑,执行完之后将返回的页面还是继续发送给controller,再交给view呈现在我们的面前

Spring MVC 

Spring MVC也是对MVC这种思想的一种实现,也是一个web框架

注:Spring Boot其实就是Spring MVC的一种方式

我们学习Spring MVC,主要就是使用浏览器进行交互

主要分为三个方面

1.建立连接

2.发送请求

3.接收响应

项目准备:创建一个Spring项目,并且勾选web选项

勾选这个选项即可,这里不做过多介绍

我们可以先来个Hello world

在你创建名字的目录下创建一个请求类(随便创建即可)

@RestController
public class RequestController {@RequestMapping("/a")public String hello() {return "Hello SpringMVC";}

我们使用一个RestController注解,这个注解告诉MVC,我们这个控制器所有方法都返回数据而不是视图名称,我们可以暂且理解为有了这个注解Spring才会去看去执行哪个类中的方法,如果不加这个注解直接报404错误

我们运行程序之后访问

http://127.0.0.1:8080/a就可以看到 Hello SpringMVC了

注:这里如果控制台出现8080端口被占用问题可以使用cmd来查看谁在使用端口,然后打开任务管理器查询进程号将其关闭即可

netstat -ano|findstr 8080

下面我们将不使用浏览器,使用postman来进行请求和响应

Download Postman | Get Started for Free 可以在这里下载postman

这个工具可以快速帮助我们创建http请求一个接收请求

接收参数

@RestController
public class RequestController {@RequestMapping("/a")public String hello() {return "Hello SpringMVC";}@RequestMapping("/r1")public String r1(String s1) {return "收到参数 s1="+s1;}@RequestMapping("/r2")public String r2(Integer id) {return "收到参数 id="+id;}@RequestMapping("/r3")public String r3(int id) {return "收到参数 id="+id;}@RequestMapping("/r4")public String r4(String name,int id) {return "收到参数 id="+id+",name="+name;}@RequestMapping("/r5")public String r5(Person person) {return person.toString();}

我们不光可以进行一个参数的传递,也可以进行多个参数的传递

注:这里的函数参数名一定要和我们访问的url保持一致

假设这里我们不传入参数,这里的打印就会变为id=null默认值

但是不能传入与类型不符合的数据,比如Integer类传入字符a等,会出现400的报错

注:引用数据类型和基本数据类型不同,基本类型不传参就会报错

也可以传入对象

public class Person {private int id;private String name;private int age;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Person{" +"id=" + id +", name='" + name + '\'' +", age=" + age +'}';}
}

这里的r5我们就使用对象传入

注:这里对象传入会有默认的初始化值,不传数据也会有,不会出现报错

@RequestParam() 重命名注解,里面参数表示对这个参数进行重命名,默认是必填选项,不填的话会报400错误,也可以设置可以不填的选项,将required设置为false即可,这也是为了在后端开发的时候避免几个参数类似不好判断

@RequestMapping("/r6")public String r6(@RequestParam("usrName") String name, int id) {return "收到参数 id="+id+",name="+name;}

注:这里使用原来的名字就不行,不填也会报错

    @RequestMapping("/r6")public String r6(@RequestParam(value="usrName",required = false) String name, int id) {return "收到参数 id="+id+",name="+name;}

这个时候不传也无所谓了

相关文章:

初识Spring MVC

什么是Spring MVC? 官方给的解释是 Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的 正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为"Spring MVC" 注:Severlet是…...

云原生之容器编排实践-ruoyi-cloud项目部署到K8S:Nginx1.25.3

背景 前面搭建好了 Kubernetes 集群与私有镜像仓库,终于要进入服务编排的实践环节了。本系列拿 ruoyi-cloud 项目进行练手,按照 MySQL , Nacos , Redis , Nginx , Gateway , Auth ,…...

PHP立体安全攻击向量:保护应用程序的关键挑战

PHP立体安全攻击向量:保护应用程序的关键挑战 PHP作为一种广泛使用的服务器端脚本语言,拥有庞大的用户群体和丰富的生态系统。然而,随着互联网的发展,网络安全问题也变得愈发严重。本文将深入探讨PHP的立体安全攻击向量&#xff0…...

【功能大全】手机短信验证码一键注册登录流程

目录 发送验证码 注册登录 用户表设计 ​编辑申请腾讯云短信与密钥 找到云短信服务 开通腾讯云短信服务 ​编辑​​​​​创建短信签名 ​编辑​编辑创建短信正文模版​编辑​编辑 等待审核 测试短信​编辑 SDK密钥创建 SpringBoot集成腾讯云短信 pom中导入腾讯云短…...

【Python】【Matplotlib】深入解析plt.grid()---原理、应用与注意事项

【Python】【Matplotlib】深入解析plt.grid()—原理、应用、源码与注意事项 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f4…...

数据库规范化设计案例解析

1.介绍 数据库规范化设计是数据库设计的一种重要方法,旨在减少数据库中的冗余数据,提高数据的一致性,确保数据依赖合理,从而提高数据库的结构清晰度和维护效率。规范化设计通过应用一系列的规范化规则(或称“范式”&a…...

服务器段的连接端口和监听端口编程实现

new ServerSocket(int)是开启监听端口,并不是连接端口。真正的连接端口是随机开辟的空闲端口,当连接创建完成后,监听关口可以继续等待下一次连接请求,处于空闲等待状态。 编程实现方式 1 、主线程一直处于阻塞等待状态&#xff0c…...

用“定时执行专家”武装你的电脑,做时间管理大师!

简介 你是否厌倦了重复繁琐的电脑操作?你是否希望能够解放双手,提高工作效率?“定时执行专家”是一款功能强大的定时任务执行软件,可以帮你轻松实现自动化办公,让你成为时间管理大师! 软件功能 支持25种任…...

css3实现3D立方体旋转特效源码

源码介绍 CSS3自动旋转正方体3D特效是一款基于css3 keyframes属性制作的图片相册自动旋转立方体特效 效果展示 下载地址 css3实现3D立方体旋转特效代码...

计算器系统基础知识-校验码

1.奇偶校验码 通过在编码中增加一位奇数校验位来使编码中1的个数为奇数(奇校验)或者为偶数(偶校验),从而使码距变为2。   常见的奇偶校验码有三种:水平奇偶校验码、垂直奇偶校验码和水平垂直校验码。   以下是奇偶校验码的示例: public …...

springboot换日志框架后爆SLF4J: Class path contains multiple SLF4J bindings的解决办法

sringboot原本使用的是logback日志框架,将它去掉,修改为log4j2日志框架后,往往会出现以下错误: SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/C:/Users/admin/.m2/repository/ch/qos…...

k8s+zabbix

一,环境: 1),k8s部署,master和node节点都部署成功 二,部署: 1),安装python3(资源中有) wget https://www.python.org/ftp/python/3.7.4/Python-…...

k8s-生产级的k8s高可用(2) 25

部署containerd k8s2、k8s3、k8s4在配置前需要重置节点(reset)在上一章已完成 禁用所有节点docker和cri-docker服务 所有节点清除iptables规则 重置后全部节点重启 由于之前部署过docker,因此containerd默认已安装 修改配置 启动containe…...

ubuntu20.04 创建ros环境、创建rospackage

roswiki教程:https://wiki.ros.org/cn/ROS/Tutorials 环境准备 安装ros环境 这里选择noetic版本的ros,安装步骤参考:https://zhuanlan.zhihu.com/p/662284005 创建工作空间 这里我在用户目录下创建catkin的工作目录catkin_ws &#xff0…...

QT进阶---------pro项目文件中的常用命令 (第三天)

1、命令一 决定exe可执行程序的生成路径CONFIG 作用:不使用默认路径,方便移植 CONFIG(debug, debug|release) {DESTDIR $$_PRO_FILE_PWD_/../../../debugXXXsystem } else {DESTDIR $$_PRO_FILE_PWD_/../../../realeaseXXXsystem } 是用于 Qt 项目…...

php常用设计模式应用场景及示例

单例模式 含义描述 应用程序中最多只有该类的一个实例存在 应用场景 常应用于数据库类设计,采用单例模式,只连接一次数据库,防止打开多个数据库连接。 代码示例 class Singleton {private static $instance; // 定义一个私有的静态变量保存…...

浏览器与服务器通信过程(HTTP协议)

目录 1 概念 2 常见的 web 服务器有 3 浏览器与服务器通信过程 3.1 DNS 3.2 URL 4 HTTP请求方法和应答状态码 4.1 HTTP请求报文段实例 4.2 HTTP请求方法 5 HTTP应答报头和应答状态 5.1 HTTP的应答报头结构 5.2 HTTP的应答状态 1 概念 浏览器与 web 服务器在应用层通…...

Pytorch搭建AlexNet 预测实现

1.导包 import torch import matplotlib.pyplot as plt import json from model import AlexNet from PIL import Image from torchvision import transforms 2.数据预处理 data_transform transforms.Compose([transforms.Resize((224, 224)), # 将图片重新裁剪transform…...

笔记:使用parfile进行的数据导入导出

expdp ‘username/password’ parfileE:\dmp_tmp\par.txt DIRECTORYdmptmp LOGFILESYS_SEND_LOG.log DUMPFILESYS_SEND_LOG.dmp tablesSYS_SEND_LOG_BAK query“where send_dt>TO_DATE(‘2024-03-13’,‘yyyy-mm-dd’)” impdp ‘username/password’ directorydmptmp dum…...

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的行人跌倒检测系统(深度学习+UI界面+完整训练数据集)

摘要:开发行人跌倒检测系统在确保老年人安全方面扮演着至关重要的角色。本篇文章详尽地阐述了如何利用深度学习技术构建一个行人跌倒检测系统,并附上了完整的代码实现。该系统采用了先进的YOLOv8算法,并对YOLOv7、YOLOv6、YOLOv5等先前版本进…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

STM32HAL库USART源代码解析及应用

STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...

为什么要创建 Vue 实例

核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...