SpringMVC程序开发

news/2024/5/21 2:44:59

1.什么是Spring MVC?

Spring Web MVC是基于Servlet API构建的原始的Web框架,从一开始是就包含在Spring框架中。它的正式名称“Spring Web MVC"来自其源模板的名称(Spring-webmvc),但通常被称为“Spring MVC"

从上述的定义我们可以得到两个关键的信息:

  1. Spring MVC是一个Web框架
  2. Spring MVC是基于Servlet API搭建的
  3. Spring MVC一开始就包含在Spring框架中

1.1MVC定义

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

  •  Model:是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责负责在数据库中存取数据。
  • View:是应用程序中处理数据显示的部分。通常视图时依据模数据矿建的。
  • Controller:是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

2.为什么要学Spring MVC?

现在绝大多数项目是基于Spring(或Spring Boot)的,而Spring的核心是Spring MVC.Spirng MVC是Spring框架的核心模块,而Spring Boot是Spring的脚手架。

3.怎么学Spring MVC?

  1. 链接的功能:将用户(浏览器)和Java程序连接起来,也就是访问一个地址能够调用到我们的Spring程序
  2. 获取参数的功能:用户访问的时候会带有一些阐述,我们在程序中想办法获取这些参数。
  3. 输出数据的功能:执行了业务逻辑以后,要把程序执行的结果返回给用户。

我们需要掌握以上三个功能。

3.1Spring MVC创建和连接

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

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

3.1.1创建Spring MVC项目

Spring MVC可以基于Spring Boot创建,也就是创建一个Spring Boot项目,勾选Spring Web即可。

我们创建一个UserController类,实现用户到Spring程序的互联网互通,具体实现代码如下:

@Controller //让Spring框架启动
@ResponseBody //返回非页面数据
@RequestMapping("/user") //路由器规则注册
public class UserController {//路由器规则注册@RequestMapping("/hi")public String sayHi() {return "<h1>你好,SpringBoot</h1>";}
}

 3.1.2@RequestMapping注解介绍

@RequestMapping时Spring Web应用程序中最常被用到的注解之一,它是被用来注册接口的路由映射的。

从3.1.1的代码中可以看出@RequestMapping既可以修饰类,也可以修饰方法,当修饰类和方法时,访问的地址是类+方法

3.1.3@RequestMapping是post还是get请求

我们使用PostMan来测试以下@RequestMapping是post请求还是get请求

 我们发现不管是post还是get都是可以的

指定get/post方法类型

我们可以显示的指定@RequestMapping来接收Post的情况,如下所示:

@Controller //让Spring框架启动
@ResponseBody //返回非页面数据
@RequestMapping("/user") //路由器规则注册
public class UserController {//路由器规则注册//@RequestMapping("/hi")//指定响应的方法@RequestMapping(value = "/hi", method = RequestMethod.GET)public String sayHi() {return "<h1>你好,SpringBoot</h1>";}
}

此时我们只能用get方法访问得到

3.1.4@GetMapping和@PostMapping

get请求的三种写法:

//写法一
@RequestMapping("/index")//写法二
@RequestMapping(value = "/index", mextod = RequestMethod.GET)@写法三
@GetMapping("/index")

post的三种写法:

//写法一
@RequestMapping("/index")//写法二
@RequestMapping(value = "/index", method = RequestMethod.POST)//写法三
@PostMapping("/index")

3.2获取参数

3.2.1获取单个参数

在Spring MVC中可以直接用方法中参数来实现传参,比如以下代码:

    @RequestMapping("/getone")public String getOne(String name) {return "获取的参数为:" + name;}

 多个参数的获取也是相同的方法,我们只要保持参数名字和传过来的键名字相同即可。

3.2.2传递对象

我们在Spring MVC中可以自动实现参数对象的赋值,

package com.example.demo.model;import lombok.Data;/*** Describe:* User:lenovo* Date:2023-07-26* Time:11:15*/
@Data
public class Person {private int id;private String name;private String password;
}
@RequestMapping("/getobject")public String getObject(Person person) {return person.toString();}

 URL传递的参数会自动与对象中的属性相匹配,进行自动的赋值

3.2.3后端参数重命名

在一些特殊的情况下,前端传递的参数key和我们接收key名称可能不一样,比如前端使用的id,但是在后端的代码中使用名称为uid,这样就会出现参数接收不到的情况,我们可以使用RequestParam来重命名前后端参数

后端代码如下:

    @RequestMapping("/m4")public String method4(@RequestParam("time") String createtime) {return createtime;}

 我们尝试不传这个参数试试

 我们查看@RequestParam注解的具体实现细节:

 这一行代码,表示我们必须传递这个参数,我们也可以将它设置为false来改变。具体代码如下:

    @RequestMapping("/m4")public String method4(@RequestParam(value = "time", required = false) String createtime) {return createtime;}

 3.2.4@RequestBody接收JSON对象

 后端接收代码:

    @RequestMapping(value = "/m5", method = RequestMethod.POST)public String method_5(@RequestBody Person person) {return person.toString();}

 3.2.5获取URL中参数@PathVariable

 我们发现传递参数有的网站不是使用 ?:key=value 的方式,而是像上图一样,是在URL后面加上/...的形式我们要怎么获取参数呢?

    @PostMapping("m6/{name}/{password}")public String method6(@PathVariable String name, @PathVariable String password) {return name + ", " + password;}

3.2.6上传文件@RequestPart

    @PostMapping("/param9")public String param9(String name, @RequestPart("myfile") MultipartFile file) throws IOException {//文件名String fileName = UUID.randomUUID().toString().replace("-", "");//获取文件的后缀名fileName += name;fileName += file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));//文件保存路径String filePath = "E:\\image\\" + fileName;//保存文件file.transferTo(new File(filePath));return filePath + "上传成功";}

 

 3.2.7获取Cookie/Session/header

简介的获取Cookie——@CookieValue

    @RequestMapping("/cookie")public String cookie(@CookieValue("name") String name) {return "cookie: " + name;}

 简介获取Header——@RequestHeader

@RequestMapping("/header")public String header(@RequestHeader("User-Agent") String userAgent) {return userAgent;}

 简介获取session

    @RequestMapping("session")public String session(@SessionAttribute(value = "username", required = false) String userName) {if(userName == null) {userName = "zhangsan";}return userName;}

 


http://www.mrgr.cn/p/11183468

相关文章

建木使用进阶-创建密钥管理

阿丹&#xff1a; 第一次我们进入建木&#xff0c;第一件事情就是配置我们相关的密钥。 解读&#xff1a; 在建木中我们可以进行创建密钥来对我们服务器等密码进行方便的管理。 注意&#xff1a; 登录的时候账号为&#xff1a;admin 密码为&#xff1a;123456 这是初始…

浅谈 Spring AOP 思想

Spring AOP AOP 切面编程普通代理类JDK动态代理Cglib动态代理AOPAOP术语AOP切面编程的优势Advice通知类型&#xff08;5种&#xff09;通知的执行顺序 Order切入点表达式表达式execution注解annotation Spring事务管理Transactional 及 Transactional 的两个属性Transactional …

TCP三次握手和四次挥手以及11种状态(一)

1、三次握手 置位概念&#xff1a;根据TCP的包头字段&#xff0c;存在3个重要的标识ACK、SYN、FIN ACK&#xff1a;表示验证字段 SYN&#xff1a;位数置1&#xff0c;表示建立TCP连接 FIN&#xff1a;位数置1&#xff0c;表示断开TCP连接 三次握手过程说明&#xff1a; 1、…

【JavaEE】博客系统前后端交互

目录 一、准备工作 二、数据库的表设计 三、封装JDBC数据库操作 1、创建数据表对应的实体类 2、封装增删改查操作 四、前后端交互逻辑的实现 1、博客列表页 1.1、展示博客列表 1.2、博客详情页 1.3、登录页面 1.4、强制要求用户登录&#xff0c;检查用户的登录状态 …

生产者消费者模型——条件变量与信号量

文章目录 模型条件变量信号量&#xff08;信号灯&#xff09;应用伪代码 模型 生产者、消费者用线程 容器用链表 条件变量 条件变量不是锁&#xff0c;可以控制线程阻塞与否&#xff0c;可以配合锁使用。 注意&#xff1a;当pthread_cond_wait(&cond, &mutex)使用时&…

【Git】远程仓库的创建、SSH协议克隆、拉取、推送

目录 一、创建远程仓库 二、HTTPS协议克隆仓库 三、SSH协议克隆仓库 四、向远程仓库推送 五、从远程仓库拉取 六、忽略特殊文件 七、配置命令别名 一、创建远程仓库 首先我们可以从GitHub或者Gitee中创建自己的个人仓库 工作台 - Gitee.comhttps://gitee.com/ 二、HTT…

大数据Flink(五十一):Flink的引入和Flink的简介

文章目录 Flink的引入和Flink的简介 一、Flink的引入 1、第1代——Hadoop MapReduce

Inpaint Anything: 自动化抹除视频元素

自动化抹除视频元素 不用逐帧抠图&#xff0c;直接SAM Tracking Video Inpainting就能实现自动化抹除奔跑吧idol。 https://github.com/geekyutao/Inpaint-Anything 目录 网站演示参考文献 网站 https://huggingface.co/spaces/InpaintAI/Inpaint-Anything 演示 原理就是&a…

一个简单的yapi工具-medmotion_cli

medmotion_cli medmotion_cli 最近在使用yapi时发现了一个小工具&#xff0c;可以快速生成ts类型定义&#xff0c;js接口定义 配合上自己写的工具&#xff0c;可以快速生成如下(写admin的小伙伴可能比较熟悉) 安装 sudo npm install medmotion_cli -g使用 medmotion_cli…

AWS / VPC 云流量监控

由于安全性、数据现代化、增长、灵活性和成本等原因促使更多企业迁移到云&#xff0c;将数据存储在本地的组织正在使用云来存储其重要数据。亚马逊网络服务&#xff08;AWS&#xff09;仍然是最受追捧和需求的服务之一&#xff0c;而亚马逊虚拟私有云&#xff08;VPC&#xff0…

文本怎么用手机生成二维码?二维码在线文本码制作技巧

现在二维码可以展示的内容越来越丰富&#xff0c;比如文本就是很常见的一种形式。编辑好文本内容之后&#xff0c;将文字内容添加到二维码中&#xff0c;其他人扫码就可以获取到文字内容&#xff0c;那么文本二维码该如何制作呢&#xff1f;想要制作二维码&#xff0c;那么可以…

html5播放器视频切换和连续播放的实例

当前播放器实例可以使用changeVid接口切换正在播放的视频。当有多个视频&#xff0c;在上一个视频播放完毕时&#xff0c;自动播放下一个视频时也可采用该处理方式。 const option {vid: 88083abbf5bcf1356e05d39666be527a_8,//autoplay: true,//playsafe: , //PC端播放加密视…

git常用命令

工作区&#xff1a;就是你在电脑里能看到的目录。暂存区&#xff1a;英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件&#xff08;.git/index&#xff09;中&#xff0c;所以我们把暂存区有时也叫作索引&#xff08;index&#xff09;。版本库&#xff1a;工作区有…

JS前端读取本地上传的File文件对象内容(包括Base64、text、JSON、Blob、ArrayBuffer等类型文件)

读取base64图片File file2Base64Image(file, cb) {const reader new FileReader();reader.readAsDataURL(file);reader.onload function (e) {cb && cb(e.target.result);//即为base64结果}; }, 读取text、JSON文件File readText(file, { onloadend } {}) {const re…

Docker 镜像解密:分层存储与镜像构建原理

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

vue 前端一键导出excel文件并附带表格样式

1、安装xlsx、xlsx-style、file-saver三个包 //xlsx与file-saver指定版本安装&#xff0c;解决默认安装utils未定义的问题 npm install --save xlsx0.17.0 npm install --save file-saver2.0.5 npm install xlsx-style --save 2、在使用的页面引入 import XLSX from xlsx //…

【Linux】Linux项目自动化构建工具 make/Makefile

目录 1. Makefile 是如何工作的 2. 依赖关系与依赖方法 3. .PHONY 4. Makefile 的特殊符号 写在最后&#xff1a; 1. Makefile 是如何工作的 make 是一个命令。 Makefile 是一个文件&#xff0c;当前目录下的一个文件。 我们先来上手写一个简单的 Makefile 文件&#…

网络编程 IO多路复用 [epoll版] (TCP网络聊天室)

//head.h 头文件 //TcpGrpSer.c 服务器端 //TcpGrpUsr.c 客户端 通过IO多路复用实现服务器在单进程单线程下可以与多个客户端交互 API epoll函数 #include<sys/epoll.h> int epoll_create(int size); 功能&#xff1a;创建一个epoll句柄//创建红黑树根…

最新Ai创作源码ChatGPT商用运营源码/支持GPT4.0+支持ai绘画+支持Mind思维导图生成

本系统使用Nestjs和Vue3框架技术&#xff0c;持续集成AI能力到本系统&#xff01; 支持GPT3模型、GPT4模型Midjourney专业绘画&#xff08;全自定义调参&#xff09;、Midjourney以图生图、Dall-E2绘画Mind思维导图生成应用工作台&#xff08;Prompt&#xff09;AI绘画广场自定…

加载已训练好的目标检测YOLOv8,v5,v3,v6模型,对数据集中某张图片中的object打上方框、标出类别,并将图片保存到本地

参考的教程&#xff1a;Python - Ultralytics YOLOv8 Docs 在与ultralytics代码同一层级下新建 predict.py 里面写下面的内容。运行即可 from ultralytics import YOLO from PIL import Image import cv2# 加载计划使用的模型 model YOLO("yolov8n.pt") # load a…