注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

0与1构筑世界,程序员创造时代

软件架构设计 Java编程

 
 
 

日志

 
 

Struts2 - 支持JSON / Using json in struts2  

2010-08-23 14:42:20|  分类: Java |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
  文章声明

作者:傲风(aofengblog@163.com)       编写时间:2010年08月23日

网址:http://aofengblog.blog.163.com

作者保留所有权利,转载请保留文章全部内容!



思路:通过Result将Action中指定的数据序列化成JSON。

工作环境(Runtime Enviroment)

struts2-2.1.6
json-lib-2.3-jdk15.jar
flexjson-1.9.2.jar
ezmorph-1.0.6.jar
commons-lang-2.5.jar
commons-collections-3.2.1.jar

实现步骤(Step By Step)

1、编写JSON Result类。
package cn.aofeng.common.util.json;

import java.io.OutputStream;

import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONObject;

import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.StrutsException;
import org.apache.struts2.dispatcher.StrutsResultSupport;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;

/**
 * Struts2插件:JSON响应类型定义.
 *
 @author aofeng

 */
public class JSONResult extends StrutsResultSupport {
    private static final Logger _logger = Logger.getLogger(JSONResult.class);
    
    private String jsonObjectProperty = "jsonObject";
    private String contentType = JSONSerializerUtils.JSON_MIME_TYPE;
    private String encoding = "UTF-8";
    
    public JSONResult() {
        
    }

    public String getJSONObjectProperty() {
        return jsonObjectProperty;
    }

    public void setJSONObjectProperty(String jsonObject) {
        jsonObjectProperty = jsonObject;
    }

    public String getContentType() {
        return contentType;
    }

    public void setContentType(String contentType) {
        this.contentType = contentType;
    }

    public String getEncoding() {
        return encoding;
    }

    public void setEncoding(String encoding) {
        this.encoding = encoding;
    }

    public void doExecute(String finalLocation, ActionInvocation invocation)
            throws Exception {
        JSONObject jsonObject = getJSONObject(invocation);
        if (jsonObject != null) {
            String json = jsonObject.toString();
            HttpServletResponse response = getServletResponse(invocation);
            response.setContentType(getContentType());
            response.setContentLength(json.getBytes(this.encoding).length);
            OutputStream os = response.getOutputStream();
            os.write(json.getBytes(this.encoding));
            os.flush();
        }
    }

    protected JSONObject getJSONObject(ActionInvocation invocation) {
        ActionContext actionContext = invocation.getInvocationContext();
        Object obj = actionContext.getValueStack().findValue(jsonObjectProperty);
        if (obj == null) {
            _logger.error("property [" + jsonObjectProperty + "] returns null, expecting JSONObject"new StrutsException("StrutsException"));
            return null;
        }
        if (!(JSONObject.class).isInstance(obj)) {
            _logger.error("property [" + jsonObjectProperty + "] is [" + obj + "] especting an instance of JSONObject"new StrutsException());
            return null;
        else {
            return (JSONObjectobj;
        }
    }

    protected HttpServletResponse getServletResponse(ActionInvocation invocation) {
        return (HttpServletResponseinvocation.getInvocationContext().get(ServletActionContext.HTTP_RESPONSE);
    }

}

2、在Struts2中配置result type。
<result-types>
    <result-type name="json" class="cn.aofeng.common.util.json.JSONResult">
        <param name="jsonObjectProperty">jsonObject</param>
        <param name="contentType">application/json</param>
        <param name="encoding">UTF-8</param>
    </result-type>
</result-types>


3、在Action中返回JSON数据。
  1)公共代码
部分。
    /**
   * 响应类型:JSON.
   */
  protected final static String JSON = "json";
  private JSONObject _jsonObject = new JSONObject();
  
  public JSONObject getJsonObject() {
      return _jsonObject;
  }
  
  /**
   * 添加需转化成JSON的数据.
   
   @param key 键.
   @param value 值.
   */
  protected void putJsonElement(String key, Object value) {
      _jsonObject.put(key, value);
  }

2)各Action实际应用部分示例。

public String execute() throws Exception {
    List<String> data = new ArrayList();
    data.add(something);   
    putJsonElemnt("dataList", data);
   
    return JSON;
}

参考资料(Reference)

1、
http://struts.apache.org/2.0.14/struts2-core/apidocs/org/apache/struts2/dispatcher/StrutsResultSupport.html


<正文结束>
  评论这张
 
阅读(2254)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017