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

Spring Web MVC

目录

一.简介

二.建立连接(客户端和服务器)

三.请求

1.传递单个参数

2.传递多个参数

3.对象

4.数组/集合

5.JSON

6.URL参数

7.上传文件

8.获取cookie和session

(1)获取cookie

(2)获取session

9.设置header

四.响应

1.返回静态页面

2.返回数据

3.返回HTML代码片段

4.返回JSON

5.设置状态码

6.设置Header


一.简介

Spring Web MVC是包含在Spring框架中的用来构造web项目的框架,底层基于Servlet API.

(之前使用的SpringBoot也是创建Spring MVC的一种方式)

MVC(model view controller):把一个项目分成三部分,三部分之间的关系如下

Spring进行实现MVC模式,称为Spring MVC

二.建立连接(客户端和服务器)

@Requestmapping (路由映射):可以修饰方法,也可以修饰类。

访问地址:类的路径+方法路径

修饰方法

修饰类

在postman中观察可得:@Requestmapping支持get请求、post请求...

当想要指定一个具体的方法时,在代码中进行调整。

三.请求

1.传递单个参数

2.传递多个参数

发送请求的参数名称可以调换

注意:在代码中定义类型尽量使用包装类型(int的包装类为Integer),使用基本类型时,当输入的变量为空时会报错,而包装类型会显示为空。

3.对象

单独定义一个对象类,更方便后期根据需求修改代码。

package com.example.demo.controller;public class Person {Integer id;String name;Integer age;@Overridepublic String toString() {return "Person{" +"id=" + id +", name='" + name + '\'' +", age=" + age +'}';}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}
}

后端参数重命名

前端传参是@requesPrama()中的

4.数组/集合

数组

当请求中同一个参数有多个时,浏览器就会帮我们封装成一个数组。

集合

默认传递的参数是数组形式,要是想要传递一个集合的形式,需要在参数前面加上@RequestParam

5.JSON

json本质上是一个字符串,表示对象的字符串。

传递json数据,需要使用@RequestBody

6.URL参数

获取一个url中的参数需要一个@PathVariable,获取多个url中的参数需要多个@PathVariable

需要注意顺序,顺序要与参数相匹配,参数个数也需要匹配

URL参数中的重命名

7.上传文件

@RequestPart

将图片上传到指定位置

8.获取cookie和session

(1)获取cookie

1)spring中获取指定个数的cookie,使用@CookieValue

2)获取多个cookie的方式(不是spring,采用最原始的方式,在控制台获取value值)

    //获取多个cookie的方式@RequestMapping("getCookie")public String getCookie(HttpServletRequest request){Cookie[] cookies=request.getCookies();
//  两种写法
//        for (Cookie cookie : cookies) {
//            System.out.println(cookie.getName()+":"+cookie.getValue());
//        }//空指针异常处理if(cookies!=null){Arrays.stream(cookies).forEach(cookie -> {System.out.println(cookie.getName()+":"+cookie.getValue());});}return "获取cookie成功";}

(2)获取session

1)普通方式

    //设置session@RequestMapping("/setSession")public String setSession(HttpServletRequest request){//创建sessionHttpSession session= request.getSession();//给session赋值session.setAttribute("username","swy");return "success";}//获取session@RequestMapping("/getSession")public String getSession(HttpServletRequest request){//session默认为true,没有session会自动创建一个,设置成false避免自动创建HttpSession session= request.getSession(false);if(session!=null){String username=(String) session.getAttribute("username");return "登录用户:"+username;}return "session为空!";

2)spring方式

@SessionAttribute

    @RequestMapping("/getSession2")//默认是一个必传参数public String getSession2(@SessionAttribute(required = false) String username){return "username:"+username;}

3)使用HttpSession的方式

9.设置header

1)原始方式

2)spring方式

@RequestHeader

以上:

1.传递数组:同一个请求参数有多个时,会自动封装成数组

2.传递集合:@RequestParam

3.传递JSON:@RequestBody

4.上传文件:@RequestPart

5.Cookie :@CookieValue  

6.Session:@SessionAttribute

7.Header:@RequestHeader

8.url:@PathVariable

9.文件:@RequestPart

四.响应

1.返回静态页面

1)创建一个简单的html页面

2)返回该页面

@Controller和@RestController

2.返回数据

@ResponseBody

可以修饰类、可以修饰方法。修饰类的时候,表示这个类下的所有方法,返回的均为数据。修饰方法时,表示该方法返回的是数据。

如果一个类中返回的都是数据则把注释加在类上,如果一个类中只有相对应的方法中返回数据,则把该注释添加在相对应的方法上。

3.返回HTML代码片段

4.返回JSON

当返回的接口是String类型、Integer类型时,content-Type是text/html

当接口返回的是对象/Map时,content-Type自动设置成application/json

这里举例是返回一个对象:

5.设置状态码

设置状态码与页面展示无关

6.设置Header

平时很少用到

举例:设置header的返回类型属性:

举例:自定义header属性

相关文章:

Spring Web MVC

目录 一.简介 二.建立连接(客户端和服务器) 三.请求 1.传递单个参数 2.传递多个参数 3.对象 4.数组/集合 5.JSON 6.URL参数 7.上传文件 8.获取cookie和session (1)获取cookie (2)获取session …...

Debian系列的Linux发行版上部署wvp

Debian系列的Linux发行版上部署wvp 环境搭建1.Debian系列的Linux发行版上安装nginx2.安装mysql设置mysql密码修改权限sudo mysql ERROR 1045 (28000): Access denied for user root@localhost (using password: NO)配置相关navicat 连接不上 报错 10061navicat 连接报错 1130 -…...

无人智能柜:经营成本低,运维智能化

在现代商业领域中,无人智能柜正逐渐崭露头角,成为一种具有前景的商业模式。其独特之处在于经营成本的低廉性和运维过程的智能化。相较于传统的便利店等实体店铺,无人智能柜在运营过程中不仅能够降低成本,还能够实现高效的运维管理…...

java.lang.UnsupportedOperationException 关于Arrays.asList问题解决

解析String 字符串为List集合ArrayList<String> itemsList Arrays.asList(items.split("\\|")List<String> itemsList Arrays.asList(items.split("\\|")final Iterator<String> iterator itemsList.iterator();while (iterator.hasNex…...

2023.11.23 云服务器实现 Spring Boot 项目文件上传并访问

环境介绍 云服务器&#xff1a;京东云云服务器系统&#xff1a; CentOS 7.9JDK 版本&#xff1a;1.8Spring Boot 版本&#xff1a;2.7.17 具体步骤 步骤一 首先我们得先创建一个 Spring Boot 项目 创建如下目录结构 关于如何创建一个 Spring Boot 项目 请点击下方链接详细了解 …...

SAP实现多个统御科目:特殊总账SGL+备选统驭科目Alternative Reconciliation Accounts

以前只知道特别总账。学习了 客商的每个公司视图主数据唯一分配一个统驭科目。一般情况下&#xff0c;客商经常发生的业务对应的总帐科目设为统驭科目。 客户设置的统驭科目&#xff1a;应收账款 供应商设置的统驭科目&#xff1a;应付账款 除了经常的销售和采购业务对应应收和…...

【数据分享】2023年我国省市县三级的瞪羚企业数量(免费获取/Excel/Shp格式)

企业是经济活动的参与主体。一个城市的企业数量决定了这个城市的经济发展水平&#xff01;比如一个城市的金融企业较多&#xff0c;那这个城市的金融产业肯定比较发达&#xff1b;一个城市的制造业企业较多&#xff0c;那这个城市的制造业肯定比较发达。 之前我们给大家分享了…...

用于计算机屏幕安全摄像头系统:Screen Anytime Crack

Screen Anytime 是一款软件&#xff0c;旨在自动将整个用户会话或 PC/服务器/VM/Kiosk 的 /RDP/Citrix/RemoteApp 会话的屏幕活动记录到视频日志文件中&#xff0c;以用于记录、审核和监控目的。通过重播其高度压缩的视频&#xff0c;您可以轻松回顾单台计算机或一组服务器/PC …...

Redis深入理解-Socket连接建立流程以及文件事件处理机制

Redis Server 运行原理图 Redis 服务器中 Socket 网络建立以及文件事件模型 一个 redis 单机&#xff0c;可以抗几百上千的并发&#xff0c;这里的并发指的就是同时可以有几百个 client 对这个 redis server 发起请求&#xff0c;都需要去建立网络连接&#xff0c;同时间可能会…...

Docker run 命令

docker run &#xff1a;创建一个新的容器并运行一个命令 语法 docker run [OPTIONS] IMAGE [COMMAND] [ARG...]OPTIONS说明&#xff1a; -a stdin&#xff1a;指定标准输入输出内容类型&#xff0c;可选STDIN/STDOUT/STDERR三项&#xff1b; -d&#xff1a;后台运行容器&am…...

Vue中的$nextTick的作用

在 Vue 中&#xff0c;当某些数据发生变化时&#xff0c;DOM 并不会立即更新。相反&#xff0c;Vue 会在下一个事件循环周期&#xff08;microtask&#xff09;中异步执行更新&#xff0c;这样可以避免频繁的 DOM 操作。然而&#xff0c;有时候我们需要在 DOM 更新后执行一些操…...

浅谈Linux bash脚本----getopts获取脚本POSIX标准传参

getopts是一个在 Shell 脚本中用于解析命令行选项的内置命令。 它用于处理脚本的参数&#xff0c;使得脚本可以接受不同的选项和参数&#xff0c;并根据用户提供的输入采取相应的操作。 getopts 命令基于 POSIX 标准&#xff0c;并且通常与 while 循环结合使用。它的语法如下…...

PyCharm玩转ESP32

想必玩ESP32的童鞋都知道Thonny&#xff0c;当然学Python的童鞋用的更多的可能是PyCharm和VsCode Thonny和PyCharm的对比 对于PyCharm和VsCode今天不做比较&#xff0c;今天重点说一下用PyCharm玩转ESP32&#xff0c;在这之前我们先对比下Thonny和PyCharm的优缺点 1、使用Tho…...

uniapp自定义导航栏返回按键

目录 htmljscss最后 html <!-- #ifdef MP-WEIXIN || APP-PLUS --> <view class"tc header":style"topBarHeight() 0 ? : height: topBarHeight() px;padding-top: topBarTop() px"><view class"reg180" :style"top…...

「可移动工具车」物料管理的得力助手

随着工业制造企业不断发展&#xff0c;仓储的运营变得越来越重要&#xff0c;物料高效管理也迎来了新的挑战&#xff0c;工厂物料管理直接影响着生产效率和成本控制&#xff0c;不合理的物料管理可能导致物料溢出、过度库存、损耗增加等问题&#xff0c;进而影响企业的整体竞争…...

授时小课堂——北斗卫星信号和GPS卫星信号谁更强?

北斗卫星信号好还是GPS信号更胜一筹呢&#xff1f;下面小编带大家一起来比较一下看看吧。 1. 系统覆盖范围 北斗卫星导航系统是中国自主研发的授时定位系统&#xff0c;其覆盖范围包括全球各个地区。但在海外地区&#xff0c;主要还是东南亚、南亚、中亚等地区&#xff0c;北斗…...

网站会遭受那些攻击,要怎么应对

随着互联网的普及和发展&#xff0c;很多企业或个人都建立了自己的网站&#xff0c;这些网站不仅可以展示企业或个人的信息&#xff0c;还可以提供各种服务和交流平台。但是&#xff0c;在运营网站的过程中&#xff0c;很多人都会遇到网站被流量攻击的情况&#xff0c;这种情况…...

后端-锁专题:synchronized(java对象结构、锁的类型、锁升级流程...)

文章目录 对象的结构以及大小内存换算java的常见数据类型以及所占字节数分析对象总共占多少字节&#xff0c;各项占多少字节对象头结构 锁类型锁升级流程 对象的结构以及大小内存换算 java的常见数据类型以及所占字节数 String&#xff1a;8字节 64位 int&#xff1a;4字节 …...

vscode在运行c语言时,无法scanf输入

问题&#xff1a; 在学习c语言中&#xff0c;我在使用scanf和cin时无法在终端进行输入(运行了但是无法输入)&#xff0c;在网上寻找答案&#xff0c;并写下笔记 解决方法 选择左上角 文件->首选项&#xff08;preferences&#xff09;->设置&#xff08;settings&#xf…...

ROLLUP 的几点说明(十七)

ROLLUP 最根本的作用是提高某些查询的查询效率&#xff08;无论是通过聚合来减少数据量&#xff0c;还是修改列顺序以匹配前缀索引&#xff09;。因此 ROLLUP 的含义已经超出了“上卷”的范围。这也是为什么在源代码中&#xff0c;将其命名为 Materialized Index&#xff08;物…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...