SpringMVC程序开发

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.mzph.cn/news/10029.shtml

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

相关文章

[visionOS][Apple Vision Pro] 缩放3D模型

方法一&#xff1a;通过代码来设置Model3D Model3D(named:"你的3D模型名称",bundle:realityKitContentBundle).padding(.bottom,50).scaleEffect(0.2) //这句用来缩放 方式二&#xff1a;别人可以&#xff0c;我验证过不行的方法 RealityKitContent工具中&#xf…

PLC-Recorder的高速采集有多快?0.5ms算快吗?看控制器能力了!

大家知道&#xff0c;PLC-Recorder有一个高速采集的功能&#xff0c;基于TCP连接或UDP报文&#xff0c;速度取决于发送端的能力。对于西门子PLC&#xff0c;能做到1-2ms的采集速度&#xff0c;但是&#xff0c;我在前面的文章里提到了0.5ms的高速采集&#xff0c;哪个控制器能这…

Linux 下 nc 发送接收 udp、tcp数据

nc&#xff0c;全名叫 netcat&#xff0c;它可以用来完成很多的网络功能&#xff0c;譬如端口扫描、建立TCP/UDP连接&#xff0c;数据传输、网络调试等等&#xff0c;因此&#xff0c;它也常被称为网络工具的 瑞士军刀 。 一、只服务端使用nc 备注&#xff1a;这种方式只能发…

Django实现音乐网站 ⑴

使用Python Django框架制作一个音乐网站。 目录 网站功能模块 安装django 创建项目 创建应用 注册应用 配置数据库 设置数据库配置 设置pymysql库引用 创建数据库 创建数据表 生成表迁移文件 执行表迁移 后台管理 创建管理员账户 启动服务器 登录网站 配置时区…

自媒体必备的8个素材网站,视频、音效、图片全部免费下载

自媒体必备的视频、音效、图片素材&#xff0c;这8个网站帮你解决。赶紧马住&#xff01; 菜鸟图库 https://www.sucai999.com/video.html?vNTYwNDUx 菜鸟图库虽然是一个设计网站&#xff0c;但它还有非常丰富的视频和音频素材&#xff0c;视频素材全部都是高清无水印&#…

Java 贪心算法经典问题解决

文章目录 分金条题目思路代码实现测试用例以及结果输出 花费资金做项目最大收益题目思路代码实现测试用例以及结果输出 预定会议室题目思路代码实现测试用例以及结果输出 取中位数题目思路代码实现测试用例以及结果输出 最低字典序题目思路代码实现测试用例以及结果输出 结语 分…

vite打包性能优化以及填坑

目录 前言 项目优化前 分析 优化 拆分包 去除debugger CDN 加速 按需导入 文件压缩 图片压缩 viteImagemin报错 填坑 坑1 坑2 总结 配置 前言 最近在使用 Vite4.0 构建一个中型前端项目的过程中&#xff0c;遇到了一些坑&#xff0c;也做了一些项目在构建生产环…

C进阶:文件操作

C语言文件操作 什么是文件 磁盘上的数据是文件。 但是在程序设计中&#xff0c;我们一般谈的文件有两种&#xff1a;程序文件&#xff08;例如.c,.h这一类编译&#xff0c;链接过程中的文件&#xff09;&#xff0c;数据文件。 程序文件 包括源程序文件&#xff08;后缀为.c&…

重生之我要学C++第四天

这篇文章的主要内容是类的默认成员函数。如果对大家有用的话&#xff0c;希望大家三连支持&#xff0c;博主会继续努力&#xff01; 目录 一.类的默认成员函数 二.构造函数 三.析构函数 四.拷贝构造函数 五.运算符重载 一.类的默认成员函数 如果一个类中什么成员都没有&…

JavaWeb 速通HTTP

目录 一、HTTP快速入门 1.HTTP简介 : 2.HTTP请求头 : 3.HTTP响应头 : 二、HTTP响应状态码 1.基本介绍 : 2.常见状态码 : 3.状态码的分类 : 4.完整状态码汇总 : 三、HTTP请求包和响应包 1.请求包分析 : 1 GET请求 (1) 说明 (2) doGet返回数据给浏览器 (3) form表单提…

Hadoop生态体系-2

目录标题 1、MapReduce介绍2、数据仓库3、HIVE4、HQL4.1 hive读写文件机制4.2 Hive数据存储路径 1、MapReduce介绍 思想&#xff1a;分而治之 map:“分”&#xff0c;即把复杂的任务分解为若干个“简单的任务”来处理。可以进行拆分的前提是这些小任务可以并行计算&#xff0c…

C++ 函数重载

1.函数重载的概念 在C中可以为两个或两个以上的函数提供相同的函数名称&#xff0c;只要参数类型不同&#xff0c;或参数类型相同而参数个数不同&#xff0c;称为函数重载。 在C语言中实现int&#xff0c;char&#xff0c;double类型的比较大小函数&#xff1a; int my_max_…

【Kubernetes资源篇】ingress-nginx最佳实践详解

文章目录 一、Ingress Controller理论知识1、Ingress Controller、Ingress简介2、四层代理与七层代理的区别3、Ingress Controller中封装Nginx&#xff0c;为什么不直接用Nginx呢&#xff1f;4、Ingress Controller代理K8S内部Pod流程 二、实践&#xff1a;部署Ingress Control…

STM32 串口实验(学习一)

本章将实现如下功能&#xff1a;STM32通过串口和上位机对话&#xff0c;STM32在收到上位机发过来的字符串后&#xff0c;原原本本返回给上位机。 STM32 串口简介 串口作为MCU的重要外部接口&#xff0c;同时也是软件开发重要的调试手段&#xff0c;其重要性不言而喻。现在基本…

KMP算法的及其原理

KMP算法 首先 我们先了解一下 KMP算法的作用 str1 和str2 字符串 如果str1中包含str2 那么返回头位置 如果不包含返回-1 首先 我们先加入一个概念: 有一个next数组 next[i]的值为 str2 中 以i-1位置为结尾的字符串中 最长相同前缀后缀为多长(相同前缀后缀 不是对称 aba 中相…

uniapp 小程序如何从主包页面跳转到分包页面

在uniapp开发小程序的时候&#xff0c;“分包”概念一定要提前了解下&#xff0c;具体我就不多说了&#xff0c;自己看下关网的相关配置。 那么&#xff0c;如果从主包页面&#xff0c;跳转至分包的页面呢&#xff1f;如图所示 我的页面->详情页 在我的页面创建好自己的链…

ARM--LED灯点亮

LED1,LED2,LED3亮灯 .text .global _start_start: /**********LED1点灯--->PE10**************//*初始化RCC章节*/通过RCC_MP_AHB4ENSETR寄存器,使能GPIOs组控制器 0x500000A28[4] 1RCC_INIT: E组和F组一起使能ldr r0,0x50000A28 ldr r1,[r0]orr r1,r1,#(0x3 << 4)s…

vue3+ts+elementui-plus二次封装树形表格实现不同层级展开收起的功能

一、TableTreeLevel组件 <template><div classmain><div class"btns"><el-button type"primary" click"expandLevel(1)">展开一级</el-button><el-button type"primary" click"expandLevel(2…

13年测试老鸟,接口性能测试总结整理,据说这是全网最全的...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 性能测试按照不同…

【云原生系列】openstack搭建过程及使用

目录 搭建步骤 准备工作 正式部署OpenStack 安装的过程 安装组件如下 登录页面 进入首页 创建实例步骤 上传镜像 配置网络 服务器配置 dashboard配置 密钥配置免密登录 创建实例 绑定浮动ip 免密登录实例 搭建步骤 准备工作 1.关闭防火墙和网关 systemctl dis…