化繁为简的魔法:Struts 2 与 JSON 联手打造超流畅数据交换体验,让应用飞起来!

简介: 【8月更文挑战第31天】在现代 Web 开发中,JSON 成为数据交换的主流格式,以其轻量、易读和易解析的特点受到青睐。Struts 2 内置对 JSON 的支持,结合 Jackson 库可便捷实现数据传输。本文通过具体示例展示了如何在 Struts 2 中进行 JSON 数据的序列化与反序列化,并结合 AJAX 技术提升 Web 应用的响应速度和用户体验。

在现代 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 结合的更多可能性,以满足不同的业务需求。

相关文章
|
7月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
1238 152
|
7月前
|
SQL 人工智能 Linux
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
624 5
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
|
6月前
|
SQL 存储 监控
SQL日志优化策略:提升数据库日志记录效率
通过以上方法结合起来运行调整方案, 可以显著地提升SQL环境下面向各种搜索引擎服务平台所需要满足标准条件下之数据库登记作业流程综合表现; 同时还能确保系统稳健运行并满越用户体验预期目标.
346 6
|
7月前
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
493 2
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
1244 29
|
前端开发 数据安全/隐私保护 CDN
二次元聚合短视频解析去水印系统源码
二次元聚合短视频解析去水印系统源码
514 4
|
JavaScript 算法 前端开发
JS数组操作方法全景图,全网最全构建完整知识网络!js数组操作方法全集(实现筛选转换、随机排序洗牌算法、复杂数据处理统计等情景详解,附大量源码和易错点解析)
这些方法提供了对数组的全面操作,包括搜索、遍历、转换和聚合等。通过分为原地操作方法、非原地操作方法和其他方法便于您理解和记忆,并熟悉他们各自的使用方法与使用范围。详细的案例与进阶使用,方便您理解数组操作的底层原理。链式调用的几个案例,让您玩转数组操作。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
移动开发 前端开发 JavaScript
从入门到精通:H5游戏源码开发技术全解析与未来趋势洞察
H5游戏凭借其跨平台、易传播和开发成本低的优势,近年来发展迅猛。接下来,让我们深入了解 H5 游戏源码开发的技术教程以及未来的发展趋势。
|
存储 前端开发 JavaScript
在线教育网课系统源码开发指南:功能设计与技术实现深度解析
在线教育网课系统是近年来发展迅猛的教育形式的核心载体,具备用户管理、课程管理、教学互动、学习评估等功能。本文从功能和技术两方面解析其源码开发,涵盖前端(HTML5、CSS3、JavaScript等)、后端(Java、Python等)、流媒体及云计算技术,并强调安全性、稳定性和用户体验的重要性。
下一篇
开通oss服务