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

Java Web核心数据交互技术全解析

在Java Web开发中,客户端与服务器之间的数据交互是核心环节,涉及数据格式转换、请求参数传递、文件上传以及用户状态保持等关键技术。本文将系统梳理JSON与Java对象的转换、URL参数获取、文件上传、Cookie与Session机制等核心内容,结合实际代码示例与场景类比,帮助开发者全面掌握Java Web数据交互的实现方法。

Json是客户端和服务器进行交互的一种数据格式。

它使用一个字符串来表示对象或者数组等元素。
数组用[]表示,对象使用{}表示,属性和值之间使用:来进行分割,键值对之间使用,来分割。

下面我们来讲一下Java的对象和Json之间如何进行转换:

Json转Java对象

@Testvoid testObject2Json() throws JsonProcessingException {ObjectMapper objectMapper = new ObjectMapper();//创建Java对象UserInfo userInfo = new UserInfo();userInfo.setName("张三");userInfo.setGender(1);userInfo.setAge(18);//对象转jsonString s=objectMapper.writeValueAsString(userInfo);System.out.println(s);}

Java对象转Json

 @Testvoid testJson2Object() throws JsonProcessingException {ObjectMapper objectMapper = new ObjectMapper();//定义一个json字符串String s = "{\"age\":18,\"gender\":1,\"name\":\"张三\"}\n";//json转对象
//        UserInfo userInfo = objectMapper.readValue(s, UserInfo.class);UserInfo userInfo=objectMapper.readValue(s,UserInfo.class);System.out.println(userInfo);}

在请求中传递Json对象

@RequestMapping("r11")
//    @RequestBody表示传递的是一个json对象public String r11(@RequestBody UserInfo userInfo){userInfo.getName();return userInfo.toString();}

我们再Postman中应该这样构造请求:

从URL中获取数值

//从url中获取参数@RequestMapping("/article/{articleId}")public String r12(@PathVariable Integer articleId){return "获取文章id: "+articleId;}//也可以同时获取多个参数,并重命名@RequestMapping("/article/{type}/{articleId}") //后面写的{}参数在发送请求的时候必须要传。public String r13(@PathVariable Integer articleId,@PathVariable("type") Integer articleType){return "获取文章ID:"+articleId +",type: "+articleType;}


这里需要注意的当我们写了两个数值的位置,就要在URL中传输两个参数。
以“r13”这个方法为例,我们必须要同时传入type和articliId这两个参数。
同时我们也可以对传入的参数进行重命名:比如在这个方法里我们就把type重命名为articleType.

上传文件

//上传文件@RequestMapping("/r14")//下面这个@RequestPart ("file11")MultipartFile file 表示把请求时输入的file11赋值给new出来的file对象(相当于是重命名)public String r13(@RequestPart ("file11")MultipartFile file) throws IOException {System.out.println(file.getOriginalFilename());file.transferTo(new File("D:\\temp\\" +file.getOriginalFilename()));return "文件上传成功";}

在Postman中应该像下面这样发送请求:



最终我们在这个路径之下也找到了刚刚要上传的文件。

Cookie和Session

我们以去医院看病为例,去医院我们首先需要在该家医院建档,所新建的这个档中就包含了我们每个人的基本信息(姓名,身份证号等等)。
建档完成之后,医院会给我们一张诊疗卡(这张卡片上通常会有一个ID)。
之后我们就会拿着这张诊疗卡去挂号,看病,取药。

这个诊疗卡的作用十分关键,医生就是通过这个诊疗卡上的ID去医院的服务器上查询资料,而医院的服务器中就存储了病人的详细信息。

在上述过程中,这个诊疗卡就相当于是Cookie,而病人的详细信息就相当于是session.

所以通过上述这个场景我们便不难发现:
诊疗卡(Cookie)存储在用户自己手里(对应 Cookie是存储在客户端上的),而档案(Session)只存在医院服务器(对应 Session是存储在服务器上的)。
诊疗卡(Cookie)只有ID(轻量标识),并不包含完整的个人信息(大量数据),完整信息都在服务器(Session)里。

无状态协议

HTTP 协议⾃⾝是属于 "⽆状态" 协议。
"⽆状态" 的含义指的是:
默认情况下 HTTP 协议的客⼾端和服务器之间的这次通信, 和下次通信之间没有直接的联系.
但是实际开发中, 我们很多时候是需要知道请求之间的关联关系的.
例如登陆⽹站成功后, 第⼆次访问的时候服务器就能知道该请求是否是已经登陆过了.这个过程就是Cookie和Session发挥了作用:

上图中的“令牌”通常就存储在Cookie字段当中。
服务器这边就需要存储“令牌”的信息,以及令牌所相对应的用户的信息。这个就是Session索要处理的工作。
由于服务器同⼀时刻收到的请求是很多的.
所以服务器就需要清楚区分每个请求是属于哪个⽤户, 于是就需要在服务器这边记录每个请求以及与⽤户的信息的对应关系.
Session是服务器为了保存⽤户信息⽽创建的⼀个特殊的对象。

SessionID

Session的本质就是⼀个 "哈希表", 存储了⼀些键值对结构.
Key 就是SessionID, Value 就是用户信息。
我们上述例子中诊疗卡中的ID,就可以看做是SessionID。

Session 默认是保存在内存中的. 如果重启服务器则 Session 数据就会丢失.

Cookie 和 Session 的区别

  1. Cookie 是客户端保存⽤户信息的⼀种机制,Session 是服务器端保存⽤户信息的⼀种机制。
  2. Cookie 和 Session之间主要是通过 SessionId 关联起来的, SessionId 是 Cookie 和 Session 之间的桥梁。
  3. Cookie 和 Session 经常会在⼀起配合使⽤,但是不是必须配合。
  4. Session 中的sessionId 也不需要⾮得通过 Cookie/Set-Cookie 传递, 也可以通过URL传递。

结语

本文介绍了JSON与Java对象的转换、请求参数传递、文件上传,以及Cookie与Session的状态保持机制,结合代码示例与场景类比。在实际开发中,需根据业务场景选择合适的参数传递方式与状态保持方案,同时注意Session的持久化与Cookie的安全性,确保应用的高效与可靠。

http://www.dtcms.com/a/609236.html

相关文章:

  • UML建模工具Enterprise Architect在DevOps中如何实现架构模型同步
  • 数据库-MYSQL作业五
  • 磁共振成像原理(理论)36:回波平面成像 (Echo-Planar Imaging)
  • mysql占用内存过大问题排查
  • 手游网站做cpc还是cpm广告号岳阳高端网站建设
  • 通过美剧学英语---学习笔记(2)
  • 【数据结构】排序详解:从快速排序分区逻辑,到携手冒泡排序的算法效率深度评测
  • 设计稿还原技巧:解决间距、阴影、字体适配的细节问题
  • 【034】Dubbo3从0到1系列之dubbo-remoting模块
  • 【数据结构】并查集(操作详解 + 模板 + 练习)
  • JS Map 函数的二度回炉
  • 网站建设类公司排名wordpress3.5.2
  • uniapp写H5授权登录及分享,返回到目标页面
  • 奥卡姆剃刀原理:机器学习中的简约哲学与实践指南
  • ASC学习笔记0007:用于与GameplayAbilities系统交互的核心ActorComponent
  • 福永附近做网站公司广州公共资源交易中心交易平台
  • 深入理解 Swift TaskGroup:从基础用法到性能优化的完整指南
  • csharp通过对象和模板字符串解析模板
  • MYSQL结构操作DDL指令1.数据库操作
  • 为什么会有免费制作网站wordpress建站腾讯云
  • 仓颉迁移实战:将 Node.js 微服务移植到 Cangjie 的工程化评测
  • Redis(六)——哨兵
  • 网站错敏词整改报告,如何整改后如何定期自查自检
  • 网站验收时项目建设总结报告网站建设与维护本科教材
  • 【Java】使用国密2,3,4.仿照https 统一请求响应加解密
  • 华为对象存储:nginx代理临时访问地址后访问报错:Authentication Failed
  • 【2025-11-13】软件供应链安全日报:最新漏洞预警与投毒预警情报汇总
  • 【玩转多核异构】T153核心板RISC-V核的实时性应用解析
  • 单周期Risc-V指令拆分与datapath绘制
  • Java+EasyExcel 打造学习平台视频学习时长统计系统