- 浏览: 1586982 次
- 性别:
- 来自: 吉林
文章分类
- 全部博客 (624)
- C/C++ (33)
- Java (181)
- 网络相关 (7)
- 我爱篮球 (3)
- 也爱足球 (4)
- 杂谈 (1)
- 系统架构 (3)
- Web Service (14)
- Framework (3)
- 系统命令 (8)
- 管理平台相关 (8)
- 其它 (35)
- Websphere (1)
- Struts2 (24)
- Hibernate (16)
- Spring (23)
- javascript (20)
- jquery (23)
- html/css/div (28)
- 数据库 (40)
- JavaWeb (27)
- 设计模式 (2)
- 文档编写 (3)
- SVN (5)
- Ant (1)
- Maven (13)
- 软件项目管理 (8)
- AOP (1)
- kindeditor (1)
- JSON (2)
- Servlt/JSP (4)
- WordXML (2)
- XML (12)
- 面试相关 (7)
- Tomcat (11)
- 性能与调优 (29)
- 职业发展 (2)
- 操作系统 (7)
- AJAX (2)
- DWR (1)
- Eclipse (12)
- 持续集成 (3)
- 批处理命令 (1)
- Mozilla Rhino (2)
- 新鲜技术 (18)
- Apache mina (2)
- 底层技术 (18)
- Linux (22)
- 新鲜技术,IT历史 (1)
- 敏捷开发 (1)
- 版本控制 (5)
- 较火技术 (7)
- 集群 (2)
- Web前端 (13)
- 报表工具 (3)
- 网站架构 (5)
- 大数据 (8)
- 分布式存储 (5)
- 云计算 (8)
- TCP/IP协议 (1)
- 负载均衡 (3)
- 硬件 (1)
- 表现层技术 (3)
- Velocity (3)
- jvm (6)
- 并发编程 (10)
- hadoop (8)
- 数据结构和算法 (12)
- 计算机原理 (1)
- 测试驱动开发-TDD (3)
- 开发技巧 (1)
- 分词器 (1)
- 项目构建工具 (2)
- JMX (4)
- RMI (1)
- 测试技术 (22)
- 网络完全 (1)
- Git (4)
- apache开源包 (4)
- Java常用 (1)
- mock (2)
- OSGi (2)
- MongoDB (1)
- JBPM (1)
- Storm (3)
- mysql (2)
- telnet (1)
- 正则表达式 (1)
- bootstrap (4)
- Apache ActiveMQ (1)
- redis (9)
- Nginx (2)
- rsync+inotify文件同步 (2)
- testng (1)
- 原型设计工具 (1)
- 工程能力 (1)
- 风险控制 (3)
- ibatis (1)
- 分布式 (4)
- 安全技术 (1)
- 计算机基础 (4)
- 消息中间件 (1)
- UML (2)
最新评论
-
u012236967:
java命令执行jar包(里面的main函数)的方式(包括依赖其它的jar包问题) -
世界尽头没有你:
Selenium自动化测试从入门到精通(Java版)百度网盘地 ...
自动化测试工具 Selenium WebDriver 入门教程(针对主流浏览器) -
小小西芹菜:
我喜欢代码简洁易读,服务稳定的推送服务,前段时间研究了一下go ...
dwr实现Reverse Ajax推送技术的三种方式 -
hellozhouqiao:
楼主,请教一点问题.现在我们需要在excel 的页脚里面加上图 ...
FreeMaker + xml 导出word(处理目录,图片和页眉页脚问题) -
乱在长安:
使用Timer会有各种各样的问题好嘛?!书上推荐使用Sched ...
DelayQueue (ScheduledThreadPoolExecutor调度的实现)
struts-json-plugin(翻译自官方文档)(转)
转自:http://yshjava.iteye.com/blog/1333104
为了在网上找到struts-json-plugin-xx.jar的源码,可真是费了九牛二虎之力,最后也还是没能如愿以偿,最后只得在Apache-SVN 上一页一页的翻看源码来完成上一篇文章,真是悲惨...不过凡事不总是那么绝对——我想这也是生活的魅力所在,居然让我不经意间发现了Apache官网上的一篇关于struts-json-plugin的使用说明文档 ,非常的详细,非常的全面,不仅有配置说明,还有一个范例工程,赶紧将其拿出来与大家分享。
JSON 插件提供了一个 "json" 结果类型来把 action 序列化成 JSON. 这一序列化的过程是递归的, 意即整个对象图,从 action 类开始 (未包括基类) 将会被序列化 (可以用 "root" 属性来指定自己的根对象). 如果使用了 json 拦截器, action 将可通过请求中的 JSON 内容组装出来, 该拦截器遵循以下几条规则:
- "content-type" 必须为 "application/json"
- JSON 内容必须是格式良好的, 参考 json.org 中的语法.
- Action 里必须有欲获取值的属性的相应 public 的 "setter" 方法.
- 所支持的类型有: 原始类型 (int,long...String), Date, List, Map, 原始类型数组, 其他的类 (将会支持更多), 和其他类型的数组.
- JSON 中的任何将要被填入到 list 或 map 中的对象会是 Map 类型(属性映射到值), 任何整数都是 Long 类型, 任何小数会是 Double 类型, 任何数组会是 List 类型.
给定下面的 JSON 字符串:
- {
- "doubleValue" : 10.10,
- "nestedBean" : {
- "name" : "Mr Bean"
- },
- "list" : [ "A" , 10, 20.20, {
- "firstName" : "El Zorro"
- }],
- "array" : [10, 20]
- }
序列化你的对象成 javascript 的 JSON, 参考 json2 |
安装
本插件可通过把插件 jar 包到你的应用的 /WEB-INF/lib 目录来完成安装. 没有别的文件需要拷贝或被创建.
使用 maven 的话, 加入下列到你的 pom 中:
- < dependencies >
- ...
- < dependency >
- < groupId > org.apache.struts </ groupId >
- < artifactId > struts2-json-plugin </ artifactId >
- < version > STRUTS_VERSION </ version >
- </ dependency >
- ...
- </ dependencies >
定制化序列化和反序列化
使用 JSON 注解来达到定制序列化和反序列化过程. 可用的 JSON 注解如下:
名称 描述 默认值 序列化 反序列化
name | 定制字段名 | empty | yes | no |
serialize | 标识为可被序列化 | true | yes | no |
deserialize | 标识为可被反序列化 | true | no | yes |
format | 用于格式化或解析 Date 字段的格式 | "yyyy-MM-dd'T'HH:mm:ss" | yes | yes |
排除属性
逗号分隔的正则表达式列表可传递给 JSON Result 和 Interceptor(拦截器), 被任何 一个正则表达式匹配的属性将会在序列化过程时忽略掉:
- <!-- Result fragment -->
- < result type = "json" >
- < param name = "excludeProperties" >
- login.password,
- studentList.*\.sin
- </ param >
- </ result >
- <!-- Interceptor fragment -->
- < interceptor-ref name = "json" >
- < param name = "enableSMD" > true </ param >
- < param name = "excludeProperties" >
- login.password,
- studentList.*\.sin
- </ param >
- </ interceptor-ref >
逗号分隔的正则表达式列表可被传递给 JSON Result, 用于限制哪些属性可用于序列化. 只有当能够匹配任何一个正则表达式的属性才会包含在序列化输出中.
注: 排除属性表达式优先于包含属性的表达式. 那就是说, 如果包含和排除表达式应用于同一个结果, 包含表达式对于被排除表达式匹配到的属性是不起作用的. |
- <!-- Result fragment -->
- < result type = "json" >
- < param name = "includeProperties" >
- ^entries\[\d+\]\.clientNumber,
- ^entries\[\d+\]\.scheduleNumber,
- ^entries\[\d+\]\.createUserId
- </ param >
- </ result >
使用 "root" 属性(OGNL 表达式) 指定被用于序列化的根对象.
"root" 属性(OGNL 表达式) 也可以用于拦截器来指定被组装的对象, 确保这个对象不会是 null .
- < interceptor-ref name = "json" >
- < param name = "root" > bean1.bean2 </ param >
- </ interceptor-ref >
可能会有某些原因,你想要用些文本对 JSON 输出包装一下, 像用注释包裹, 加上前缀, 或使用文件上载让结果显示在 textarea 之中. 用 wrapPrefix 在开始处加上内容,wrapPostfix 添加内容在尾端. 这两个参数优先使用,而 "wrapWithComments" 和 "prefix" 自从 0.34 后就不推荐使用. 例子:
进行注释:
- < result type = "json" >
- < param name = "wrapPrefix" > /* </ param >
- < param name = "wrapSuffix" > */ </ param >
- </ result >
添加前缀:
包裹上传的文件内容:
- < result type = "json" >
- < param name = "wrapPrefix" > <![CDATA[<html><body><textarea>]]> </ param >
- < param name = "wrapSuffix" > <![CDATA[</textarea></body></html>]]> </ param >
- </ result >
包裹以注释
wrapWithComments 自 0.34 不推荐使用, 建议用 wrapPrefix 和 wrapSuffix . |
wrapWithComments
可使得安全的 JSON 文本变得不安全. 例如,
["*/ alert('XSS'); /*"] 谢谢 Douglas Crockford 的提示! 应考虑用 prefix . |
假如被序列化的 JSON 是 {name: 'El Zorro'} . 那么此时输出就会是: {}&& ({name: 'El Zorro'}
假如 "wrapWithComments" (默认为 false) 属性被设为 true, 生成的被包裹上注释的 JSON 就如下:
- /* {
- "doubleVal": 10.10,
- "nestedBean": {
- "name": "Mr Bean"
- },
- "list": ["A", 10, 20.20, {
- "firstName": "El Zorro"
- }],
- "array": [10, 20]
- } */
欲取消上面的注释,可用:
- var responseObject = eval( "(" +data.substring(data.indexOf( "\/\*" )+2, data.lastIndexOf( "\*\/" ))+ ")" );
prefix 从 0.34 后不建议用, 请用 wrapPrefix 和 wrapSuffix . |
假如参数 prefix 被设置为 true, 生成的 JSON 将被附上前缀 "{}&& ". 这有助于防止被劫持. 详细内容请看 this Dojo Ticket :
默认时,定义在 "root" 对象的基类中的属性不会被序列化, 要序列化来自于所有基类(直到 Object) 中的属性,需在 JSON result 里设置 "ignoreHierarchy" 为 false:
枚举类型
默认的, Enum 被序列化为 name=value 对,这里的 value = name().
使用 result 的参数 "enumAsBean" 可使得 Enum 像一个 bean 一样的被序列化,特定的属性为 _name,值为 name(). 所有的枚举属性都会被序列化.
- public enum AnEnum {
- ValueA("A" ),
- ValueB("B" );
- private String val;
- public AnEnum(val) {
- this .val = val;
- }
- public getVal() {
- return val;
- }
- }
在 struts.xml 中启用该参数:
压缩输出.
设置 enableGZIP 属性为 true 可用 gzip 压缩响应输出. 在请求后 "Accept-Encoding" 头中必须包含 "gzip" 才能正常工作.
防止浏览器缓存响应数据
noCache 设置为 true(默认为 false) 会设置如下响应头:
排除值为 null 的属性
默认的,为 null 的字段也被序列化,生成像 {property_name: null}. 这能够通过设置 excludeNullProperties 为 true 来防止.
- < result type = "json" >
- < param name = "excludeNullProperties" > true </ param >
- </ result >
状态和错误代码
使用 statusCode 来设置响应状态代码:
同时可用 errorCode 来发送一个错误(the server might end up sending something to the client which is not the serialized JSON):
JSONP
To enable JSONP, set the parameter callbackParameter in either the JSON Result or the Interceptor. A parameter with that name will be read from the request, and it value will be used as the JSONP function. Assuming that a request is made with the parameter "callback"="exec":
And that the serialized JSON is {name: 'El Zorro'} . Then the output will be: exec({name: 'El Zorro'})
Content Type
Content type will be set to application/json-rpc by default if SMD is being used, or application/json otherwise. Sometimes it is necessary to set the content type to something else, like when uploading files with Dojo and YUI. Use the contentType parameter in those cases.
以上是前辈"隔叶黄莺 Unmi Blog "对该文档的翻译,感谢前辈的无私奉献!除上述翻译的部分,原文中还有三个具体的范例,除了示范普通的JSON调用外,还有一个JSON RPC范例,笔者看的不是很明白,所以这里不敢多说什么。原文地址:https://cwiki.apache.org/confluence/display/WW/JSON+Plugin ,感兴趣的童鞋可以去看看。
相关推荐
包含翻译后的API文档:struts2-json-plugin-2.3.24-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.struts:struts2-json-plugin:2.3.24; 标签:apache、struts2、plugin、struts、json、jar包、java、...
6. **Plug-in机制**:Struts2的插件系统允许扩展框架功能,例如,struts2-convention-plugin自动映射Action和结果页面,struts2-dojo-plugin则提供 dojo库的支持。 **Struts2的安全问题与应对策略** Struts2的某些...
此压缩包"struts-2.3.16.3-docs.zip"包含了Struts 2版本2.3.16.3的官方文档,这个版本在Struts 2的生命周期中扮演了重要的角色,提供了许多增强的功能和修复了已知的漏洞。 Struts 2的核心特性包括: 1. **Action...
中文-英文对照文档:【***-javadoc-API文档-中文(简体)-英语-对照版.zip】 jar包下载地址:【***.jar下载地址(官方地址+国内镜像地址).txt】 Maven依赖:【***.jar Maven依赖信息(可用于项目pom.xml).txt】 ...
- `struts2-json-plugin.jar`:处理JSON响应的插件。 - `struts2-spring-plugin.jar`:与Spring框架的集成插件。 - `struts2-struts1-plugin.jar`:与Struts1的互操作性插件。 - `其他相关的库文件和文档`:如依赖的...
- `struts2-json-plugin.jar`:支持JSON格式的输入输出,便于与AJAX进行交互。 - `struts2-dojo-plugin.jar`:与Dojo JavaScript库集成,提供富客户端功能。 4. **其他支持库**: - `commons-fileupload.jar`:...
- **插件(Plugins)**:每个插件通常对应一个单独的JAR,如`struts2-convention-plugin.jar`(约定优于配置)、`struts2-json-plugin.jar`(JSON支持)等。 - **依赖库(Dependent Libraries)**:Struts 2依赖于...
同时,官方文档可以帮助开发者更好地理解和利用Struts2的特性,例如Action配置、拦截器链、结果类型、动态方法调用等。 Struts2.2.3版本相对于早期版本,修复了一些已知问题,提升了性能,并引入了新的特性和改进。...
2. `struts2-plugins`目录:各种插件,如Freemarker、Tiles、JSON等。 3. `struts2-dojo-plugin`:提供与Dojo库的集成,用于创建富客户端界面。 4. `struts2-spring-plugin`:与Spring框架的集成库。 5. `struts2-...
- `struts2-json-plugin.jar`:支持JSON数据交换,便于前后端交互。 - `ognl.jar`:Object-Graph Navigation Language,用于表达和操作对象属性,是Struts2中的表达式语言。 - `freemarker.jar`:FreeMarker是一...
Struts2提供了JSON插件,使得将Action结果转换为JSON变得更加简单。前端JavaScript代码使用AJAX发送请求到特定的Struts2 Action,接收到JSON响应后,可以动态更新DOM元素,显示或操作数据。 总结起来,这个"struts...
4. **struts2-json-plugin.jar**:支持JSON格式的数据交换,使得与AJAX和JavaScript更易于交互。 5. **struts2-spring-plugin.jar**:集成Spring框架,帮助管理Action和其他依赖项的生命周期。 此外,描述中提到的...
其他插件可能包括 strut2-json-plugin.jar,用于JSON数据交换,或者 strut2-tiles-plugin.jar,用于页面布局管理。 3. **示例和教程应用**:压缩包中可能包含一些示例应用,这些应用演示了如何使用Struts2框架来...
- `struts2-json-plugin-2.3.1.2.jar`: 提供JSON支持,使应用能够与AJAX或JSON格式的数据交互。 - `struts2-dojo-plugin-2.3.1.2.jar` (可能包含): 如果存在,提供与Dojo JavaScript库的集成,用于创建富客户端...
- 主要的jar包可能包括`struts2-core.jar`(核心库)、`struts2-convention-plugin.jar`(约定优于配置插件)、`struts2-json-plugin.jar`(JSON支持)和`struts2-dojo-plugin.jar`(Dojo UI库支持)等。...
这个"struts-2.3.8 doc"压缩包包含的是Struts 2框架版本2.3.8的官方文档,对于开发者来说是理解和使用Struts 2的关键参考资料。以下是基于该文档的Struts 2核心知识点的详细说明: 1. **MVC模式**:Struts 2遵循...
7. **struts2-json-plugin.jar**:支持JSON数据格式的输入和输出,方便与AJAX或移动设备进行通信。 8. **struts2-spring-plugin.jar**:如果项目中使用了Spring框架,这个插件可以帮助集成Struts 2和Spring,实现...
6. **struts2-json-plugin.jar**:支持JSON数据格式的插件,允许Struts 2应用程序与AJAX或JSON接口进行交互。 7. **struts2-dojo-plugin.jar**:提供与Dojo JavaScript库集成的插件,用于创建富客户端界面。 8. **...
- `struts2-json-plugin`: 用于处理JSON数据,支持RESTful服务。 - `struts2-spring-plugin`: 集成Spring框架,进行依赖注入和AOP支持。 - `struts2-tiles-plugin`: 集成Tiles框架,方便布局和复用视图。 - `struts2...
升级Struts2框架时,开发者需要确保按照官方文档或网络教程的步骤操作,以避免因版本不兼容导致的问题。这可能包括修改配置文件、更新依赖库、调整代码以适应新版本的API变化,以及进行充分的测试,以确保所有功能在...