SpringMVC 02

news2025/1/11 0:20:46

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

初识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);

        //字符串转json
        String 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.coloradmin.cn/o/1520297.html

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

相关文章

【Git】本地仓库关联远程仓库

Git 本地项目关联远程仓库 本地 本地已有项目 ● 项目 07.GitLocalTest 包含有一个js ○ test.js 远程仓库 ● 远程仓库地址 ○ https://github.com/Sonnenlicht77/gitTest.git ○ 仓库只有一个 readme.md 关联 1.本地 1.1 本地仓库 ● git init ● git add . ● gi…

考研复习C语言进阶(3)

结构体 1 结构体的声明 1.1 结构的基础知识 结构是一些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。 1.2 结构的声明 struct tag { member-list; }variable-list; 例如描述一个学生&#xff1a; struct Stu { char name[20];//名字 int ag…

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的应用知识…

03-java基础-运算符(数据类型转换)、原码、补码、反码

一、运算符 一、1、算术运算符 在代码中如果有小数参与运算&#xff0c;结果有可能会不精确。 一、1.1、数字相加 一、1.1.1、类型转换的分类&#xff08;2种&#xff09; 一、1.1.1.1、类型转换的分类1-----隐式转换 一、1.1.1.1、类型转换的分类2-----强制转换 一、1.2、字符…

海外媒体宣发套餐推广:如何选择最佳方案-华媒舍

在信息时代&#xff0c;传播和宣传已经成为各个行业发展的关键部分。尤其对于拓展国际市场的企业来说&#xff0c;海外媒体宣发更是至关重要。由于各种原因&#xff0c;很多企业在选择海外媒体宣发套餐时感到困惑。本文将为您介绍如何选择最佳的海外媒体宣发方案。 1.了解目标市…

工匠的发展与兴衰趋势-机器人篇

这是一篇纯纯调侃的博客&#xff0c;如有雷同纯属意外。 之前&#xff0c;写过&#xff1a; 从2050回顾2020&#xff0c;职业规划与技术路径&#xff08;节选&#xff09; 从2050回顾2020&#xff0c;职业规划与技术路径&#xff08;节选&#xff09;补充 未来以“工”为主的…

LarkXR上新了 | Apollo多终端与XR体验的优化创新

作为领先的数字平行世界产品技术提供方&#xff0c;「Paraverse平行云」一直致力于为企业和开发者提供企业级实时云渲染解决方案。其多终端接入产品LarkXR Apollo&#xff0c;基于底层Runtime技术&#xff0c;实现了在Windows、Linux、MacOS、Android、iOS等多种操作系统下&…

centos破解root密码以及如何防止他人破解root密码

目录 破解root密码 服务器重启 1.再重启页面上下选择第一个按e进入内核编辑模式 2.找到linux16开头的一行&#xff0c;光标移动到最后添加 init/bin/sh Ctrlx 保存 3.进入单用户模式 4.重新挂在根分区 5.关闭selinux 6.更新密码 passwd 7.在根分区下面创建一个隐藏文件…

字符串函数(C语言详解)

1.字符串简介 字符串是一串连续的且以\0结尾的字符 char arr[]"zhangsan";//将字符串存到数组里面 char*a"lisi";//常量字符串 char arr1[]{z,h,a,n,g};//字符数组 注意&#xff1a; 1.以第一种形式初始化字符串时&#xff0c;计算机会自动在字符串末尾加…

leetcode-打家劫舍专题系列(动态规划)

198.打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个…

C# WPF中设置图标时出现TypeConverterMarkupExtension异常

异常内容为&#xff1a;System.Windows.Baml2006.TypeConverterMarkupExtension 是因为有些地方比如菜单和左上角默认的图标等&#xff0c;只能使用ico格式的文件&#xff0c;如果设置的是png格式的文件&#xff0c;就会出现此错误&#xff01;通过在线转ico的方式把png转换一…

【Maven学习笔记】Maven入门教程(适合新手反复观看学习)

Maven学习笔记 Maven的简要介绍Maven的安装和配置Maven的安装Maven安装的常用配置 Maven的使用入门编写pom编写主代码编写测试代码打包和运行使用Archetype生成项目骨架 Maven核心概念的阐述坐标案例分析依赖依赖的范围传递性依赖依赖范围依赖调节可选依赖Maven依赖常用的技巧 …

《ARM汇编与逆向工程》读书心得与实战体验

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 &#x1f4d8; 一、引言 &#x1f4dd; 二、…

vite打包流程和原理

文章目录 打包原理Vite比Webpack快&#xff1f;在生产环境下的表现启动项目后&#xff0c;完成加载比较慢&#xff1f;Esbuild & Rollup热更新 打包原理 vite利用了ES module这个特性&#xff0c;使用vite运行项目时&#xff0c;首先会用esbuild进行预构建&#xff0c;将所…

音视频如何快速转二维码?在线生成音视频活码的教程

音频文件的二维码制作步骤是什么样的呢&#xff1f;扫描二维码来展现内容是很流行的一种方式&#xff0c;基本上日常生活中经常会用的图片、音频、视频等都可以使用生成二维码的方式。现在很多的幼儿园或者学校会录制孩子的音频或者视频内容用来展示&#xff0c;那么二维码制作…

Kafka配置SASL_PLAINTEXT权限。常用操作命令,创建用户,topic授权

查看已经创建的topic ./bin/kafka-topics.sh --bootstrap-server localhost:9092 --list 创建topic 创建分区和副本数为1的topic ./bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --topic acltest --partitions 1 --replication-factor 1 创建kafka用户 …

酷轻松气囊按摩护膝全新上线,科技呵护膝部健康

在快节奏的现代生活中&#xff0c;膝部健康问题逐渐引起人们的重视。长时间的站立、行走或运动&#xff0c;都可能对膝部造成不同程度的压力和损伤。 特别是家里有老人一直被老寒腿、关节发凉疼痛困扰的&#xff0c;经常一遇到下雨天&#xff0c;膝盖就不舒服&#xff1b;尤其到…

2 .Gen<I>Cam模块介绍

模块组成&#xff1a;GenApi&#xff0c;SFNC&#xff0c;GenTL&#xff0c;GenDC&#xff0c;GenCP。 首先让我来看下 GenTL (Transport Layer) GenApi( sometimes simply called the GenICam Standard) 传统相机应用程序二次开发&#xff0c;是基于相机厂家提供的sdk。使用…

python:消息推送 - 飞书机器人推送 - 富文本格式

简介&#xff1a;机器人 ( bot ) 是一种自动化的程序&#xff0c;可以用拟人化的身份自动推送消息&#xff0c;或在聊天里与你进行简单的交互。在自动化完成测试任务后&#xff0c;推送测试报告等是一种很常用的收尾工具。 历史攻略&#xff1a; python&#xff1a;消息推送 …