在Action中以Struts2的方式输出JSON数据的实例
程序员文章站
2024-03-11 15:13:31
下面是整个action的完整代码:
package cn.ysh.studio.struts2.json.demo.action;
import jav...
下面是整个action的完整代码:
package cn.ysh.studio.struts2.json.demo.action; import java.io.ioexception; import java.io.printwriter; import java.util.hashmap; import java.util.map; import javax.servlet.http.httpservletresponse; import org.apache.struts2.servletactioncontext; import net.sf.json.jsonobject; import cn.ysh.studio.struts2.json.demo.bean.user; import com.opensymphony.xwork2.actionsupport; public class useraction extends actionsupport { /** * */ private static final long serialversionuid = 1l; //将会被struts2序列化为json字符串的对象 private map<string, object> datamap; /** * 构造方法 */ public useraction() { //初始化map对象 datamap = new hashmap<string, object>(); } /** * 测试通过action以视图方式返回json数据 * @return */ public string testbyjsp() { user user = new user(); user.setid("123"); user.setname("jsonactionjsp"); user.setpassword("123"); user.setsay("hello world !"); jsonobject jsonobject=new jsonobject(); jsonobject.accumulate("user", user); jsonobject.accumulate("success", true); //这里在request对象中放了一个data,所以struts的result配置中不能有type="redirect" servletactioncontext.getrequest().setattribute("data", jsonobject.tostring()); return success; }; /** * 测试通过action以struts2默认方式返回json数据 * @return */ public string testbyaction() { // datamap中的数据将会被struts2转换成json字符串,所以这里要先清空其中的数据 datamap.clear(); user user = new user(); user.setid("123"); user.setname("jsonactionstruts2"); user.setpassword("123"); user.setsay("hello world !"); datamap.put("user", user); // 放入一个是否操作成功的标识 datamap.put("success", true); // 返回结果 return success; } /** * 通过action是以传统方式返回json数据 * @throws ioexception */ public void doaction() throws ioexception{ httpservletresponse response=servletactioncontext.getresponse(); //以下代码从json.java中拷过来的 response.setcontenttype("text/html"); printwriter out; out = response.getwriter(); //将要被返回到客户端的对象 user user=new user(); user.setid("123"); user.setname("jsonactiongeneral"); user.setpassword("json"); user.setsay("hello , i am a action to print a json!"); jsonobject json=new jsonobject(); json.accumulate("success", true); json.accumulate("user", user); out.println(json.tostring()); // 因为json数据在传递过程中是以普通字符串形式传递的,所以我们也可以手动拼接符合json语法规范的字符串输出到客户端 // 以下这两句的作用与38-46行代码的作用是一样的,将向客户端返回一个user对象,和一个success字段 // string jsonstring="{\"user\":{\"id\":\"123\",\"name\":\"jsonactiongeneral\",\"say\":\"hello , i am a action to print a json!\",\"password\":\"json\"},\"success\":true}"; // out.println(jsonstring); out.flush(); out.close(); } /** * struts2序列化指定属性时,必须有该属性的getter方法,实际上,如果没有属性,而只有getter方法也是可以的 * @return */ public map<string, object> getdatamap() { return datamap; } }
完整的struts.xml配置文件如下:
<?xml version="1.0" encoding="utf-8"?> <!doctype struts public "-//apache software foundation//dtd struts configuration 2.0//en" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="json" extends="json-default" namespace="/test"> <action name="testbyaction" class="cn.ysh.studio.struts2.json.demo.action.useraction" method="testbyaction"> <result type="json"> <!-- 这里指定将被struts2序列化的属性,该属性在action中必须有对应的getter方法 --> <!-- 默认将会序列所有有返回值的getter方法的值,而无论该方法是否有对应属性 --> <param name="root">datamap</param> <!-- 指定是否序列化空的属性 --> <!-- <param name="excludenullproperties">true</param> --> <!-- 这里指定将序列化datamap中的那些属性 --> <!-- <param name="includeproperties"> userlist.* </param> --> <!-- 这里指定将要从datamap中排除那些属性,这些排除的属性将不被序列化,一半不与上边的参数配置同时出现 --> <!-- <param name="excludeproperties"> success </param> --> </result> </action> </package> <package name="default" extends="struts-default" namespace="/"> <action name="testjsonfromactionbygeneral" class="cn.ysh.studio.struts2.json.demo.action.useraction" method="doaction"> </action> <action name="testbyjsp" class="cn.ysh.studio.struts2.json.demo.action.useraction" method="testbyjsp"> <result name="success">/actionjsp.jsp</result> </action> </package> </struts>
以上这篇在action中以struts2的方式输出json数据的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
上一篇: 微信公众帐号开发教程之图文消息全攻略
下一篇: form自动提交实例讲解