文章目录

  • 一、爬坑之路
  • 二、环境搭建
  • 2.1 stuct2 的 pom 依赖
  • 2.2 开发工具配置
  • 三、代码编写
  • 3.1 编写 AjaxAction
  • 3.2 前端页面编写
  • 3.3 struct2 配置文件编写
  • 3.4 运行效果图

一、爬坑之路

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

今天记录一下

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

就是这个插件

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

使用这个插件之后,就不需要我们自己另外导 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 配置文件的时候就会爆红

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

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

三、代码编写

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 运行效果图

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

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

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