文章目录
一、爬坑之路
困扰了我很久的问题终于解决了!!!
今天记录一下
网上我查阅过许多 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 表达式来帮我们完成数据的返回