SpringMVC前后端数据交互

一、JSON格式数据

1、定义

JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式,已被广泛用于数据保存和交换,是迄今为止最为理想的数据交换语言。

JSON 独立于编程语言

层次结构简洁和清晰

易于人阅读和编写,也易于机器解析和生成

有效的提升网络传输效率

2、数据格式

JSON数据是一系列键值对的集合,它由JSON对象和JSON数组组成,且它们之间可以嵌套使用。

JSON对象

以"{"开始,以"}"结束;每个item都是一个无序键值对,表示为"key : value";键值对之间使用逗号(英文状态)分隔。

JSON数组

以"["开始,以"]"结束;每一个元素可以是String、Number、Char、Boolean、null、Object对象,甚至可以是嵌套JSON数组;数组元素间使用逗号(英文状态)分隔;Java语言对应操作类JSONArray。

JS定义JSON数据

3、实例操作

(1)项目中引入Jackson/fastjson的依赖,调用JSON转换方法将对象或集合转换成JSON数据,然后通过HttpServletResponse将JSON数据写入到输出流中完成回写,具体实现步骤如下。创建JSONController.java文件,在JSONController类中新增showJson()方法,用于将对象转换成JSON数据并完成回写。

(2)启动项目,浏览器中访问地址http://localhost:8080/api/showJson。访问后,页面显示效果如图所示。

4、@ResponseBody注解

@ResponseBody是将处理器返回的对象通过适当的转换器转换为指定的格式(JSON 或XML格式),写入到HttpServletResponse对象的body区。使用此注解后不会再走视图处理器,而是直接将数据写入到输出流中。

@ResponseBody注解可以标注在方法和类上,标注在类上时,表示该类中所有方法均应用@ResponseBody注解。

如果@ResponseBody注解加在类上,也可以使用@RestController注解代替,该注解相当于@Controller+ @ResponseBody两个注解的结合。

返回值为String

返回值为JavaBean

返回值为集合

如果返回值是字符串,那么直接将字符串写到客户端;如果是一个对象,会将对象转化为JSON字符串,然后写到客户端。

中文乱码

二、Ajax异步请求

1、发送数据方式

地址参数(Url Param)

请求参数(Query Param)

表单提交(form-urlencoded)

异步请求:json格式、二进制格式(form-data)、其他格式

2、定义

Ajax即Asynchronous JavaScript And XML(异步JavaScript和XML),用来描述一种使用现有技术集合的'新'方法,包括:HTML或 XHTML, CSS, JavaScript, DOM, XML, XSLT, 以及最重要的XMLHttpRequest。使用Ajax技术网页应用能够快速地将增量更新呈现在用户界面上,而不需要重载(刷新)整个页面,这使得程序能够更快地回应用户的操作。

AJAX 并非编程语言,AJAX 仅仅组合了: 1. 浏览器内建的 XMLHttpRequest 对象(从 Web 服务器请求数据) 2. JavaScript 和 HTML DOM(显示或使用数据)

Ajax 是一个令人误导的名称。Ajax 应用程序可能使用 XML 来传输数据,但将数据作为纯文本或 JSON 文本传输也同样常见。

Ajax 允许通过与场景后面的 Web 服务器交换数据来异步更新网页。这意味着可以更新网页的部分,而不需要重新加载整个页面。

3、工作原理

4、JS发送Ajax请求

语法

5、Jquery发送Ajax请求

6、实操

(1)使用Ajax无页面刷新方式,访问后端接口来添加商品数据。创建jsp页面,编写ajax请求。

(2)创建controller,编写接口方法。

(3)在浏览器中访问product_add.jsp页面,访问地址为http://localhost:8080/product_add.jsp。点击添加商品后,页面显示效果如图所示:

三、服务端Session会话

在Web工程中,如果需要跨请求、跨页面共享数据,就需要将数据存储到session域中,即服务器内存中。SpringMVC通常有以下两种方式:

1、方式一:HttpSession

2、方式二:@SessionAtt

3、清除Session

4、案例:实现用户登录。

运行效果如下: 输入用户名:张哲、密码:123,登陆成功

否则,登录失败

(1)创建工程,引入JSON相关依赖(Jackson/FastJson)。

<!-- fastjson2 -->

<dependency>

<groupId>com.alibaba.fastjson2</groupId>

<artifactId>fastjson2</artifactId>

<version>2.0.37</version>

</dependency>

<!-- fastjson -->

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>fastjson</artifactId>

<version>2.0.32</version>

</dependency>

<!-- jackson-core -->

<dependency>

<groupId>com.fasterxml.jackson.core</groupId>

<artifactId>jackson-core</artifactId>

<version>2.16.0</version>

</dependency>

<!-- jackson-databind -->

<dependency>

<groupId>com.fasterxml.jackson.core</groupId>

<artifactId>jackson-databind</artifactId>

<version>2.16.0</version>

</dependency>

<!-- jackson-annotations -->

<dependency>

<groupId>com.fasterxml.jackson.core</groupId>

<artifactId>jackson-annotations</artifactId>

<version>2.16.0</version>

</dependency>

(2)在WebContent下新建"statics/js"文件夹,加入JQuery框架脚本"jquery-3.7.1.min.js"。

(3)创建login.jsp页面,通过该页面发送Ajax请求完成登录逻辑功能。 页面中引入JQuery框架脚本,并为"提交"按钮增加"onclick"事件,在事件中发送Ajax请求。

(4)在Controller中,新增login()处理Ajax异步登录请求。当账号密码正确时,返回成功信息;否则返回失败信息。

四、解决跨域问题

1、前后端分离

传统的单体架构是前后端不分离的架构。前端(用户界面)和后端(服务器端)代码都在同一个项目中,并且由同一套服务器技术生成。这种情况下,服务器端不仅负责处理业务逻辑,还要负责生成和返回前端的HTML页面。

在前后端分离的架构中,前端和后端是相互独立的两个应用,分别单独部署。前端负责用户界面的展示和交互,后端负责处理业务逻辑和数据处理。前端通过AJAX等技术向后端的API接口发送HTTP请求,后端将处理请求并返回JSON或其他数据格式作为响应。

2、跨域问题

在前后端分离项目中,前端通过Ajax等技术向后端API接口发起请求时都会遇到跨域问题,跨域问题产生的原因是浏览器的同源策略。

3、浏览器同源策略

浏览器的同源策略是一种重要的安全机制,用于防止一个网站的脚本与另一个网站的内容进行交互。 确保了敏感数据(如用户登录状态、个人信息等)的安全,防止了恶意脚本对数据的非法访问和操作。

4、CORS解决方案

CORS是一个W3C标准,全称是跨域资源共享(Cross-Origin Resource Sharing)。CORS是通过在服务器端的响应中添加一个 Access-Control-Allow-Origin 标头,指定允许跨域的请求来源,通过这种方式允许指定源向服务器发出异步跨域 HTTP 请求,从而克服了同源使用的限制。

(1)方式一:@CrossOrigin注解

(2)方式二:全局配置

相关推荐
来啦来啦~10 小时前
vue项目实现动效交互---lottie动画库
前端·vue.js·交互
PM大明同学16 小时前
Axure PR 9 二级滑动选择器 设计&交互
交互·axure
好开心332 天前
js高级06-ajax封装和跨域
开发语言·前端·javascript·ajax·okhttp·ecmascript·交互
狸克先生3 天前
如何用AI写小说(二):Gradio 超简单的网页前端交互
前端·人工智能·chatgpt·交互
dot.Net安全矩阵4 天前
.NET 通过模块和驱动收集本地EDR的工具
windows·安全·web安全·.net·交互
梓贤Vigo4 天前
【Axure视频教程】自制上传按钮
交互·产品经理·axure·原型·教程
好开心335 天前
javaScript交互案例2
开发语言·前端·javascript·html·ecmascript·交互
xChive5 天前
优化表单交互:在 el-select 组件中嵌入表格显示选项
前端·vue.js·交互·element-plus
前端郭德纲6 天前
React Native的界面与交互
react native·react.js·交互