当前位置: 首页 > 编程笔记 >

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

黄淇
2023-03-14
本文向大家介绍在Action中以Struts2的方式输出JSON数据的实例,包括了在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数据的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍python中json格式数据输出的简单实现方法,包括了python中json格式数据输出的简单实现方法的使用技巧和注意事项,需要的朋友参考一下 主要使用json模块,直接导入import json即可。 小例子如下: 以上就是小编为大家带来的python中json格式数据输出的简单实现方法全部内容了,希望大家多多支持呐喊教程~

  • 本文向大家介绍python 把数据 json格式输出的实例代码,包括了python 把数据 json格式输出的实例代码的使用技巧和注意事项,需要的朋友参考一下 有个要求需要在python的标准输出时候显示json格式数据,如果缩进显示查看数据效果会很好,这里使用json的包会有很多操作  这样就会得到如下的输出: 可以看到都已经格式化了。 这是在python中,如果直接使用命令行,希望直接转换,可

  • 本文向大家介绍PHP连接MySQL数据库并以json格式输出,包括了PHP连接MySQL数据库并以json格式输出的使用技巧和注意事项,需要的朋友参考一下 1.简介 PHP连接数据库有多种方法,现介绍常用的MySQL数据库连接方法,PHP连接MySQL也有两种方式,一是面向对象,二是面向过程方式,两种方法稍有区别。下面通过代码介绍两种方法连接MySQL并以json格式输出。 2、面向对象方式 3.

  • 本文向大家介绍Yii2 输出xml格式数据的方法,包括了Yii2 输出xml格式数据的方法的使用技巧和注意事项,需要的朋友参考一下 php中对xml的处理,虽然说实际开发中目前用的少了,但是难免会用到,用到的时候呢,总结起来还是稍稍有那么一丁点的麻烦。 我们来看看yii2中是怎么对xml进行处理的。会超乎你想象的简单哦。 我们以输出xml格式的数据为例。 既然是输出,必然就涉及到web请求与响应了

  • 本文向大家介绍详解在Java的Struts2框架中配置Action的方法,包括了详解在Java的Struts2框架中配置Action的方法的使用技巧和注意事项,需要的朋友参考一下 在Struts2中Action部分,也就是Controller层采用了低侵入的方式。为什么这么说?这是因为在Struts2中action类并不需要继承任何的基类,或实现任何的接口,更没有与Servlet的API直接耦合。

  • 我有一个名为的csv文件。我打开了ipython qtconsole,并使用以下方法创建了一个pandas: 其中,是字符串对象的python列表。示例(实际列表长度为22): 在ipython提示下,如果我键入并按enter键,则不会获得带有列和值的数据框,如Pandas网站上的示例所示。相反,我得到了关于数据帧的信息。我得到: 如果我键入,那么我会得到列的预期值。我有两个问题: (1) 在熊猫