欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

在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数据的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。