Struts2返回JSON对象.docx

上传人:b****6 文档编号:7582275 上传时间:2023-01-25 格式:DOCX 页数:30 大小:30.72KB
下载 相关 举报
Struts2返回JSON对象.docx_第1页
第1页 / 共30页
Struts2返回JSON对象.docx_第2页
第2页 / 共30页
Struts2返回JSON对象.docx_第3页
第3页 / 共30页
Struts2返回JSON对象.docx_第4页
第4页 / 共30页
Struts2返回JSON对象.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

Struts2返回JSON对象.docx

《Struts2返回JSON对象.docx》由会员分享,可在线阅读,更多相关《Struts2返回JSON对象.docx(30页珍藏版)》请在冰豆网上搜索。

Struts2返回JSON对象.docx

Struts2返回JSON对象

1、引入包(本文中的包全部引自struts-2.1.8.1\lib):

struts2-json-plugin-2.1.8.1.jar

json-lib-2.1.jar

commons-collections-3.2.jar

commons-beanutils-1.7.0.jar

commons-lang-2.3.jar

commons-logging-1.0.4.jar

ezmorph-1.0.3.jar

这7个包是返回json形式的数据必须的。

因为json大量引用了Apachecommons的包,所以要加入4个,commons包,除了commons的包外,还需要引入一个ezmorph的包。

最后加入struts2必须的6个包:

struts2-core-2.1.8.1.jar

xwork-core-2.1.6.jar

ognl-2.7.3.jar

freemarker-2.3.15.jar

commons-fileupload-1.2.1.jar

commons-io-1.3.2.jar

2、后台:

1)Userinfo实体类代码

publicclassUserInfoimplementsSerializable{

privateintuserId;

privateStringuserName;

privateStringpassword;

getset方法略

}

2)Action类

publicclassTestActionextendsActionSupport{

privateStringmessage;//使用json返回单个值

privateUserInfouserInfo;//使用json返回对象

privateListuserInfosList;//使用josn返回List对象

getset方法略

/*返回单个值*/

publicStringreturnMsg(){

this.message="成功返回单个值";

returnSUCCESS;

}

/*返回UserInfo对象*/

publicStringreturnUser(){

userInfo=newUserInfo();

userInfo.setUserId(10000);

userInfo.setUserName("刘栋");

userInfo.setPassword("123456");

returnSUCCESS;

}

/*返回List对象*/

publicStringreturnList(){

userInfosList=newArrayList();

UserInfou1=newUserInfo();

u1.setUserId(10000);

u1.setUserName("张三");

u1.setPassword("111111");

UserInfou2=newUserInfo();

u2.setUserId(10001);

u2.setUserName("李四");

u2.setPassword("222222");

userInfosList.add(u1);

userInfosList.add(u2);

returnSUCCESS;

}

}

3)struts.xml(必须继承json-default、json-default继承自struts-default)

validate

userInfo\.userId,userInfo\.userName,userInfo\.password

userInfosList\[\d+\]\.userName,userInfosList\[\d+\]\.password

4、只要继承extends="json-default",resulttype设置成json之后,容器会把action的属性自动封装到一个json对象中(json拦截器来做)

5、includeProperties参数:

输出结果中需要包含的属性值,这里正则表达式和属性名匹配,可以用“,”分割填充多个正则表达式。

如:

输出UserInfo的所有属性及UserInfo的userName属性

userInfo.*,

userInfo\.userName

6、excludeProperties参数:

输出结果需要剔除的属性值,也支持正则表达式匹配属性名,可以用“,”分割填充多个正则表达式,类同includeProperties

7、输出一个JSONList列表

userInfosList\[\d+\]\.userName,userInfosList\[\d+\]\.password

其中userInfosList是action中的一个List类型的属性,userInfosList\[\d+\]\.userName表示,userInfosList中存储的对象0..end的userName属性(list中存储的对象必须有userName属性)。

8、为什么要用includeProperties或excludeProperties参数:

主要是为了过滤掉接口,pojo的set、list、其它对象等不需要的数据防止循环取其它关联对象或找不到接口。

如果不配置,默认是处理action中的所有属性,如果action中有接口注入,json拦截器可能找不到接口而返回不了结果,还有如果action中有一个对象,这个对象与好多对象都有关联,json拦截器会将相关联的所有对象的属性全部转换成json格式,如果其它对象有list、set,其返回结果相当庞大,有可能是死循环而无法返回。

如果不用或其他方式进行json数据过滤,通过debug你会发现前台返回的json字符串,是把action中的所有属性全部转化成json字符串返回给客户端(包括service接口、pojo所有属性及有关联的pojo。

有时候根本返回不了结果,也不报错,后台执行了,但前台执行不到callbackfunction,这主要是因为找不到接口或者关联的pojo太多,造成死循环),一般情况下用的最多的就是root、includeProperties和excludeNullProperties参数。

当然还有其他的方法,如给pojo的属性加json注解。

9、总结:

action中避免使用get开头的action方法,去掉action中的接口的get方法为json类型的result配置includeProperties,excludeProperties等参数.

 

另一篇资料:

本例程分为二步来写,第一步实现返回一个结果对象,第二步实现返回一个结果列表,首先来看下返回结果对象的实现.

我们需要先建立一个JavaBean为值对象,用来将用户的基本数据封装进去,该实体在结果对象和结果列表中都会使用到

Users.java代码如下:

Java代码

1.package com.jsontostruts2.vo;  

2.  

3./** 

4. * 

 

5. * 创 建 人:

ChenTao 

6. * 

 

7. * 创建日期:

2009-5-18 下午05:

24:

48 

8. * 

 

9. */  

10.public class Users {  

11.  

12.    private Integer userId;  

13.  

14.    private String userName;  

15.  

16.    private String sex;  

17.  

18.    public Users() {  

19.  

20.    }  

21.    // get... set.... 略......  

22.}  

packagecom.jsontostruts2.vo;

/**

*

*创建人:

ChenTao

*

*创建日期:

2009-5-18下午05:

24:

48

*

*/

publicclassUsers{

privateIntegeruserId;

privateStringuserName;

privateStringsex;

publicUsers(){

}

//get...set....略......

}

 

实现UserAction.java源码如下:

Java代码

1.package com.jsontostruts2.action;  

2.  

3.import com.googlecode.jsonplugin.annotations.JSON;  

4.import com.jsontostruts2.vo.Users;  

5.import com.opensymphony.xwork2.ActionSupport;  

6.  

7./** 

8. * 

 

9. * 创 建 人:

ChenTao 

10. * 

 

11. * 创建日期:

2009-5-18 下午05:

22:

50 

12. * 

 

13. */  

14.@SuppressWarnings("serial")  

15.public class UserAction extends ActionSupport {  

16.  

17.    private Users users;  

18.      

19.    @JSON(name="USER")  

20.    public Users getUsers() {  

21.        return users;  

22.    }  

23.  

24.    public void setUsers(Users users) {  

25.        this.users = users;  

26.    }  

27.  

28.    @Override  

29.    public String execute() throws Exception {  

30.        users = new Users();  

31.        users.setUserId

(1);  

32.        users.setUserName("ctojxzsycztao");  

33.        users.setSex("男人");  

34.        return SUCCESS;  

35.    }  

36.  

37.}  

packagecom.jsontostruts2.action;

importcom.googlecode.jsonplugin.annotations.JSON;

importcom.jsontostruts2.vo.Users;

importcom.opensymphony.xwork2.ActionSupport;

/**

*

*创建人:

ChenTao

*

*创建日期:

2009-5-18下午05:

22:

50

*

*/

@SuppressWarnings("serial")

publicclassUserActionextendsActionSupport{

privateUsersusers;

@JSON(name="USER")

publicUsersgetUsers(){

returnusers;

}

publicvoidsetUsers(Usersusers){

this.users=users;

}

@Override

publicStringexecute()throwsException{

users=newUsers();

users.setUserId

(1);

users.setUserName("ctojxzsycztao");

users.setSex("男人");

returnSUCCESS;

}

}

 

接下来我们需要配置struts.xml文件,为了在现下面不再重复写该文件,这里我将结果对象和列表的请求控制一并贴上来,文件内容:

Xml代码

1.

xml version="1.0" encoding="UTF-8"?

>  

2.

DOCTYPE struts PUBLIC  

3.    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  

4.    "http:

//struts.apache.org/dtds/struts-2.0.dtd">  

5.  

6.  

7.    

-- 注意这里扩展不再是 struts-default,而是 json-default -->  

8.      

9.        

-- 返回结果类型为 json -->  

10.          

11.              

12.          

13.        

-- 该action在返回列表时添加进来的 -->  

14.          

15.              

16.          

17.          

18.      

19.  

xmlversion="1.0"encoding="UTF-8"?

>

DOCTYPEstrutsPUBLIC

"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN"

"http:

//struts.apache.org/dtds/struts-2.0.dtd">

--注意这里扩展不再是struts-default,而是json-default-->

--返回结果类型为json-->

--该action在返回列表时添加进来的-->

 

能后创建web.xml和userjson.jsp:

Xml代码

1.web.xml :

  

2.

xml version="1.0" encoding="UTF-8"?

>  

3.

4.    xmlns:

xsi="http:

//www.w3.org/2001/XMLSchema-instance"  

5.    xsi:

schemaLocation="   

6.      

7.  

8.      

9.        Struts2  

10.          

11.            org.apache.struts2.dispatcher.FilterDispatcher  

12.          

13.      

14.      

15.        Struts2  

16.        *.action  

17.      

18.      

19.        Struts2  

20.        *.jsp  

21.      

22.  

23.      

24.        index.jsp  

25.      

26.  

web.xml:

xmlversion="1.0"encoding="UTF-8"?

>

xmlns:

xsi="http:

//www.w3.org/2001/XMLSchema-instance"

xsi:

schemaLocation="

Struts2

org.apache.struts2.dispatcher.FilterDispatcher

Struts2

*.action

Struts2

*.jsp

index.jsp

 

userjson.jsp:

Html代码

1.<%@ page language="java" contentType="text/html;charset=UTF-8"%>  

2.

DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  

3.  

4.    

5.    json 返回对象处理  

6.      

7.        var xmlHttp = false;  

8.        try{  

9.            xmlHttp = new ActiveXObject("msxml2.XMLHTTP");  

10. 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1