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

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

(0)

相关推荐

  • struts2 action跳转调用另一个程序

    目的:主要为了在一个Action成功后跳转调用另一个程序. Struts2.xml [html] 复制代码 代码如下: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.

  • 用js模拟struts2的多action调用示例

    最近修了几个struts2.1升级到2.3后动态方法调用失效的bug,深有感悟, 但是我那种原始方法有一个局限,就是在submit那里写下的action不起作用,就算启动了动态方法调用也不行(我想应该是struts2.3的一个bug),所以为了完善这个功能,这里我再说一个用js的方法. 在<s:submit value="提交" onclick="return submitAction('某某action')" />,添加onclick方法,然后再在js

  • 详解在Java的Struts2框架中配置Action的方法

    在Struts2中Action部分,也就是Controller层采用了低侵入的方式.为什么这么说?这是因为在Struts2中action类并不需要继承任何的基类,或实现任何的接口,更没有与Servlet的API直接耦合.它通常更像一个普通的POJO(通常应该包含一个无参数的execute方法),而且可以在内容定义一系列的方法(无参方法),并可以通过配置的方式,把每一个方法都当作一个独立的action来使用,从而实现代码复用. 例如: package example; public class U

  • Struts中的Action 单例与多例详解

     Struts中的Action 单例与多例详解 struts2中action是多例的,即每次访问网络地址的时候都会产生一个action public class pr_action { public pr_action(){ System.out.println("创建action成功!!!"); } public void execute(){ } } 运行代码可以看到,每次访问该网络地址都会在控制台输出一次!!! 如果是单例的话,若出现两个用户都修改一个对象的属性值,则会因为用户修

  • struts2中action实现ModelDriven后无法返回json的解决方法

    复制代码 代码如下: public class DeviceAction extends AbstractAction implements ModelDriven<Device> {    private static Log log = LogFactory.getLog(DeviceAction.class);    private Device device=new Device(); //只能json化 模型驱动的bean    private String result; //无法

  • ajax交互Struts2的action(客户端/服务器端)

    1.客户端网页代码 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=G

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

    下面是整个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.Servlet

  • php正确输出json数据的实例讲解

    错误示例 $result = array('state'=>'123','message' =>'参数错误'); echo 'hello'; echo json_encode($result); 客户端先接收到第一个echo语句 但并不是json数据. 另外一种情况是执行了语句mysqli_close(),关闭了数据库导致不能接收到json数据,具体原因不详. 以上这篇php正确输出json数据的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • Nodejs读取本地json文件,输出json数据接口方式

    目录 Nodejs读取本地json文件,输出json数据接口 第一步:准备本地JSON文件 第二步:编写nodejs服务程序 第三步: 测试请求接口数据 nodejs读取本地json文件中文乱码 第一种方式 第二种方式 Nodejs读取本地json文件,输出json数据接口 第一步:准备本地JSON文件 F:\nodejs\data\test.json {     "code": 0,     "msg": "请求成功",     "d

  • C#中把DataTable、Dataset转Json数据

    什么是JSON JSON是JavaScript Object Notation的简称,中文含义为“JavaScript 对象表示法”,它是一种数据交换的文本格式,而不是一种编程语言. JSON 是一种轻量级的数据交换格式,它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据.简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言.易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率. JSON的特点 JSON 主要

  • Android中使用HttpURLConnection实现GET POST JSON数据与下载图片

    Android6.0中把Apache HTTP Client所有的包与类都标记为deprecated不再建议使用所有跟HTTP相关的数据请求与提交操作都通过HttpURLConnection类实现,现实是很多Android开发者一直都Apache HTTP Client来做andoird客户端与后台HTTP接口数据交互,小编刚刚用HttpURLConnection做了一个android的APP,不小心踩到了几个坑,总结下最常用的就通过HttpURLConnection来POST提交JSON数据与

  • Android 中对JSON数据解析实例代码

    Android 中对JSON数据解析 在Android的网络编程中,JSON是比XML使用更为广泛的数据传输机制.在许多的http网络请求或接口调用中,返回的很多都是JSON.所以学会解析JSON是学会Android的基本技能. 简单介绍下JSON,JSON是轻量级的文本数据交换格式,独立于语言和平台.比XML更小,更快,更易解析.JSON是用键值对来保存数据的.JSON保存的值可以是数字.字符串.布尔值.数组和对象. 废话少说,直接上代码.下面对以下JOSN进行解析: { "language&

  • C#使用Http Post方式传递Json数据字符串调用Web Service

    引言 前段时间一直在做一个ERP系统,随着系统功能的完善,客户端(CS模式)变得越来越臃肿.现在想将业务逻辑层以下部分和界面层分离,使用Web Service来做.由于C#中通过直接添加引用的方来调用Web Service的方式不够灵活,故采取手动发送Http请求的方式来调用Web Service.最后选择使用Post方式来调用Web Service,至于安全性和效率暂不考虑.在学习使用的过程,遇到了很多问题,也花了很长时间来解决,网上相关的帖子很少,如果各位在使用的过程中有一些问题难以解决,可

  • JS中如何判断传过来的JSON数据中是否存在某字段

    如何判断传过来的JSON数据中,某个字段是否存在, 1.obj["key"] != undefined 这种有缺陷,如果这个key定义了,并且就是很2的赋值为undefined,那么这句就会出问题了. 2.!("key" in obj) 3.obj.hasOwnProperty("key") 这两种方法就比较好了,推荐使用. 答案原文: Actually, checking for undefined-ness is not an accurat

  • javascript仿php的print_r函数输出json数据

    复制代码 代码如下: //theOb(json数据) function print_r(theObj) { var retStr = ''; if (typeof theObj == 'object') { retStr += '<div style="font-family:Tahoma; font-size:7pt;">'; for (var p in theObj) { if (typeof theObj[p] == 'object') { retStr += '&l

  • php中输出json对象的值(实现方法)

    实例如下所示: <!DOCTYPE html> <html> <body> <?php $json = '{"report":{"date":"2012-04-10","content":"abcdefght"}}'; $arr = (array) json_decode($json,true); echo '当前日期是:'. $arr['report']['dat

随机推荐