首页 > 编程 > Java > 正文

在Action中以Struts2的方式输出JSON数据的实例

2019-11-26 13:35:39
字体:
来源:转载
供稿:网友

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表