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

相关文章
|
5月前
|
SQL 数据可视化 关系型数据库
MCP与PolarDB集成技术分析:降低SQL门槛与简化数据可视化流程的机制解析
阿里云PolarDB与MCP协议融合,打造“自然语言即分析”的新范式。通过云原生数据库与标准化AI接口协同,实现零代码、分钟级从数据到可视化洞察,打破技术壁垒,提升分析效率99%,推动企业数据能力普惠化。
469 3
|
7月前
|
存储 关系型数据库 数据库
附部署代码|云数据库RDS 全托管 Supabase服务:小白轻松搞定开发AI应用
本文通过一个 Agentic RAG 应用的完整构建流程,展示了如何借助 RDS Supabase 快速搭建具备知识处理与智能决策能力的 AI 应用,展示从数据准备到应用部署的全流程,相较于传统开发模式效率大幅提升。
附部署代码|云数据库RDS 全托管 Supabase服务:小白轻松搞定开发AI应用
|
8月前
|
人工智能 安全 机器人
无代码革命:10分钟打造企业专属数据库查询AI机器人
随着数字化转型加速,企业对高效智能交互解决方案的需求日益增长。阿里云AppFlow推出的AI助手产品,借助创新网页集成技术,助力企业打造专业数据库查询助手。本文详细介绍通过三步流程将AI助手转化为数据库交互工具的核心优势与操作指南,包括全场景适配、智能渲染引擎及零代码配置等三大技术突破。同时提供Web集成与企业微信集成方案,帮助企业实现便捷部署与安全管理,提升内外部用户体验。
794 12
无代码革命:10分钟打造企业专属数据库查询AI机器人
|
8月前
|
安全 druid Nacos
0 代码改造实现应用运行时数据库密码无损轮转
本文探讨了敏感数据的安全风险及降低账密泄漏风险的策略。国家颁布的《网络安全二级等保2.0标准》强调了企业数据安全的重要性。文章介绍了Nacos作为配置中心在提升数据库访问安全性方面的应用,并结合阿里云KMS、Druid连接池和Spring Cloud Alibaba社区推出的数据源动态轮转方案。该方案实现了加密配置统一托管、帐密全托管、双层权限管控等功能,将帐密切换时间从数小时优化到一秒,显著提升了安全性和效率。未来,MSE Nacos和KMS将扩展至更多组件如NoSQL、MQ等,提供一站式安全服务,助力AI时代的应用安全。
477 14
|
8月前
|
SQL 数据建模 关系型数据库
别光知道存数据库了,数据建模才是王道!(入门指南+实战代码)
别光知道存数据库了,数据建模才是王道!(入门指南+实战代码)
1630 4
|
7月前
|
安全 Java Nacos
0代码改动实现Spring应用数据库帐密自动轮转
Nacos作为国内被广泛使用的配置中心,已经成为应用侧的基础设施产品,近年来安全问题被更多关注,这是中国国内软件行业逐渐迈向成熟的标志,也是必经之路,Nacos提供配置加密存储-运行时轮转的核心安全能力,将在应用安全领域承担更多职责。
|
9月前
|
SQL 存储 自然语言处理
SQL的解析和优化的原理:一条sql 执行过程是什么?
SQL的解析和优化的原理:一条sql 执行过程是什么?
SQL的解析和优化的原理:一条sql 执行过程是什么?
|
11月前
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
1107 29
|
11月前
|
前端开发 数据安全/隐私保护 CDN
二次元聚合短视频解析去水印系统源码
二次元聚合短视频解析去水印系统源码
467 4

推荐镜像

更多
  • DNS