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

SpringMVC——基础知识

基本概念

SpringMVC是基于servlet api构造的原始web框架,全称是Spring Web MVC

而MVC的全称是Model View Controller,翻译成中文分别是“模型”,“视图”,“控制器”,这是一种软件的架构模式

  • Model:用来处理应用程序的数据逻辑部分,在数据库中存取数据
  • View:应用程序中处理数据的显示
  • Controller:处理用户的交互部分,从view获取数据,向model发送数据

也就是说,当用户向Controller发送HTTP请求时,Controller会调用相关的方法,将数据传输给Model。,然后Model根据数据库中的数据返回给Controller数据,Controller调用相关的方法,将数据传输给View,View将数据组织成好看的页面,返回给用户

而SpringMVC,就是基于上面这种设计模式的一种实现方式,用户在浏览器中输入url,程序就可以获取用户的需求

程序建立

在之前的博客中,我们创建的SpringBoot项目,事实上就包含SpringMVC,之前引入的Spring Web框架就是SpringMVC

具体创建过程请参考之前的博客:SpringBoot的配置与使用

创建程序与连接浏览器

创建一个TestController类,实现连接浏览器

@Controller
@ResponseBody
@RequestMapping("/test")
public class TestController {@RequestMapping("/hi")public String sayHi(String name){return "hi " + name;}
}

其中这几个注解分别有如下的含义:

  • @Controller:使Spring程序启动时,,加载这个类
  • @ResponseBody:返回的是数据而不是页面
  • @RequestMapping(url路径):注册url,可以修饰类和方法

其中,我们可以使用@RestController来代替@ResponseBody和@Controller

这样,就可以在下面这个网址下获取页面

http://127.0.0.1:8080/test/hi

在这里插入图片描述
在url中传输name的值,即可在页面上显示出来
在这里插入图片描述
使用PostMan可以发现,@RequestMapping既支持GET请求,也支持POST请求
在这里插入图片描述
在这里插入图片描述
可以给@RequestMapping中添加参数,使其只接收特定的访问方法

@RequestMapping(value = "url路由",method = 访问方法)

例如:

@RestController
@RequestMapping("/test")
public class TestController {@RequestMapping(value = "/hi" , method = RequestMethod.POST)public String sayHi(String name){return "hi " + name;}
}

这时使用GET方法访问就会报错
在这里插入图片描述

还可以直接使用下面这两个注解,直接指定访问方法

@GetMapping(url路由)
@PostMapping(url路由)

获取参数

刚才的name演示了如何用方法中的参数来传参,需要注意的是,一般数据类型需要使用包装类进行传参,这样的话如果该参数前端没有传递的话显示null
例如:

@GetMapping("/num")
public String getNum(Integer num){return "num = " + num;
}

在这里插入图片描述

如果不使用包装类,那么会造成页面直接报错

@GetMapping("/num")
public String getNum(int num){return "num = " + num;
}

在这里插入图片描述

获取对象

刚才的name演示了如何用方法中的参数来传参,传递对象也是类似的方法

先创建一个User类

@Data
public class User {private int id;private String name;private int age;
}

然后在方法的参数中直接传递该对象

@RequestMapping("/show-user")
public String getUser(User user){return user.toString();
}

就可以传递对象中的所有参数了
在这里插入图片描述
当需要传输的参数过多,就可以使用传输对象的方式,避免代码的臃肿

参数重命名

如果前端传输的key值我们觉得不符合代码的规范,或者不好听,那么可以使用@RequestParam进行参数重命名

@RequestParam(前端命名) 后端重命名 

例如,前端将开始时间命名为t1,结束时间命名为t2,我们后端可以这样重命名

@RequestMapping("/show-time")
public String showTime(@RequestParam(value = "t1") String startTime,@RequestParam("t2") String endTime){return "开始时间: " + startTime + " | 结束时间:" + endTime;
}

在这里插入图片描述
当使用了@RequestParam注解后,这个参数就是必须传输的了,如果不传输就会报错
此时可以给@RequestParam中添加参数来避免这种情况

@RequestParam(required = false) 参数

获取JSON对象

使用@RequestBody可以接收JSON格式的对象

例如:

@RequestMapping("/show-json-user")
public String showJSONUser(@RequestBody User user){return user.toString();
}

在这里插入图片描述

http://www.lryc.cn/news/11191.html

相关文章:

  • 论文浅尝 | SpCQL: 一个自然语言转换Cypher的语义解析数据集
  • MongoDB 使用规范与限制及最佳实践
  • 第五十六章 树状数组(一)
  • kubernetes教程 --Pod控制器详解
  • N2750A Agilent Keysight HP 差分探头1.5GHz
  • 一文搞懂Linux内核进程CPU调度基本原理
  • java ssm爱宠宠物医院挂号预约系统管理系统设计与实现
  • 自动化测试工具_Jmeter
  • 不是所有人都适合职场
  • JSP 和 JSTL
  • 数据分析| Pandas200道练习题,使用Pandas连接MySQL数据库
  • 【Node.js】全局可用变量、函数和对象
  • package.json 开发依赖与运行时依赖
  • 关于最短路径算法中边的权值的思考
  • LVGL开发教程:二、ESP-IDF 使用CmakeList管理自己的文件以及文件夹
  • 与感受野相关的几种网络结构
  • day19_抽象类丶接口
  • 【网安神器篇】——系统指纹探测工具finger
  • Prometheus离线tar包安装
  • PostgreSQL查询引擎——SELECT STATEMENTS SelectStmt
  • 零信任-易安联零信任介绍(11)
  • C++ STL——map和set的使用
  • 【Python】thread使用
  • 计网传输层协议:UDP和TCP
  • 一文讲明TCP网络编程、Socket套接字的讲解使用、网络编程案例
  • Java中print和println的区别
  • RocketMq使用规范(纯技术和实战建议)
  • matlab离散系统仿真分析——电机
  • 一文学会进程控制
  • 5.2 BGP水平分割