当前位置: 首页 > 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;}

这个时候不传也无所谓了

相关文章:

  • 【数据挖掘】练习1:R入门
  • 自然语言处理(NLP)—— 语义关系提取
  • HTML 学习笔记(九)颜色值和长度单位
  • ThingsBoard开源物联网平台介绍
  • python3:No module named ‘pandas‘
  • LeetCode454 四数相加
  • 用Docker Compose实现负载均衡【入门篇】
  • 数据库管理-第160期 Oracle Vector DB AI-11(20240312)
  • STM32外设分类--学习笔记
  • Kotlin Retrofit 网络请求
  • Facebook:连接世界的社交巨人
  • 嵌入式、开发板 智能音响 OpenHarmony GPT 大模型 智能硬件
  • 【读论文】【精读】3D Gaussian Splatting for Real-Time Radiance Field Rendering
  • 手撸nano-gpt
  • Django——数据库
  • 收藏网友的 源程序下载网
  • ➹使用webpack配置多页面应用(MPA)
  • 07.Android之多媒体问题
  • ES6语法详解(一)
  • ESLint简单操作
  • Java 多线程编程之:notify 和 wait 用法
  • JS笔记四:作用域、变量(函数)提升
  • Shadow DOM 内部构造及如何构建独立组件
  • 百度小程序遇到的问题
  • 解析带emoji和链接的聊天系统消息
  • 蓝海存储开关机注意事项总结
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 手机端车牌号码键盘的vue组件
  • 我的zsh配置, 2019最新方案
  • 《天龙八部3D》Unity技术方案揭秘
  • scrapy中间件源码分析及常用中间件大全
  • 仓管云——企业云erp功能有哪些?
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • (AngularJS)Angular 控制器之间通信初探
  • (floyd+补集) poj 3275
  • (function(){})()的分步解析
  • (HAL库版)freeRTOS移植STMF103
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (二)Linux——Linux常用指令
  • (二)丶RabbitMQ的六大核心
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (附源码)计算机毕业设计ssm电影分享网站
  • (三)c52学习之旅-点亮LED灯
  • (十三)Flask之特殊装饰器详解
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)LINQ之路
  • (转)ObjectiveC 深浅拷贝学习
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .net/c# memcached 获取所有缓存键(keys)