• 注册
当前位置:代码四四五 > 默认分类 >正文

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. "1.0" encoding= "GBK" ?>
  2. "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
  3. "http://struts.apache.org/dtds/struts-2.1.7.dtd" >
  4. "struts.i18n.encoding" value= "UTF-8" />
  5. <> package name= "example" extends = "json-default" >
  6. "JSONExample" class = "org.crazyit.app.action.JSONExample" >
  7. "json" >
  8. "noCache" > true
  9. "contentType" >text/html
  10. "*" >
  11. /WEB-INF/content/{ 1 }.jsp
  12. package >

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

Ø 第一个地方是配置 struts.i18n.encoding 常量时,不再使用 GBK 编码,而是使用 UTF-8 编码,这是因为 Ajax POST 请求都是以 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 ,通常无须修改


本文转自 fkJava李刚 51CTO博客,原文链接:http://blog.51cto.com/javaligang/897429 ,如需转载请自行联系原作者

免责申明:文章和图片全部来源于公开网络,如有侵权,请通知删除 162202241@qq.com

最新评论
  • 秦琬枝
    2024-04-04 电脑端
    # 1楼
    json格式插件

    个人签名,ta还没设置签名

    拉黑 举报 打赏 回复
  • 衡盛涛
    2024-04-04 电脑端
    # 2楼
    jsonformat插件

    个人签名,ta还没设置签名

    拉黑 举报 打赏 回复
  • 仇清
    2024-04-04 电脑端
    # 3楼
    jsonviewer插件

    个人签名,ta还没设置签名

    拉黑 举报 打赏 回复
  • 东门才国
    2024-04-04 电脑端
    # 4楼
    jsonformatter插件

    个人签名,ta还没设置签名

    拉黑 举报 打赏 回复
  • 焦雅欣
    2024-04-04 电脑端
    # 5楼
    jsonchao

    个人签名,ta还没设置签名

    拉黑 举报 打赏 回复
  • 澹台裕坚
    2024-04-04 电脑端
    # 6楼
    .jsonl

    个人签名,ta还没设置签名

    拉黑 举报 打赏 回复
  • 松霄
    2024-04-04 电脑端
    # 7楼
    json_ua

    个人签名,ta还没设置签名

    拉黑 举报 打赏 回复
  • 许以婵
    2024-04-04 电脑端
    # 8楼
    json_query

    个人签名,ta还没设置签名

    拉黑 举报 打赏 回复
  • 路若
    2024-04-04 电脑端
    # 9楼
    jsonchange

    个人签名,ta还没设置签名

    拉黑 举报 打赏 回复
  • 金邦竹
    2024-04-04 电脑端
    # 10楼
    json插件安装

    个人签名,ta还没设置签名

    拉黑 举报 打赏 回复

欢迎您发表评论:

请登录之后再进行评论

登录