Struts2返回JSON数据的具体应用范例

来源:互联网 发布:mac 小红点 编辑:程序博客网 时间:2024/04/30 08:59

转载自 yshjava的个人博客主页 《Struts2返回JSON数据的具体应用范例》

最近在搞项目遇到这个,在网上找的资料觉得不错,转载下来以备参考。 

JSON(JavaScript Object Notation)

 

首先来看一下JSON官方对于“JSON”的解释:

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。(更多内容请参见JSON官网http://json.org/json-zh.html)


JSON建构于两种结构:

“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。


值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。

因为JSON中的值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array),且这些结构可以嵌套,这种特性给予JSON表达数据以无限的可能:它既可以表达一个简单的key/value,也可以表达一个复杂的Map或List,而且它是易于阅读和理解的。

 

 

Struts2中JSON的用武之地


因为JSON是脱离语言的理想的数据交换格式,所以它被频繁的应用在客户端与服务器的通信过程中,这一点是毋庸置疑的。而在客户端与服务器的通信过程中,JSON数据的传递又被分为服务器向客户端传送JSON数据,和客户端向服务器传送JSON数据,前者的核心过程中将对象转换成JSON,而后者的核心是将JSON转换成对象,这是本质的区别。另外,值得一提的是,JSON数据在传递过程中,其实就是传递一个普通的符合JSON语法格式的字符串而已,所谓的“JSON对象”是指对这个JSON字符串解析和包装后的结果,这一点请牢记,因为下面的内容会依赖这一点。

 

Struts2返回JSON数据到客户端


这是最常见的需求,在AJAX大行其道的今天,向服务器请求JSON数据已成为每一个WEB应用必备的功能。抛开Struts2暂且不提,在常规WEB应用中由服务器返回JSON数据到客户端有两种方式:一是在Servlet中输出JSON串,二是在JSP页面中输出JSON串。上文提到,服务器像客户端返回JSON数据,其实就是返回一个符合JSON语法规范的字符串,所以在上述两种 方法中存在一个共同点,就是将需要返回的数据包装称符合JSON语法规范的字符串后在页面中显示。如下所示

 

使用Servlet返回JSON数据到客户端:

 

Java代码

 

 

结果在意料之中,如下图所示:

 

 

 

 

使用JSP(或html等)返回JSON数据到客户端:

 

Java代码

 

这个就不用去看结果了吧。

 

再回到Struts,在Struts的MVC模型中,Action替代Servlet担当了Model的角色,所以对于Struts而言,返回JSON数据到客户端,跟传统的WEB应用一样,存在两种方式,即在Action中输出JSON数据,和在视图资源中输出JSON数据。再往下细分的话,在Action中输出JSON数据又分为两种方式,一是使用传统方式输出自己包装后的JSON数据,二是使用Struts自带的JSON数据封装功能来自动包装并返回JSON数据。

 

在视图资源中输出JSON数据


Action处理完用户请求后,将数据存放在某一位置,如request中,并返回视图,然后Struts将跳转至该视图资源,在该视图中,我们需要做的是将数据从存放位置中取出,然后将其转换为JSON字符串,输出在视图中。这跟传统WEB应用中在JSP页面输出JSON数据的做法如出一辙:

 

Java代码

 

因为是常规的Struts流程配置,所以配置内容就不再展示了。

 

JSP代码就非常简单了,

 

Java代码

 

 

结果如图所示:

 

 

 

 

在Action中以传统方式输出JSON数据


这一点跟传统的Servlet的处理方式基本上一模一样,代码如下

 

Java代码

 

 

struts.xml中的配置:

 

Java代码

 

注意:这个action没有result,且doAction方法没有返回值!

 

就不再贴图了,因为结果可想而知!

 

 

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

本着“不重复发明轮子”的原则,我们将转换JSON数据的工作交给Struts2来做,那么相对于在Action中以传统方式输出JSON不同的是,Action是需要将注意力放在业务处理上,而无需关心处理结果是如何被转换成JSON被返回客户端的——这些 工作通过简单的配置,Struts2会帮我们做的更好。

 

Java代码

 

 

struts.xml中action的配置:

 

Java代码

 

凡是使用Struts2序列化对象到JSON的action,所在的package必须继承自json-default,注意,这里唯一的result,没有指定name属性。

 

结果如下图所示:

 

 

 

上面很详细的说明了在WEB应用中如何返回JSON数据到客户端,讲了那么多种方式,涉及的技术核心无非只有两点:


1、将对象转换成符合JSON语法格式的字符串;
2、将符合JSON语法格式的字符串返回客户端;


第二点是整个实现过程的本质,但却不难做到;第一点其实也不难,他甚至有两种做法,一是通过字符串拼接方式,而是通过JSONObject以对象方式转换。看下面的一个例子:

 

Java代码   

   

 

 

JSON格式的字符串返回到客户端后,客户端会将其解析并封装成真正的JSON对象,以供JS调用。

 


总结上述,其实只要明白了服务器返回JSON数据到客户端的原理,做起来就游刃有余了,他甚至有非常多的可选方案,但既然是基于Struts2的实现,那么肯定还是要用Struts2的方式来做啦,因为这样确实可以省很多事。另外,在文章的最后,说明一下返回JSON数据时在result中配置的参数的含义及其常见常见配置吧:

 

Java代码

 

值得一提的是通过Struts2来返回JSON数据,在IE中会提示下载,这个不用关心,换个浏览器就能正常展示JSON数据,而在JS调用中,更是毫无影响。

 

下面是整个Action的完整代码:

 

Java代码

 

完整的struts.xml配置文件如下:

 

Xml代码

 

 

 

最后,附上整个范例工程(一个MyEclipse工程)源码。

 

 

 

 

 

 原创文章,转载请注明出处: http://www.yshjava.cn/post/328.html

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 安徽省住房和城乡建设厅 四川城乡住房建设厅 陕西省住房公积金中心 深圳市住房和建设局 南宁市住房保障和房产管理局 住房公积金是什么 十堰住房公积金查询 广安住房公积金查询 枣庄住房公积金管理中心 南宁市住房公积金查询 陕西住房公积金查询网 南充市住房公积金管理中心 南宁住房公积金 晋中住房公积金查询个人账户 保定住房公积金查询 淮南市住房公积金查询 苏州市住房公积金管理中心 宜春市住房公积金管理中心 住房公积金管理中心电话 福州住房公积金查询 玉林住房公积金查询 住房公积金管理中心地址 烟台住房公积金查询个人账户 个人住房公积金余额查询 成都市住房公积金中心 东莞住房公积金个人帐户查询 西安市住房公积金查询 黄石住房公积金查询 住房公积金客服电话 保定住房公积金 郑州住房公积金 住房公积金咨询电话 泉州市住房公积金个人查询 南充住房公积金查询个人账户 住房公积金电话号码 银川住房公积金查询 淮南住房公积金查询个人账户 毕节住房公积金查询 邯郸市住房公积金管理中心 渭南市住房公积金管理中心 连云港住房公积金