SpringMVC 02

这里先附上前一篇的地址,以上系列均为博主的学习路线,仅供参考

初识Spring MVC-CSDN博客

下面我们从SpringMVC传递数组开始讲起

1.传递数组

传递数组的方式和传递普通变量的方式其实是相同的,下面我们附上传递的图片

@RequestMapping("/r7")public String r1(String[] arrays){return Arrays.toString(arrays);}

第二种传送方式

2.传递集合

传递集合就不能像数组和普通对象一样直接传送了,而是需要使用注解来操作

注:这个注解和之前的重命名注解是一样的

@RequestMapping("/r8")public String r8(@RequestParam List<String> list){return "list" + list;}

3.JSON

首先json作为一种轻量级的数据交互格式,我们也需要了解json的传输和获取

首先先看一下JSON的格式

{"squadName": "Super hero squad","homeTown": "Metro City","formed": 2016,"secretBase": "Super tower","active": true,"members": [{"name": "Molecule Man","age": 29,"secretIdentity": "Dan Jukes","powers": ["Radiation resistance", "Turning tiny", "Radiation 
blast"]}, {"name": "Madame Uppercut","age": 39,"secretIdentity": "Jane Wilson","powers": ["Million tonne punch", "Damage resistance", "Superhuman 
reflexes"]}, {"name": "Eternal Flame","age": 1000000,"secretIdentity": "Unknown","powers": ["Immortality", "Heat Immunity", "Inferno", 
"Teleportation", "Interdimensional travel"]]}
}

就是键值对的形式来表示的,数据由逗号分隔,对象由大括号表示,数组使用中括号表示

我们也可以使用在线json网站来解析json

在线JSON校验格式化工具(Be JSON)

json与java对象之间的转换

注:SpringMVC已经集成了json的转换工具,这里我们就无需引入依赖了

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.5</version>
</dependency>

json这里的转换工具有很多,这里jackson只是其中的一种

或者还可以使用阿里的fastjson和fastjson2

注:这里也得使用注解才能生效,使用直接传输的话会导致返回的是默认值null

这里的注解使用@RequestBody

@RequestMapping("/r9")public String r9(@RequestBody Person person){return person.toString();}

我们去掉注解试试,就会发现产生报错了

json和对象之间的转换

public static void main(String[] args) throws JsonProcessingException {ObjectMapper mapper = new ObjectMapper();String json = "{\"name\":\"admin\",\"age\":18}";//json转对象Person person = mapper.readValue(json, Person.class);System.out.println(person);//字符串转jsonString json1 = mapper.writeValueAsString(person);System.out.println(json1);}

注:这里是使用反射机制来进行操作的,注意要提供get和set方法以及空参的构造器,否则会产生异常,报错信息如下

4.获取URL中的参数

@PathVariable     和字面意思一样,这个注解主要就是获取URL中的数据绑定,简而言之就是获取URL中的参数

 @RequestMapping("/r10/{name}")public String r10(@PathVariable("name") String name){return "收到参数"+name;}

5.上传文件

这里又涉及一个新注解@RequestPart 这里的part有文件的含义

这里我们可以获取到上传文件的一些信息

@RequestMapping("/r11")public String r11(@RequestPart("file") MultipartFile file) {String fileName = file.getOriginalFilename();return "上传文件名:"+fileName;}

6.Cookie & Session

Cookie

首先我们来介绍一下Cookie

Cookie就是一串保存在客户端主机终端上的信息,是为了给某些网站进行身份验证,Session身份跟踪的字符串(经常通过加密)

Cookie保存在客户端,而Session保存在服务器端

Cookie解决了什么问题?

由于HTTP协议是一个无状态的协议,这意味着我们在访问网站的时候需要多次进行登录操作,比如访问一个淘宝,在浏览商品的时候需要进行登录,在付款的时候又要进行登录,这样就给用户造成了很大的困扰.

Cookie就是在第一次登录的时候由服务器返回一些数据给浏览器保存在本地,这样在进行第二次请求的时候,就会自动将上次保存的cookie嘻嘻携带给服务器,服务器就可以根据这个来知道用户是谁了.

注:Cookie存储的数据量有限,一般不超过4K

Cookie啥时候产生,一定有吗?

Cookie 的使用需要看要求,因为浏览器可以禁用Cookie,服务器端也可以不Set-Cookie

一般如果需要使用Cookie,那么就是客户端向服务器发送第一次请求的时候,服务端给客户端发送一个Cookie用于保存在本地

注:可以是保存在内存中,也有可能是保存在硬盘中

Cookie的生命周期?

Cookie在生成的时候会指定一个Expire值,这就是他的生命周期,超出即被清除,有些页面甚至设置为0或者负值,这样关闭浏览器即清除,更加安全

缺陷

1.Cookie中存储大的属性有限制,一个浏览器最多存储300个,且一个不能超过4K

每个站点能设置的Cookie总数不超过20个

2.安全性无法保证,因为Cookie可以被篡改

3.浏览器可以禁用Cookie

应用场景

对安全性要求不高,无需存储大量数据,主要用来做服务器和客户端的状态保持技术

Session

Session是会话的意思,比如说用户打开浏览器,点击一个超链接,访问服务器多个web资源,然后关闭浏览器就称之为一个会话.

什么时候产生?

当用户请求Web网页的时候,如果该用户还没有会话,就会自动创建一个Session,这样在应用程序跳转的时候,存储在Session对象中的变量不会丢失,这也就保证了会话会一直存在下去(Session是以键值对形式存储的)

注:服务器会向客户端发送一个SessionId放到Cookie里面,用户在每次访问网页的时候都会带着Cookie一起,这样服务器就可以根据SessionId来确定用户的信息了

Session生命周期

一般是根据需求设定的,就像淘宝的客服,在一段时间不去发送信息进行对话就会自动断开,这就是Session的生命周期

简而言之,Session和Cookie就是两种保存用户状态的机制,不同的是Cookie存储在客户端里面,Session存储在服务器里面

Cookie和Session结合使用

以登录举例,在我们第一次登录的时候,服务器会创建一个Session对象用来保存用户的信息,同时向客户端发送一出啊SessionId,客户端就将其保存在Cookie里面,下次再进行请求的时候,客户端会携带Cookie,也就是SessionId,这样服务器就可以知道用户是谁了.

下面我们介绍几种获取Cookie和Session的方式

1.传统方式获取

注意这里domain是域名千万不要写错了

 @RequestMapping("/r12")public String getC(HttpServletRequest request, HttpServletResponse response) {Cookie[] cookies = request.getCookies();StringBuilder sb = new StringBuilder();if (cookies != null) {for(Cookie cookie : cookies) {sb.append(cookie.getName()+":"+cookie.getValue());}}return sb.toString();}

简单方式

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

这里也侧面证明了Cookie是不安全的,可以伪造的

Session的获取和存储

Session的存储

@RequestMapping("/r14")public String getS(HttpServletRequest request, HttpServletResponse response) {HttpSession session = request.getSession();if(session != null) {session.setAttribute("name", "张三");}return "session 存储成功";}

获取Session

@RequestMapping("/r15")public String getR(HttpServletRequest request, HttpServletResponse response) {HttpSession session = request.getSession();if(session != null && session.getAttribute("name") != null) {String name = (String) session.getAttribute("name");return "name:"+name;}return "session 不存在";}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/747806.shtml

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

相关文章

笔记本电脑数据恢复:如何轻松地从笔记本电脑恢复文件

不小心从笔记本电脑中删除了一些重要文件&#xff1f;或者恶意软件和其他不可控因素是否导致您的文件消失&#xff1f;人们很容易认为这些文件已经永远消失&#xff0c;并且无法恢复。但这与事实相差甚远。通过遵循正确的数据恢复礼仪并使用良好的数据恢复工具&#xff0c;您可…

(done) 什么是词嵌入技术?word embedding ?(这里没有介绍词嵌入算法)(没有提到嵌入矩阵如何得到)

参考视频&#xff1a;https://www.bilibili.com/video/BV1sw411S7i1/?spm_id_from333.788&vd_source7a1a0bc74158c6993c7355c5490fc600 词嵌入&#xff08;word embedding&#xff09;&#xff1a;把词汇表中的词或短语 -------- 映射 ----> 固定长度向量 我们可以把 …

FPGA静态时序分析与约束(二)、时序分析

系列文章目录 FPGA静态时序分析与约束&#xff08;一&#xff09;、理解亚稳态 FPGA静态时序分析与约束&#xff08;三&#xff09;、读懂vivado时序报告 文章目录 系列文章目录前言一、时序分析基本概念1.1 时钟抖动1.2 时钟偏斜1.3 时钟不确定性Uncertainty1.4 建立时间和保…

DVWA靶场-CSRF跨站请求伪造

CSRF(跨站请求伪造)简介概念 CSRF&#xff08;Cross—site request forgery&#xff09;&#xff0c;跨站请求伪造&#xff0c;是指利用受害者未失效的身份认证信息&#xff08;cookie&#xff0c;会话等&#xff09;&#xff0c;诱骗其点击恶意链接或者访问包含攻击代码的页面…

nacos2.2.3 适配dm数据库

从github上下载了源码&#xff0c;选择了2.2.3分支后修改 适配后的代码下载&#xff0c;本地install用&#xff1a; nacos2.2.3_dm: 适配dm数据库 (gitee.com) alibba加了很多检查&#xff0c;跳过检查install命令&#xff1a; mvn -Prelease-nacos -Dmaven.test.skiptrue -D…

Django和Mysql数据库

Django学习笔记 Django和Mysql数据库 Django开发操作数据库更简单&#xff0c;内部提供了ORM框架。 1)安装mysqlclient pip3 install mysqlclient2)ORM ORM可以帮助我们做两件事&#xff1a; 1.创建、修改、修改数据库中的表&#xff08;不用写sql语句&#xff09;[不能创…

运维自动化之——Ansible

目录 一、自动化运维 1、通过xshell实现自动化运维 2、Ansible简介 3、Ansible特点及优势 4、Ansible核心程序 5、Ansible工作原理及流程 6、部署Ansible自动化运维工具 7、Ansible常用模块 ①ansible命令模块 ②command模块 ③shell模块 ④cron模块 ⑤user模块 …

Redis:ClassCastException【bug】

Redis&#xff1a;ClassCastException【bug】 前言版权Redis&#xff1a;ClassCastException【bug】错误产生相关资源控制器&#xff1a;UserController("/user")配置&#xff1a;RedisConfiguration实体类&#xff1a;User数据表&#xff1a;User 解决 最后 前言 2…

Windows蓝牙驱动开发之模拟HID设备(一)(把Windows电脑模拟成蓝牙鼠标和蓝牙键盘等设备)

by fanxiushu 2024-03-14 转载或引用请注明原作者 把Windows电脑模拟成蓝牙鼠标和蓝牙键盘&#xff0c;简单的说&#xff0c;就是把笨重的PC电脑当成鼠标键盘来使用。 这应该是一个挺小众的应用&#xff0c;但有时感觉也应该算比较好玩吧&#xff0c; 毕竟实现一种一般人都感觉…

Docker安装蜜罐Hfish

前言 无意中发现公司的一台服务器被爆破&#xff0c;修改了密码&#xff0c;为了确定内网是否安装需要搭建一个蜜罐来看一下是否存在隐患。 如何安装Docker&#xff0c;请查看我另一篇文章 https://blog.csdn.net/l1677516854/article/details/136751211 一、拉取镜像 dock…

工具类实现导出复杂excel、word

1、加入准备的工具类 package com.ly.cloud.utils.exportUtil;import java.util.Map;public interface TemplateRenderer {Writable render(Map<String, Object> dataSource) throws Throwable;}package com.ly.cloud.utils.exportUtil;import java.util.Map;public int…

Unity中的网格创建和曲线变形

Unity中的网格创建和曲线变形 3D贝塞尔曲线变形贝塞尔曲线基础线性公式二次方公式三次方公式 Unity 实现3D贝塞尔曲线变形准备工作脚本概述变量定义 变量解析函数解析 获取所有子节点GetAllChildren 获取所有子节点UpdateBezierBend 控制点更新CalculateBezier Bezier 曲线公式…

【算法杂货铺】二分算法

目录 &#x1f308;前言&#x1f308; &#x1f4c1; 朴素二分查找 &#x1f4c2; 朴素二分模板 &#x1f4c1; 查找区间端点处 细节&#xff08;重要&#xff09; &#x1f4c2; 区间左端点处模板 &#x1f4c2; 区间右端点处模板 &#x1f4c1; 习题 1. 35. 搜索插入位…

phpcms头像上传漏洞引发的故事

目录 关键代码 第一次防御 第一次绕过 第二次防御 第二次绕过 第三次防御 第三次绕过 如何构造一个出错的压缩包 第四次防御 第四次绕过 本篇文章是参考某位大佬与开发人员对于文件包含漏洞的较量记录下的故事&#xff0c;因为要学习文件包含漏洞&#xff0c;就将大佬…

什么是 HTTPS?它是如何解决安全性问题的?

什么是 HTTPS&#xff1f; HTTPS&#xff08;HyperText Transfer Protocol Secure&#xff09;是一种安全的通信协议&#xff0c;用于在计算机网络上安全地传输超文本&#xff08;如网页、图像、视频等&#xff09;和其他数据。它是 HTTP 协议的安全版本&#xff0c;通过使用加…

Java开发从入门到精通(九):Java的面向对象OOP:成员变量、成员方法、类变量、类方法、代码块、单例设计模式

Java大数据开发和安全开发 &#xff08;一)Java的变量和方法1.1 成员变量1.2 成员方法1.3 static关键字1.3.1 static修饰成员变量1.3.1 static修饰成员变量的应用场景1.3.1 static修饰成员方法1.3.1 static修饰成员方法的应用场景1.3.1 static的注意事项1.3.1 static的应用知识…

微服务技术栈SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式(五):分布式搜索 ES-中

文章目录 一、DSL查询文档1.1 简单查询1.2 复合查询 二、搜索结果处理三、RestClient演示 查询与结果分析四、案例4.1 问题解析4.2 代码4.2.1 实体bean4.2.2 控制层4.2.3 业务service4.2.4 启动类 一、DSL查询文档 1.1 简单查询 # 1. DSL查询 # 1.1 查询所有GET /hotel/_searc…

JavaScript 进阶(一)

一、作用域 作用域&#xff08;scope&#xff09;规定了变量能够被访问的“范围”&#xff0c;离开了这个“范围”变量便不能被访问。 作用域分为&#xff1a; 局部作用域 、全局作用域。 1.1局部作用域 局部作用域分为函数作用域和块作用域。 1. 函数作用域&#xff1a; 在函数…

分布式系统常见负载均衡实现模式

分布式系统常见负载均衡实现模式 1. 4层负载均衡1.1. 负载均衡的常见需求1.2. 负载均衡的实现模式1.2.1 DR模式1.2.2 TUN模式1.2.3 NAT模式1.2.4 FULLNAT模式1.2.5 4种模式的差异 1.3. 负载均衡的均衡算法1.3.1 静态负载均衡1.3.2 轮询法1.3.3 加权循环法1.3.4 IP 哈希法1.3.5 …

Vue前端开发记录(一)

本篇文章中的图片均为深色背景&#xff0c;请于深色模式下观看 说明&#xff1a;本篇文章的内容为vue前端的开发记录&#xff0c;作者在这方面的底蕴有限&#xff0c;所以仅作为参考 文章目录 一、安装配置nodejs,vue二、vue项目目录结构三、前期注意事项0、组件1、数不清的报…