在现代 Web 应用中,JSON(JavaScript Object Notation)已经成为了一种广泛使用的数据交换格式。它以轻量级、易读性强、易于解析等特点深受开发者喜爱。Struts 2 框架内置了对 JSON 的支持,使得开发者能够方便地在客户端与服务器之间传输数据。本文将通过具体的示例来展示如何在 Struts 2 应用中实现 JSON 数据的序列化与反序列化,以及如何与 AJAX 技术相结合,构建出响应迅速且用户体验良好的 Web 应用。
首先,确保你的 Struts 2 项目中已经包含了对 JSON 的支持。通常情况下,Struts 2 通过 Jackson 库来处理 JSON 数据。如果你还没有添加 Jackson 的依赖,可以在 Maven 的 pom.xml
文件中添加如下依赖:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.0</version>
</dependency>
接下来,创建一个简单的实体类 User
,用于存储用户信息。
package com.example.model;
public class User {
private String name;
private String email;
// Getter and Setter methods
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
然后,创建一个 Action 类来处理与用户相关的请求。这里我们将实现两个方法:一个用于将用户数据转换成 JSON 格式返回给客户端,另一个用于接收客户端发送过来的 JSON 数据并保存到数据库中。
package com.example.action;
import com.example.model.User;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
private User user;
private User savedUser;
// Getter and Setter methods
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public User getSavedUser() {
return savedUser;
}
public void setSavedUser(User savedUser) {
this.savedUser = savedUser;
}
public String getJsonData() {
// 假设这里有一个用户对象
savedUser = new User();
savedUser.setName("John Doe");
savedUser.setEmail("john.doe@example.com");
// 设置响应头为 JSON 格式
getServletResponse().setContentType("application/json;charset=UTF-8");
// 返回 JSON 数据
return SUCCESS;
}
public String saveUserData() {
// 假设这里有一个保存用户数据到数据库的逻辑
// user 对象已经由客户端传入
// 保存成功后返回 JSON 格式的数据
savedUser = user;
return SUCCESS;
}
}
在 struts.xml
文件中配置 Action,使其能够处理 JSON 数据。
<package name="default" namespace="/" extends="json-default">
<action name="getJsonData" class="com.example.action.UserAction">
<result name="success" type="json">
<param name="root">savedUser</param>
</result>
</action>
<action name="saveUserData" class="com.example.action.UserAction">
<result name="success" type="json">
<param name="root">savedUser</param>
</result>
</action>
</package>
上述配置中,json-default
包继承了默认的 JSON 配置,这样可以省略一些 JSON 相关的配置。<result>
元素指定了返回 JSON 数据,并设置了根对象为 savedUser
。
接下来,在客户端使用 AJAX 发送请求并处理响应。这里使用 jQuery 来演示如何实现这一点。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Struts 2 & JSON Example</title>
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
</head>
<body>
<h1>Get User Data</h1>
<button id="getUserData">Get Data</button>
<pre id="jsonData"></pre>
<h1>Save User Data</h1>
<form id="saveUserDataForm">
Name: <input type="text" id="name"><br>
Email: <input type="text" id="email"><br>
<button type="submit">Save Data</button>
</form>
<pre id="saveDataResult"></pre>
<script>
$(document).ready(function () {
$('#getUserData').click(function () {
$.getJSON('/getJsonData', function (data) {
$('#jsonData').text(JSON.stringify(data, null, 4));
});
});
$('#saveUserDataForm').submit(function (event) {
event.preventDefault();
var data = {
name: $('#name').val(),
email: $('#email').val()
};
$.ajax({
url: '/saveUserData',
type: 'POST',
contentType: 'application/json',
data: JSON.stringify(data),
success: function (response) {
$('#saveDataResult').text(JSON.stringify(response, null, 4));
}
});
});
});
</script>
</body>
</html>
在上述 HTML 页面中,#getUserData
按钮触发一个 GET 请求,从服务器获取用户数据,并将其显示在页面上。#saveUserDataForm
表单提交时,将表单数据序列化为 JSON 格式并通过 POST 请求发送到服务器。服务器端的 UserAction
类接收到 JSON 数据后,将其保存到 savedUser
对象,并返回同样的对象作为响应。
通过上述步骤,你已经成功地在 Struts 2 应用中实现了 JSON 数据的轻量级交换。这种做法不仅提升了应用的响应速度,还改善了用户体验。掌握了这些知识后,你可以进一步探索 Struts 2 与 JSON 结合的更多可能性,以满足不同的业务需求。