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

相关文章
|
29天前
|
SQL 数据可视化 关系型数据库
MCP与PolarDB集成技术分析:降低SQL门槛与简化数据可视化流程的机制解析
阿里云PolarDB与MCP协议融合,打造“自然语言即分析”的新范式。通过云原生数据库与标准化AI接口协同,实现零代码、分钟级从数据到可视化洞察,打破技术壁垒,提升分析效率99%,推动企业数据能力普惠化。
128 3
|
6月前
|
SQL 安全 关系型数据库
SQL注入之万能密码:原理、实践与防御全解析
本文深入解析了“万能密码”攻击的运行机制及其危险性,通过实例展示了SQL注入的基本原理与变种形式。文章还提供了企业级防御方案,包括参数化查询、输入验证、权限控制及WAF规则配置等深度防御策略。同时,探讨了二阶注入和布尔盲注等新型攻击方式,并给出开发者自查清单。最后强调安全防护需持续改进,无绝对安全,建议使用成熟ORM框架并定期审计。技术内容仅供学习参考,严禁非法用途。
901 0
|
5月前
|
存储 缓存 自然语言处理
评论功能开发全解析:从数据库设计到多语言实现-优雅草卓伊凡
评论功能开发全解析:从数据库设计到多语言实现-优雅草卓伊凡
129 8
评论功能开发全解析:从数据库设计到多语言实现-优雅草卓伊凡
|
5月前
|
SQL 存储 自然语言处理
SQL的解析和优化的原理:一条sql 执行过程是什么?
SQL的解析和优化的原理:一条sql 执行过程是什么?
SQL的解析和优化的原理:一条sql 执行过程是什么?
|
4月前
|
存储 关系型数据库 数据库
高性能云盘:一文解析RDS数据库存储架构升级
性能、成本、弹性,是客户实际使用数据库过程中关注的三个重要方面。RDS业界率先推出的高性能云盘(原通用云盘),是PaaS层和IaaS层的深度融合的技术最佳实践,通过使用不同的存储介质,为客户提供同时满足低成本、低延迟、高持久性的体验。
|
11月前
|
SQL 数据挖掘 测试技术
南大通用GBase8s数据库:LISTAGG函数的解析
南大通用GBase8s数据库:LISTAGG函数的解析
|
9月前
|
JSON 小程序 UED
微信小程序 app.json 配置文件解析与应用
本文介绍了微信小程序中 `app.json` 配置文件的详细
1309 12
|
9月前
|
SQL Java 数据库连接
如何在 Java 代码中使用 JSqlParser 解析复杂的 SQL 语句?
大家好,我是 V 哥。JSqlParser 是一个用于解析 SQL 语句的 Java 库,可将 SQL 解析为 Java 对象树,支持多种 SQL 类型(如 `SELECT`、`INSERT` 等)。它适用于 SQL 分析、修改、生成和验证等场景。通过 Maven 或 Gradle 安装后,可以方便地在 Java 代码中使用。
2755 11
|
10月前
|
存储 关系型数据库 MySQL
double ,FLOAT还是double(m,n)--深入解析MySQL数据库中双精度浮点数的使用
本文探讨了在MySQL中使用`float`和`double`时指定精度和刻度的影响。对于`float`,指定精度会影响存储大小:0-23位使用4字节单精度存储,24-53位使用8字节双精度存储。而对于`double`,指定精度和刻度对存储空间没有影响,但可以限制数值的输入范围,提高数据的规范性和业务意义。从性能角度看,`float`和`double`的区别不大,但在存储空间和数据输入方面,指定精度和刻度有助于优化和约束。
1494 5
|
11月前
|
机器学习/深度学习 数据采集 数据挖掘
Python编程语言的魅力:从入门到进阶的全方位解析
Python编程语言的魅力:从入门到进阶的全方位解析

推荐镜像

更多
  • DNS