Struts2 返回JSON、XML的几种方式

返回JSON
struts2要返回JSON,需要在Action中定义该变量,如data1,然后定义该变量的get、set方法。

第一种方式
将Action中定义了get方法的变量全部返回,==注意package必须extends= “json-default”==,对应的struts.xml如下:

<package name="default" extends="struts-default,json-default">
<action name="dataMap" class="action.testAction" method="initData">
<result name="dataMap" type="json"></result>
</action>
</package>
testAction如下:

private Map<String,Object> dataMap;
public String initData() throws JSONException{
dataMap = new HashMap<String, Object>();
User user = new User();
user.setUname("张三");
user.setUpassword("123");
dataMap.put("user", user);
// 放入一个是否操作成功的标识
dataMap.put("success", true);
return "dataMap";
}
public Map<String, Object> getDataMap() {
return dataMap;
}
前端的js请求代码如下:

$("#b1").click(function(){
$.post({
url:'dataMap',
data:"{}",
datatype:'json',
success:function(data){
console.log(data);
}
})
})
==这种方法不好的地方是会将Action中所有具有get方法的变量都返回回去==,比如在testAction中又定义了变量data2,如果想不返回data2,则需要给getData2加上注解

//设置data2属性不作为json的内容返回
@JSON(serialize=false)
public String getData2() {
return data2;
}


第二种方式
如果想根据不同的请求返回相应的值,使用另一种方法,struts.xml如下

<action name="dataMap" class="action.testAction" method="tests">
<result name="dataMap" type="json">
<param name="root">dataMap</param>
</result>
</action>
只会返回<param name="root">变量</param>中定义的变量

返回XML
要点
1,ajax的基本交互方式

2,获取json数据的交互方式

应用
应用一:发送ajax请求,获取普通的文本信息

(1),页面跟之前一样,没有什么区别

<script type="text/javascript" src="js/jquery-1.8.2.js"></script>
<script type="text/javascript">
$(function() {
$('#btn').click(function() {
$.post("ajax.action", function(data) {
$('#msg').html(data);
});
});
});
</script>
(2),编写对应的Action类来处理

public class AjaxAction {
public String ajax() throws IOException{
HttpServletResponse resp = ServletActionContext.getResponse();
resp.setCharacterEncoding("utf-8");
resp.getWriter().print("struts ajax");
return null;
}
}
==注意!!,此处返回的是null==

(3),struts.xml,无需配置结果集

<action name="ajax" class="com.dream.AjaxAction" method="ajax">
</action>
应用二:发送ajax请求,获取json数据

注意:这里需要借助struts的插件来完成对json数据的响应到struts软件包查找

json-lib-2.3-jdk15.jar
ezmorph-1.0.6.jar
commons-lang-2.4.jar
commons-logging-1.1.3.jar
commons-collections-3.1.jar
commons-beanutils-1.8.0.jar
struts2-json-plugin-2.3.20.1.jar
步骤

继承json-default
在Action对返回的数据root赋值
在struts.xml配置root
代码示例
struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="json-default">
<action name="ajax" class="com.qianfeng.action.AjaxAction" method="ajax">
</action>
<action name="json" class="com.qianfeng.action.JsonAction" method="json">
<result type="json">
<param name="root">students</param>
</result>
</action>
</package>
</struts>
AjaxAction.java

package com.qianfeng.action;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
public class AjaxAction {
public String ajax() throws IOException {
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("hello,ajax");
return null;
}
}
JsonAction.java

package com.qianfeng.action;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.Action;
import com.qianfeng.entity.Student;
import net.sf.json.JSONArray;
public class JsonAction {
private List<Student> students;
/*public String json() throws IOException {
List<Student> students = new ArrayList<>();
students.add(new Student("zhangsan", 19));
students.add(new Student("mayun", 58));
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/html;charset=utf-8");
JSONArray jsonArray = JSONArray.fromObject(students);
response.getWriter().write(jsonArray.toString());
return null;
}*/
public String json() throws IOException {
students = new ArrayList<>();
students.add(new Student("zhangsan", 19));
students.add(new Student("mayun", 58));
return Action.SUCCESS;
}
public List<Student> getStudents() {
return students;
}
public void setStudents(List<Student> students) {
this.students = students;
}
}
Ajax.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="js/jquery-1.8.2.js"></script>
<script type="text/javascript">
$(function(){
$("#btn").click(function(){
$.post("ajax.action",function(data){
$("#msg").html(data);
})
});
})
</script>
</head>
<body>
<input type="button" value="ajax" id="btn"/>
<div id="msg"></div>
</body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值