化繁为简的魔法: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 结合的更多可能性,以满足不同的业务需求。

相关文章
|
1月前
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
132 6
|
27天前
|
存储 安全 Java
系统安全架构的深度解析与实践:Java代码实现
【11月更文挑战第1天】系统安全架构是保护信息系统免受各种威胁和攻击的关键。作为系统架构师,设计一套完善的系统安全架构不仅需要对各种安全威胁有深入理解,还需要熟练掌握各种安全技术和工具。
78 10
|
24天前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
39 3
|
27天前
|
前端开发 JavaScript 开发者
揭秘前端高手的秘密武器:深度解析递归组件与动态组件的奥妙,让你代码效率翻倍!
【10月更文挑战第23天】在Web开发中,组件化已成为主流。本文深入探讨了递归组件与动态组件的概念、应用及实现方式。递归组件通过在组件内部调用自身,适用于处理层级结构数据,如菜单和树形控件。动态组件则根据数据变化动态切换组件显示,适用于不同业务逻辑下的组件展示。通过示例,展示了这两种组件的实现方法及其在实际开发中的应用价值。
33 1
|
15天前
|
SQL 监控 安全
员工上网行为监控软件:SQL 在数据查询监控中的应用解析
在数字化办公环境中,员工上网行为监控软件对企业网络安全和管理至关重要。通过 SQL 查询和分析数据库中的数据,企业可以精准了解员工的上网行为,包括基础查询、复杂条件查询、数据统计与分析等,从而提高网络管理和安全防护的效率。
26 0
|
1月前
|
SQL 监控 数据库
SQL语句是否都需要解析及其相关技巧和方法
在数据库管理中,SQL(结构化查询语言)语句的使用无处不在,它们负责数据的查询、插入、更新和删除等操作
|
1月前
|
机器学习/深度学习 人工智能 算法
揭开深度学习与传统机器学习的神秘面纱:从理论差异到实战代码详解两者间的选择与应用策略全面解析
【10月更文挑战第10天】本文探讨了深度学习与传统机器学习的区别,通过图像识别和语音处理等领域的应用案例,展示了深度学习在自动特征学习和处理大规模数据方面的优势。文中还提供了一个Python代码示例,使用TensorFlow构建多层感知器(MLP)并与Scikit-learn中的逻辑回归模型进行对比,进一步说明了两者的不同特点。
66 2
|
1月前
|
SQL 存储 数据库
SQL语句是否都需要解析及其相关技巧与方法
在数据库管理系统中,SQL(Structured Query Language)语句作为与数据库交互的桥梁,其执行过程往往涉及到一个或多个解析阶段
|
1月前
|
存储 搜索推荐 数据库
运用LangChain赋能企业规章制度制定:深入解析Retrieval-Augmented Generation(RAG)技术如何革新内部管理文件起草流程,实现高效合规与个性化定制的完美结合——实战指南与代码示例全面呈现
【10月更文挑战第3天】构建公司规章制度时,需融合业务实际与管理理论,制定合规且促发展的规则体系。尤其在数字化转型背景下,利用LangChain框架中的RAG技术,可提升规章制定效率与质量。通过Chroma向量数据库存储规章制度文本,并使用OpenAI Embeddings处理文本向量化,将现有文档转换后插入数据库。基于此,构建RAG生成器,根据输入问题检索信息并生成规章制度草案,加快更新速度并确保内容准确,灵活应对法律与业务变化,提高管理效率。此方法结合了先进的人工智能技术,展现了未来规章制度制定的新方向。
36 3
|
1月前
|
SQL 关系型数据库 MySQL
创建SQL数据库的基本步骤与代码指南
在信息时代,数据管理显得尤为重要,其中数据库系统已成为信息技术架构的关键部分。而当我们谈论数据库系统时,SQL(结构化查询语言)无疑是其中最核心的工具之一。本文将详细介绍如何使用SQL创建数据库,包括编写相应的代码和必要的步骤。由于篇幅限制,本文可能无法达到您要求的2000字长度,但会尽量涵盖创建数
51 3
下一篇
无影云桌面