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.rhkb.cn/news/276722.html

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

相关文章

springboot+poi-tl根据模板导出word(含动态表格和图片),并将导出的文档压缩zip导出

springbootpoi-tl根据模板导出word&#xff08;含动态表格和图片&#xff09; 官网&#xff1a;http://deepoove.com/poi-tl/ 参考网站&#xff1a;https://blog.csdn.net/M625387195/article/details/124855854 pom导入的maven依赖 <dependency><groupId>com.dee…

002——编译鸿蒙(Liteos -a)

目录 一、鸿蒙是什么 二、Kconfig 2.1 概述 2.2 编译器 2.3 make使用 本文章引用了很多韦东山老师的教程内容&#xff0c;算是我学习过程中的笔记吧。如果侵权请联系我。 一、鸿蒙是什么 这里我补充一下对鸿蒙的描述 这张图片是鸿蒙发布时使用的&#xff0c;鸿蒙是一个很…

excel导入功能(适用于vue和react都可)

如图所示&#xff08;需求&#xff09;&#xff1a;点击导入excel后&#xff0c;数据自动新增到列表数据内 这里以vue3 andt 为例 template 标签内代码 &#xff1a; <a-uploadname"file":multiple"true":show-upload-list"false":customR…

iOS 腾讯Pag动画框架-实现PagView的截图功能

背景 产品想要一个首页的截图功能&#xff0c;一听这个功能&#xff0c;心想那还不简单&#xff0c;将父视图控件转换成图片保存就行了。按照这个思路实现&#xff0c;很快就打脸啦&#xff0c;首页的这些动画一个都没有截出来&#xff0c;就像消失啦似的。然后蠢蠢的将动画暂…

一周学会Django5 Python Web开发-Jinja3模版引擎-模板语法

锋哥原创的Python Web开发 Django5视频教程&#xff1a; 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计37条视频&#xff0c;包括&#xff1a;2024版 Django5 Python we…

【pycharm】如何将pacharm设置成中文

【pycharm】汉化教程——如何将pacharm设置成中文 1、打开pycharm 2、点击file 3、点击setting——Plugins——搜索Chinese——点击如下图图标进行下载 汉化后界面情况&#xff1a;

windows使用docker运行TP6使用swoole内置http服务

1&#xff0c;下载docker-Windows客户端 下载地址&#xff1a;https://www.docker.com/products/docker-desktop docker --version #查看docker版本 docker-compose --version #查看docker-compose版本 2&#xff0c;安装环境 使用一键安装包&#xff1a;https://gitee.com/yes…

量子遗传算法优化VMD参数,五种适应度函数任意切换,最小包络熵、样本熵、信息熵、排列熵、排列熵/互信息熵...

关于量子遗传算法&#xff0c;在众多文献均有应用。下面简述一下原理。 &#xff08;1&#xff09;量子比特编码 子遗传算法通过引入量子比特来完成基因的存储和表达。量子比特是量子信息中的概念&#xff0c;它与经典比特不同&#xff0c;是因为它可以在同一时刻处于两个状态的…

通天星CMSV6车载定位监控平台 SQL注入漏洞复现(XVE-2023-23744)

0x01 产品简介 通天星CMSV6车载定位监控平台拥有以位置服务、无线3G/4G视频传输、云存储服务为核心的研发团队,专注于为定位、无线视频终端产品提供平台服务,通天星CMSV6产品覆盖车载录像机、单兵录像机、网络监控摄像机、行驶记录仪等产品的视频综合平台。 0x02 漏洞概述 …

贪心算法(算法竞赛、蓝桥杯)--均分纸牌

1、B站视频链接&#xff1a;A30 贪心算法 P1031 [NOIP2002 提高组] 均分纸牌_哔哩哔哩_bilibili 题目链接&#xff1a;[NOIP2002 提高组] 均分纸牌 - 洛谷 #include <bits/stdc.h> using namespace std; int n,a[101],av,cnt;int main(){scanf("%d",&n);…

AWS云上面的k8s统一日志收集(Fluent Bit+EKS+CW)

目标 k8s上面的常见的统一日志方案是EFK&#xff0c;具体如下&#xff1a; E:elasticsearch;F:fluentd;K:kibana 这里我们变成了使用fluentd的AWS替代品Fluent Bit&#xff0c;直接将日志输出到CloudWatch组。不需要E和K了。不过&#xff0c;这样仅仅用于AWS EKS。 步骤 给…

DFS-验证二叉数98

给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左 子树 只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 示例 1&#xff1a; 输入…

初识微信小程序之swiper和swiper-item的基本使用

在我还没接触到微信小程序之前&#xff0c;通常使用轮播要么手写或使用swiper插件去实现&#xff0c;当我接触到微信小程序之后&#xff0c;我看到了微信小程序的强大之处&#xff0c;让我为大家介绍一下吧&#xff01; swiper与swiper-item一起使用可以做轮播图 基本使用&…

运维自动化之——Ansible

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

AntPathMatcher【Spring中提供的路径匹配器】

举个例子 我们要求所有以html结尾的访问&#xff0c;都放行 那我们只需要写出用AntPathMatcher判断访问url是否与/**/*.html匹配便可以知道结果

【NLP学习记录】One-Hot编码

1. One-Hot编码概念 one-hot编码的基本思想是将每个类别映射到一个向量&#xff0c;其中只有一个元素的值为1&#xff0c;其余元素的值为0。这样&#xff0c;每个类别之间相互独立&#xff0c;不存在顺序或距离关系。 举例&#xff1a;对于三个类别的情况&#xff0c;可以使用…

uni-app微信小程序上拉加载,下拉刷新

pages.json配置官网链接 onPullDownRefresh、onReachBottom函数跟生命周期同级 data() {return {orderList:[],total: null, //总共多少条数据page: 1,pageSize: 10,} }, onLoad() {}, mounted(){this.getInfo() }, methods:{getInfo(){API.getListxxx().then(res > {const…

JVM的工作流程

目录 1.JVM 简介 2.JVM 执行流程 3. JVM 运行时数据区 3.1 堆&#xff08;线程共享&#xff09; 3.3 本地方法栈&#xff08;线程私有&#xff09; 3.4 程序计数器&#xff08;线程私有&#xff09; 3.5 方法区&#xff08;线程共享&#xff09; 4.JVM 类加载 ① 类…

MM1: Methods, Analysis Insights from Multimodal LLM Pre-training

MM1: Methods, Analysis & Insights from Multimodal LLM Pre-training 相关链接&#xff1a;arxiv 关键字&#xff1a;多模态学习、大型语言模型、预训练、视觉语言连接、混合专家模型 摘要 本文讨论了构建高性能的多模态大型语言模型&#xff08;MLLMs&#xff09;。特别…

uploads-labs靶场(1-10关)

一、搭建环境: 下载upload-labs源代码 下载链接&#xff1a;https://codeload.github.com/c0ny1/upload-labs/zip/refs/heads/master 将压缩包解压后的文件名改为upload-labs&#xff0c;然后放入phpstudy\www目录下 二、关卡通关: 1、pass-01&#xff08;前端绕过&#xf…