JSON插件与json类型的Result

JSON插件提供了一种json类型的Result,一旦为某个Action指定了一个类型为json的Result,则该Result无须映射到任何视图资源。因为JSON插件会负责将Action里的状态信息序列化成JSON格式的字符串,并将该字符串返回给客户端浏览器。

简单地说,JSON插件允许我们在客户端页面的JavaScript中异步调用Action,而且Action不再需要使用视图资源来显示该Action里的状态信息,而是由JSON插件负责将Action里的状态信息返回给调用页面——通过这种方式,就可以完成Ajax交互。

将Struts 2解压缩目录的lib子目录下struts2-json-plugin-2.2.1.jar文件复制到Web应用的WEB-INF\lib目录下,即可为该Struts 2应用增加JSON插件。

接下来配置提供返回JSON字符串的Action,配置该Action与配置普通Action存在小小的区别,应该为该Action配置类型为json的Result,而这个Result无须配置任何视图资源。

配置该Action的struts.xml文件代码如下。

程序清单:codes\04\4.6\struts2json\WEB-INF\src\struts.xml

 
 
  1. <?xml version="1.0" encoding="GBK"?>  
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" 
  4.     "http://struts.apache.org/dtds/struts-2.1.7.dtd">  
  5. <struts>  
  6.     <constant name="struts.i18n.encoding" value="UTF-8"/>  
  7.     <package name="example" extends="json-default">  
  8.         <action name="JSONExample" class="org.crazyit.app.action.JSONExample">  
  9.             <!-- 配置类型的json的Result -->  
  10.             <result type="json">  
  11.                 <!-- 为该Result指定参数 -->  
  12.                 <param name="noCache">true</param>  
  13.                 <param name="contentType">text/html</param>  
  14.             </result>  
  15.         </action>  
  16.         <action name="*">  
  17.             <result>/WEB-INF/content/{1}.jsp</result>  
  18.         </action>  
  19.     </package>  
  20. </struts>  

在上面配置文件中有两个值得注意的地方:

Ø  第一个地方是配置struts.i18n.encoding常量时,不再使用GBK编码,而是使用UTF-8编码,这是因为AjaxPOST请求都是以UTF-8的方式进行编码的。

Ø  第二个地方是配置包时,自己的包继承了json-default包,而不再继承默认的default包,这是因为只有在该包下才有json类型的Result

一旦我们将某个逻辑视图名配置成json类型,这将意味着该逻辑视图无须指定物理视图资源,因为JSON插件会将该Action序列化后发送给客户端。

正如上面的粗体字代码所示,配置json类型的Result时无须指定任何视图资源——JSON插件会将Action对象序列化成一个JSON格式的字符串,并将该字符串作为响应输出给请求者。

上面的粗体字代码中定义json类型的Result时,还指定了noCache、contentType两个参数,这都是json类型的Result的合法参数,json类型的Result可以接受如表4.1所示的常用参数。

4.1  json类型的Result允许指定的参数

参  数  名

合  法  值

默  认 值

说   明

excludeProperties

逗号隔开的多个属性名表达式

 

所有匹配其中任意一个属性名表达式的属性都不会被序列化到JSON字符串中

IncludeProperties

逗号隔开的多个属性名表达式

 

所有匹配其中任意一个属性名表达式的属性都会被序列化到JSON字符串中

root

OGNL表达式,确定Action内某个属性

 

设置该参数将不再把整个Action对象序列化成JSON字符串。而是只将该参数所指定的Action属性序列化成JSON字符串,返回给客户端

参  数  名

合  法  值

默  认  值

说   明

wrapPrefix

任意字符串

 

设置在系统生成的JSON结果字符串前添加固定的字符串前缀

wrapSuffix

任意字符串

 

设置在系统生成的JSON结果字符串后添加固定的字符串后缀

ignoreHierarchy

true或false

true

默认情况下,JSON插件只序列化Action对象的本身的属性,不会理会它的父类的属性。将该属性设false,将会序列化从Object类开始、所有父类、直到该Action类中所包含的全部属性

enableGZIP

true或false

false

设置是否对JSON响应启用gzip压缩。如果启用gzip压缩,需要客户端浏览器支持

noCache

true或false

false

设置是否取消浏览器缓存。将该参数设为true,将意味着增加如下响应头:

Cache-Control: no-cache

Expires: 0

Pragma: No-cache

excludeNullProperties

true或false

false

设置是否不序列化属性值为null的属性

contentType

合法的MIME类型

text/html

设置服务器响应的类型。默认是text/html,通常无须修改

本文出自 “疯狂Java李刚” 博客,http://javaligang.blog.51cto.com/5026500/897429

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值