关于Struts-JSON的提高开发效率

一、JSON是什么?

:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写,同时也易于机器解

析和生成。它基于JavaScript(Standard ECMA-262 3rd Edition - December
1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C , C#, Java,
JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。

二 、struts2对于JSON有什么支持?

:struts2提供了一个struts2-json-plugin.jar 用于支持JSON的使用。当我们在struts2中使用JSON的时候

必须导入struts2-json-plugin.jar

并且需要一下几点:

1.<package name="struts2" extends="json-default">

//必须是继承struts2-json-plugin.jar中struts-plugin.xml文件中的定义的json-default

/*
struts2-json-plugin.jar中struts-plugin.xml配置信息:

<struts>

<package name="json-default" extends="struts-default">

<result-types>

<result-type name="json" class="org.apache.struts2.json.JSONResult"/>

</result-types>

<interceptors>

<interceptor name="json"
class="org.apache.struts2.json.JSONInterceptor"/>                    
                   </interceptors>

</package>

</struts>

通过配置信息我们可以知道:

1.json-default其实是继承了struts-default的

2.定义了一个name为json的返回类型和一个name为json的拦截器
*/

2.<action name="*" class="*"><result name="success" type="json"/></action>//我们需要将result

的 返回类型定义为json

三、关于JSON在struts.xml中的一些属性的功能。

Java代码  
  1. <action name="*"  class="*">
  2. <result name="success" type="json">
  3. <param name=""></param>//关于对JSON的一些定义
  4. /*excludeProperties   //代表排除Action中的哪些属性,排除多个属性时,使用逗号进行分隔(即不需要序列化的属性)
  5. 例:<param name="excludeProperties">age</param>  排除getAge()这个方法 为什么是排除这个方法下面详解
  6. includeProperties   //代表包含Action中的哪些属性,包含多个属性是,使用逗号进行分隔(即需要序列化的属性)
  7. 例:<param name="includeProperties">address</param>包含getAddress()这个方法 为什么是包含这个方法下面详解
  8. excludeNullProperties //代表排除Action中属性值为空的字段
  9. 例:<param name="excludeNullProperties">true</param> 使用true/false 默认为false(即包含属性值为null的字段)
  10. root  //代表从哪里开始序列化
  11. 例:<param name="root">person</param> person对应的可以是一个属性,也可以是一个对象,也可以是一个集合
  12. //当在这里定义后,只会将person进行序列化,如果person是一个对象,则会将person对象中所有的getter方法都进行序列化
  13. 注意:如果相同属性同时定义了excludeProperties和includeProperties
  14. 那么excludeProperties的优先级要高,因此不对
  15. 该属性进行序列化
  16. */
  17. </result>
  18. </action>

四、关于JSON在Action对象中注解的使用。

:对于JSON的注解主要有一下几个属性可以定义
name:指定序列化的时候对应的名称
/*
 
  例:@JSON(name = "myname") 则在客户端接收到的JSON中UserName属性对应的地方为 :
                     {myname:"张三"} 以前的则是{username:"张三"}
     public String getUsername() {
return username;
     }
*/
serialize:对该方法进行序列化  true/false
/*
例:@JSON(serialize=true) 对该方法序列化,如果为false则不进行序列化
public String getUsername() {
return username;
}
*/
deserialize:不对该方法进行序列化  true/false
/*
例:@JSON(deserialize=true) 不对该方法序列化,如果为false则进行序列化
public String getUsername() {
return username;
}
*/
format:设置JSON对该方法的转换方式,一般用于对时间进行转换 
/*
例:@JSON(format="yyyy-MM-dd")  则客户端接收的JSON中date对应的值为:
                                              {date:"2011-10-2"}
public Date getDate() {
return date;
}
*/

五、具体的实例:

Java代码  
  1. Action:
  2. package org.viancent.action;
  3. import java.util.Date;
  4. import org.apache.struts2.json.annotations.JSON;
  5. import com.opensymphony.xwork2.ActionSupport;
  6. public class GetJsonAction extends ActionSupport {
  7. private String username;
  8. private String password;
  9. private int age;
  10. private Date date;
  11. @JSON(serialize = false)
  12. public String getUsername() {
  13. return username;
  14. }
  15. public void setUsername(String username) {
  16. this.username = username;
  17. }
  18. @JSON(name="mypassword")
  19. public String getPassword() {
  20. return password;
  21. }
  22. public void setPassword(String password) {
  23. this.password = password;
  24. }
  25. public int getAge() {
  26. return age;
  27. }
  28. public void setAge(int age) {
  29. this.age = age;
  30. }
  31. @JSON(format="yyyy-MM-dd")
  32. public Date getDate() {
  33. return date;
  34. }
  35. public void setDate(Date date) {
  36. this.date = date;
  37. }
  38. @Override
  39. public String execute() throws Exception {
  40. this.setDate(new Date());
  41. this.setAge(10);
  42. this.setPassword("world");
  43. this.setUsername("hello");
  44. return SUCCESS;
  45. }
  46. }

struts.xml

Java代码  
  1. <struts>
  2. <package name="struts2"  extends="json-default">
  3. //这里一定要继承json-default
  4. <action name="getjsons" class="org.viancent.action.GetJsonAction">
  5. <result name="success"  type="json">
  6. //这里一定要定义type属性为json
  7. <param name="excludeProperties">age</param>
  8. //排除getAge()方法
  9. </result>
  10. </action>
  11. </package>
  12. </struts>

JSP:

Java代码  
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <head>
  5. <script type="text/javascript" src="WEB-JS/jquery-1.5.1.js"></script>   //使用jquery一定要导入js
  6. <script type="text/javascript"> //使用jquery实现异步提交
  7. function getJson() {
  8. $.post(
  9. "/struts2/getjsons.action",{},function(returnedData,status)
  10. {
  11. if("success"==status)
  12. {
  13. alert(returnedData);
  14. }
  15. }
  16. )
  17. }
  18. </script>
  19. </head>
  20. <body id="theBody">
  21. <input type="button" value="GetJson" onclick="getJson();">
  22. </body>
  23. </html>

得到的结果为:{"date":"2011-03-21","mypassword":"world"}

//使用浏览器的bug工具查看 alert(returnedData);弹出来的只是 [object,Object]
//这里我们可以看见password的名称已经改为mypassword了 而设定那么的data属性,名称则没有变
 

[转] 关于Struts-JSON配置(详解带实例struts2的json数据支持)的更多相关文章

  1. log4j.properties配置详解与实例

    log4j.properties配置详解与实例 第一步:加入log4j-1.x.x.jar到lib下. 第二步:在工程的src下下建立log4j.properties.内容如下: #OFF,syste ...

  2. Apache的配置详解 带图

    对Apache 的 Http.conf 各项配置详解 1.01 ServerRoot 配置 [ServerRoot "" 主要用于指定 Apache 的安装路径,此选项参数值在安装 ...

  3. spring-mvc注解(mvc:annotation-driver,JSON,配置详解)

    一.DefaultAnnotationHandlerMapping 和 AnnotationMethodHandlerAdapter 的使用已经过时! spring 3.1 开始我们应该用 Reque ...

  4. struts.xml配置详解 内部资料 请勿转载 谢谢合作

    1.<include> 利用include标签,可以将一个struts.xml配置文件分割成多个配置文件,然后在struts.xml中使用<include>标签引入其他配置文件 ...

  5. struts.xml配置详解

    struts.xml是我们在开发中利用率最高的文件,也是Struts2中最重要的配置文件. 一下分别介绍一下几个struts.xml中常用到的标签 1.<include> 利用includ ...

  6. struts.xml 配置详解

    struts.xml是我们在开发中利用率最高的文件,也是Struts2中最重要的配置文件. 一下分别介绍一下几个struts.xml中常用到的标签 1.<include> 利用includ ...

  7. [转] struts.xml配置详解

    转自:http://www.cnblogs.com/fmricky/archive/2010/05/20/1740479.html struts.xml是我们在开发中利用率最高的文件,也是Struts ...

  8. Struts2笔记——struts.xml配置详解

    访问HelloWorld应用的路径的设置 * 在struts1中,通过<action path=“/primer/helloWorldAction.action”>节点的path属性指定访 ...

  9. struts.properties配置详解

    Struts 2框架有两个核心配置文件,其中struts.xml文件主要负责管理应用中的Action映射,以及该Action包含的Result定义等.除此之外,Struts 2框架还包含     st ...

随机推荐

  1. 2013-7-31hibernate二级缓存

    难得闲 Fckeditor Fckconfig.js大部分配置都在这里面, 增加字体:         程序代码: FCKConfig.FontNames = 'Arial;Comic Sans MS ...

  2. linux驱动开发:用户空间操作LCD显示简单的图片【转】

    转自:http://blog.csdn.net/changliang7731/article/details/53074616 上一章我们简单介绍了LCD的一些基本原理.当然更深奥的还有,比如gamm ...

  3. rocketmq 记

    Rocketmq选型 Rocket是一个专业的队列服务,性能优于Rabbitmq,优势是性能和并发,源于Kafka的扩展版,增强了数据的可靠性. Rocketmq的队列类型 普通队列,广播队列.顺序队 ...

  4. BZOJ 1975: [Sdoi2010]魔法猪学院——K短路,A*

    传送门 http://www.lydsy.com/JudgeOnline/problem.php?id=1975 题意&简要做法 一张有向图,求出最多的互不相同的路径,满足路径长度之和\(\l ...

  5. cordova 从xcode7迁移到xcode8

    环境以开发流程 当前项目使用的cordova环境 cordova 6.1.1 cordova-ios 3.9.2(vs15自动装的不知道在哪能改,所以考虑升级到vs17,能够手动指定) cordova ...

  6. java版云笔记(五)

    下来是创建笔记本,创建笔记,这个没什么难点和前面是一样的. 创建笔记本 首先点击"+"弹出添加笔记的对话框,然后点击确定按钮创建笔记本. //点击"+"弹出添加 ...

  7. rcnn ->fast rcnn->faster rcnn物体检测论文

    faster rcnn中的rpn网络: 特征可以看做一个尺度51*39的256通道图像,对于该图像的每一个位置,考虑9个可能的候选窗口:三种面积{1282,2562,5122}×三种比例{1:1,1: ...

  8. PC端网站跳转手机端网站

    <SCRIPT LANGUAGE="JavaScript"> function mobile_device_detect(url) { var thisOS=navig ...

  9. Java显式锁学习总结之三:AbstractQueuedSynchronizer的实现原理

    概述 上一篇我们讲了AQS的使用,这一篇讲AQS的内部实现原理. 我们前面介绍了,AQS使用一个int变量state表示同步状态,使用一个隐式的FIFO同步队列(隐式队列就是并没有声明这样一个队列,只 ...

  10. Funny Car Racing(最短路变形)

    描述 There is a funny car racing in a city with n junctions and m directed roads. The funny part is: e ...