Strust2+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。

          在 struts2-json-plugin.jar 中有一个 struts-plugin.xml 定义了 json-default 继承自 struts-default 。

          

<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"/>
            <interceptor name="jsonValidation" class="org.apache.struts2.json.JSONValidationInterceptor"/>

            <!-- Sample JSON validation stack -->
            <interceptor-stack name="jsonValidationWorkflowStack">
                <interceptor-ref name="basicStack"/>
                <interceptor-ref name="validation">
                    <param name="excludeMethods">input,back,cancel</param>
                </interceptor-ref>
                <interceptor-ref name="jsonValidation"/>
                <interceptor-ref name="workflow"/>
            </interceptor-stack>

        </interceptors>

    </package>
</struts>

       注意: 我们自己定义的 package 需要继承 json-default  才能使用。

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

 

<span style="font-size:10px;"><action name="VERSION" class="com.cairenhui.sec.action.AppAction" method="getAppVersion">
	<result name="success" type="json">
	<span style="white-space:pre">	</span><param name="root">resMap</param>  
	</result>
</action>
		
<action name="ajaxVerify!*" class="com.cairenhui.sec.action.VerifyAction" method="{1}">
	<result name="success" type="json">
		<param name="includeProperties">resMap.*</param>
	</result>
</action>  </span>



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

<action name="*"  class="*">  
          
   <result name="success" type="json">  
   
   <param name=""></param>//关于对JSON的一些定义  <span style="color:#ff0000;">这里可能会用到一些正则的表达方式</span>
  
   /*
   excludeProperties   //代表排除Action中的哪些属性,排除多个属性时,使用逗号进行分隔(即不需要序列化的属性) 
   例:<param name="excludeProperties">age</param>  排除getAge()这个方法 为什么是排除这个方法下面详解 
                     
   includeProperties   //代表包含Action中的哪些属性,包含多个属性是,使用逗号进行分隔(即需要序列化的属性) 
   例:<param name="includeProperties">address</param>包含getAddress()这个方法 为什么是包含这个方法下面详解 
                     
   excludeNullProperties //代表排除Action中属性值为空的字段 
   例:<param name="excludeNullProperties">true</param> 使用true/false 默认为false(即包含属性值为null的字段) 
                     
   root  //代表从哪里开始序列化 
   例:<param name="root">person</param> person对应的可以是一个属性,也可以是一个对象,也可以是一个集合 
     //当在这里定义后,只会将person进行序列化,如果person是一个对象,则会将person对象中所有的getter方法都进行序列化 
                     
    注意:如果相同属性同时定义了excludeProperties和includeProperties 
        那么excludeProperties的优先级要高,因此不对 
    该属性进行序列化 
    */  
    </result>  
</action>  



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

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;
						}
				*/


 

五、具体的实例:

 Action

    package org.viancent.action;  
  
    import java.util.Date;  
    import org.apache.struts2.json.annotations.JSON;  
    import com.opensymphony.xwork2.ActionSupport;  
    public class GetJsonAction extends ActionSupport {  
          
        private String username;  
        private String password;  
        private int age;  
        private Date date;  
  
        @JSON(serialize = false)  
        public String getUsername() {  
            return username;  
        }  
  
        public void setUsername(String username) {  
            this.username = username;  
            }  
          
        @JSON(name="mypassword")  
        public String getPassword() {  
            return password;  
        }  
  
        public void setPassword(String password) {  
            this.password = password;  
        }  
  
        public int getAge() {  
            return age;  
        }  
  
        public void setAge(int age) {  
            this.age = age;  
        }  
          
        @JSON(format="yyyy-MM-dd")  
        public Date getDate() {  
            return date;  
        }  
  
        public void setDate(Date date) {  
            this.date = date;  
        }  
  
        @Override  
        public String execute() throws Exception {  
            this.setDate(new Date());  
            this.setAge(10);  
            this.setPassword("world");  
            this.setUsername("hello");  
            return SUCCESS;  
        }  
    }  


  struts.xml

<struts>  
    <package name="struts2"  extends="json-default">  
    //这里一定要继承json-default  
        <action name="getjsons" class="org.viancent.action.GetJsonAction">  
            <result name="success"  type="json">  
            //这里一定要定义type属性为json  
                <param name="excludeProperties">age</param>       
            //排除getAge()方法            
            </result>  
        </action>  
  
    </package>  
</struts>   


  JSP:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
<html>  
    <head>  
        <script type="text/javascript" src="WEB-JS/jquery-1.5.1.js"></script>   //使用jquery一定要导入js  
          
                <script type="text/javascript"> //使用jquery实现异步提交  
                    function getJson() {  
                        $.post(  
                            "/struts2/getjsons.action",{},function(returnedData,status)  
                            {  
                                if("success"==status)  
                                {  
                                    alert(returnedData);  
                                }  
                            }  
                        )  
                    }  
                </script>  
    </head>  
    <body id="theBody">  
        <input type="button" value="GetJson" οnclick="getJson();">  
  
    </body>  
</html>  


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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值