struct2 如何返回 JSON 数据 (最最简单的方式,使用 stuct2-json-plugin 即可)

一、爬坑之路

困扰了我很久的问题终于解决了!!!

今天记录一下

网上我查阅过许多 struct2 返回 JSON 数据格式的方式,比如使用 Servlet 阶段的 PrintWriter,还有自己转换成 InputStream 流返回 JSON 数据,甚至还有自己封装 JSON 格式数据的。 但是大部分尝试过,但是发现用不了,后来发现了 stuct2 自带的 json 转换的数据就很方便。

就是这个插件
在这里插入图片描述
使用这个插件之后,就不需要我们自己另外导 json 数据转换的包了,使用 struct2 自带的 ognl 表达式就可以帮我们注入数据

二、环境搭建

我搭建的是 SSH (stuct2 + hibernate5 + spring5)环境,项目采用 Maven 构建,开发工具是 Idea 2019

感兴趣的同学可以看一看
SSH 开发脚手架

今天只讲 stuct2 如何返回 JSON 数据

2.1 stuct2 的 pom 依赖

    <!-- struts2依赖 -->
    <dependency>
      <groupId>org.apache.struts</groupId>
      <artifactId>struts2-core</artifactId>
      <version>2.3.35</version>
    </dependency>

    <!-- json 数据处理,struts 插件 -->
    <dependency>
      <groupId>org.apache.struts</groupId>
      <artifactId>struts2-json-plugin</artifactId>
      <version>2.3.8</version>
    </dependency>

2.2 开发工具配置

这里是我们需要自己添加进去的,不然开发工具识别不了我们写的东西,不然后面写 struct2 配置文件的时候就会爆红

在这里插入图片描述

在这里插入图片描述在这里插入图片描述

三、代码编写

3.1 编写 AjaxAction

比如我们想要返回一个字符串,就要在在成员变量(“全局变量”)中添加它,并给予对应的 getter 和 setter 方法,你要问为什么,这就是 ognl 表达式要做的事情。

比如我要做一个账户的用户名验证的功能,所以我可以这么写

@Controller("aa")
public class AjaxAction extends ActionSupport {
    private String uname; // 接收前端的用户名
    private String msg;  // 要返回的内容

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    // 返回简单字符串
    public String teststring() {
        // 判断用户是否存在
        if (uname.equals("admin")) {
            msg="账户已经有人注册了";
        } else {
            msg="账户可以使用";
        }
        return "success";
    }
}

3.2 前端页面编写

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <jsp:include page="base.jsp"/>  <!-- 这里我引用了 BootStrap 的库 和 JQuery 的库 -->
</head>
<body>
<div class="container">
    <form action="checklogin" method="post" class="form-horizontal">
        <div class="form-group">
            <label for="username" class="col-sm-2 control-label">账户:</label>
            <div class="col-sm-10">
                <input type="text" class="form-control" name="username" id="username" placeholder="请输入你的账户">
            </div>
        </div>
        <div class="col-sm-offset-2 col-sm-10">
            <input type="submit" class="btn btn-primary" value="Submit"/>
        </div>
    </form>
</div>
<script type="text/javascript">
    $("#username").on("change",function () {
        $.ajax({
            url: 'checkajax',
            data: {
                uname: $("#username").val()
            },
            type: "POST",
            success:function (data) {
                console.log(data)
            }
        })
    })
</script>
</body>
</html>

3.3 struct2 配置文件编写

这里的 root 就代表你要返回的数据

	<!-- 因为返回的是 JSON 数据,所以这里要继承于 json-default,如果这里爆红,就说明你没有在 idea 中添加它的配置 -->
    <package name="ajax" namespace="/" extends="json-default" >
        <action name="checkajax" class="aa" method="teststring">
            <result name="success" type="json">
                <param name="root">msg</param>
            </result>
        </action>
    </package>

3.4 运行效果图

在这里插入图片描述
在这里插入图片描述

如果你想要返回 list ,步骤是一样的,和 msg 是一样的方法,使用 ognl 表达式来帮我们完成数据的返回

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值