在Action中以Struts2的方式输出JSON数据的实例
下面是整个Action的完整代码:
packagecn.ysh.studio.struts2.json.demo.action;
importjava.io.IOException;
importjava.io.PrintWriter;
importjava.util.HashMap;
importjava.util.Map;
importjavax.servlet.http.HttpServletResponse;
importorg.apache.struts2.ServletActionContext;
importnet.sf.json.JSONObject;
importcn.ysh.studio.struts2.json.demo.bean.User;
importcom.opensymphony.xwork2.ActionSupport;
publicclassUserActionextendsActionSupport{
/**
*
*/
privatestaticfinallongserialVersionUID=1L;
//将会被Struts2序列化为JSON字符串的对象
privateMap<String,Object>dataMap;
/**
*构造方法
*/
publicUserAction(){
//初始化Map对象
dataMap=newHashMap<String,Object>();
}
/**
*测试通过action以视图方式返回JSON数据
*@return
*/
publicStringtestByJSP(){
Useruser=newUser();
user.setId("123");
user.setName("JSONActionJSP");
user.setPassword("123");
user.setSay("Helloworld!");
JSONObjectjsonObject=newJSONObject();
jsonObject.accumulate("user",user);
jsonObject.accumulate("success",true);
//这里在request对象中放了一个data,所以struts的result配置中不能有type="redirect"
ServletActionContext.getRequest().setAttribute("data",jsonObject.toString());
returnSUCCESS;
};
/**
*测试通过action以Struts2默认方式返回JSON数据
*@return
*/
publicStringtestByAction(){
//dataMap中的数据将会被Struts2转换成JSON字符串,所以这里要先清空其中的数据
dataMap.clear();
Useruser=newUser();
user.setId("123");
user.setName("JSONActionStruts2");
user.setPassword("123");
user.setSay("Helloworld!");
dataMap.put("user",user);
//放入一个是否操作成功的标识
dataMap.put("success",true);
//返回结果
returnSUCCESS;
}
/**
*通过action是以传统方式返回JSON数据
*@throwsIOException
*/
publicvoiddoAction()throwsIOException{
HttpServletResponseresponse=ServletActionContext.getResponse();
//以下代码从JSON.java中拷过来的
response.setContentType("text/html");
PrintWriterout;
out=response.getWriter();
//将要被返回到客户端的对象
Useruser=newUser();
user.setId("123");
user.setName("JSONActionGeneral");
user.setPassword("JSON");
user.setSay("Hello,iamaactiontoprintajson!");
JSONObjectjson=newJSONObject();
json.accumulate("success",true);
json.accumulate("user",user);
out.println(json.toString());
//因为JSON数据在传递过程中是以普通字符串形式传递的,所以我们也可以手动拼接符合JSON语法规范的字符串输出到客户端
//以下这两句的作用与38-46行代码的作用是一样的,将向客户端返回一个User对象,和一个success字段
//StringjsonString="{\"user\":{\"id\":\"123\",\"name\":\"JSONActionGeneral\",\"say\":\"Hello,iamaactiontoprintajson!\",\"password\":\"JSON\"},\"success\":true}";
//out.println(jsonString);
out.flush();
out.close();
}
/**
*Struts2序列化指定属性时,必须有该属性的getter方法,实际上,如果没有属性,而只有getter方法也是可以的
*@return
*/
publicMap<String,Object>getDataMap(){
returndataMap;
}
}
完整的struts.xml配置文件如下:
<?xmlversion="1.0"encoding="UTF-8"?> <!DOCTYPEstrutsPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <packagename="json"extends="json-default"namespace="/test"> <actionname="testByAction" class="cn.ysh.studio.struts2.json.demo.action.UserAction"method="testByAction"> <resulttype="json"> <!--这里指定将被Struts2序列化的属性,该属性在action中必须有对应的getter方法--> <!--默认将会序列所有有返回值的getter方法的值,而无论该方法是否有对应属性--> <paramname="root">dataMap</param> <!--指定是否序列化空的属性--> <!-- <paramname="excludeNullProperties">true</param> --> <!--这里指定将序列化dataMap中的那些属性--> <!-- <paramname="includeProperties"> userList.* </param> --> <!--这里指定将要从dataMap中排除那些属性,这些排除的属性将不被序列化,一半不与上边的参数配置同时出现--> <!-- <paramname="excludeProperties"> SUCCESS </param> --> </result> </action> </package> <packagename="default"extends="struts-default"namespace="/"> <actionname="testJSONFromActionByGeneral" class="cn.ysh.studio.struts2.json.demo.action.UserAction"method="doAction"> </action> <actionname="testByJSP" class="cn.ysh.studio.struts2.json.demo.action.UserAction"method="testByJSP"> <resultname="success">/actionJSP.jsp</result> </action> </package> </struts>
以上这篇在Action中以Struts2的方式输出JSON数据的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。