DWR的Converter实现原理简单分析及应用

我们在应用 DWR 调用远程方法时涉及到 JS 与 JAVA 之间参数和返回值的数据转换,例如:

JS 的 123 与 Java 的 int或 Integer、long 间的转换

JS 的 "2009-06-23" 与 Java 的 java.util.Date 之间的转换

JS 的 "[1,2,3]" 与 Java 的 int[] 间的转换

JS 的 "{id:123, name: 'Unmi'}" 与 Java 的 Class Person{int id; String name} 间的转换

或者更复杂的嵌套类型( "{id:123, name: 'Unmi', blogs: ['http://unmi.blogjava.net','http://blog.csdn.net/kypfos']}" ) 与 Java 类型间的转换,等等。 那么这一切是怎么进行的呢?其实我们见识过很多组件的类型映射,如 Java 的 PropertyEditor、 Hibernate(UserType)、iBatis(TypeHandler) 的类型映射,Struts1/2 中 Form/Model 用的 Converter 等。

这里我来稍稍分析 DWR 的 Converter 实现,以及说明如何定制自己的 Converter。本文所用 DWR 是 2.0.5 版。

1. DWR 内置的 Converter 及应用类型

名称 应用类型 转换器
null void,java.lang.Void NullConverter
enum   EnumConverter
primitive boolean,byte,short,int,
long,float,double,char,

java.lang.Boolean,java.lang.Byte,
java.lang.Short,

java.lang.Integer,java.lang.Long,
java.lang.Float,

java.lang.Double,java.lang.Character

PrimitiveConverter
bignumber java.math.BigInteger,java.math.BigDecimal BigNumberConverter
string java.lang.String StringConverter
array [Z,[B,[S,[I,[J,[F,[D,[C,[L* ArrayConverter
map java.util.Map MapConverter
collection java.util.Collection CollectionConverter
date java.util.Date,java.sql.Date,
java.sql.Time,

java.sql.Timestamp,
java.util.Calendar

DateConverter
dom org.w3c.dom.Node,org.w3c.dom.Element,
org.w3c.dom.Document
DOMConverter
dom4j org.dom4j.Document,org.dom4j.Element,
org.dom4j.Node
DOM4JConverter
jdom org.jdom.Document,org.jdom.Element JDOMConverter
xom nu.xom.Document,nu.xom.Element,
nu.xom.Node
XOMConverter
servlet javax.servlet.ServletConfig,
javax.servlet.ServletContext,

javax.servlet.http.HttpServletRequest,

javax.servlet.http.HttpServletResponse,

javax.servlet.http.HttpSession

ServletConverter
bean   BeanConverter
object   ObjectConverter
hibernate2   H2BeanConverter
hibernate3   H3BeanConverter
url java.net.URL URLConverter
exception   ExceptionConverter
miniException java.lang.Throwable MinimalistExceptionConverter
时间: 2024-09-18 13:55:05

DWR的Converter实现原理简单分析及应用的相关文章

GHOST漏洞原理简单分析

继 ShellShock漏洞之后,Linux又爆出一重大漏洞.网上各种关于漏洞检查和修复的文章,但很难找到一篇讲述这个漏洞原理的.在阅读网上流传的测试代码后,写一下个人对这个漏洞的简单分析. 这应该是漏洞发布的网址,里面有最详细的解释,本人才疏学浅,只看了少部分,想深入了解的可以直接阅读,如本文有错误,请指正. http://www.openwall.com/lists/oss-security/2015/01/27/9 漏洞简介: GHOST是Linux glibc库上的一个安全漏洞,CVE编

iOS中的定时操作比较和原理简单分析

定时操作对于开发人员来说有着广泛的应用场景:对于iOS开发,实现定时操作的手法也有多种,这里我们简单的进行比较和分析. 1. NSTimer  简单易上手,最高级的api,调用也比较方便.(精度也最低) 但:NSTimer在不做任何额外设置的情况下只能在主线程使用,且会受到其他任务的干扰(主线程runloop执行其他任务,nstimer就不能及时触发): 可以设置NSRunLoopCommonModes来对其加以改善,这个时候主线程的UI操作已经不会阻塞它的触发了. performselecto

PHP文件上传原理简单分析

//表单上传只能使用multipart/form-data编码格式 $_FILES系统函数; $_FILES['myFile']['name']文件名称 $_FILES['myFile']['type']文件的类型,服务端进行限制 image/** image/x-png application/x-zip-compressed $_FILES['myFile']['size']上传文件大小 $_FILES['myFile']['tmp_name']上传服务后保存临时文件名 $_FILES['m

PHP文件上传原理简单分析_php技巧

//表单上传只能使用multipart/form-data编码格式 $_FILES系统函数; $_FILES['myFile']['name']文件名称 $_FILES['myFile']['type']文件的类型,服务端进行限制 image/** image/x-png application/x-zip-compressed $_FILES['myFile']['size']上传文件大小 $_FILES['myFile']['tmp_name']上传服务后保存临时文件名 $_FILES['m

jquery的相关内容:jquery的简单分析

文章简介:jquery原理的简单分析,扒开jquery的小外套. 引言 最近LZ还在消化系统原理的第三章,因此这部分内容LZ打算再沉淀一下再写.本次笔者和各位来讨论一点前端的内容,其实有关jquery,在很久之前,LZ就写过一篇简单的源码分析.只不过当时刚开始写博客,写的相对来讲比较随意,直接就把源码给贴上来了,尽管加了很多注释,但还是会略显粗糙. 这次LZ再次执笔,准备稍微规范一点的探讨一下jquery的相关内容. jquery的外衣 jquery是一个轻量级的JS框架,这点相信大部分人都听过

Java NIO原理图文分析及代码实现

[本文转载于Java NIO原理图文分析及代码实现] 前言:  最近在分析hadoop的RPC(Remote Procedure Call Protocol ,远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.可以参考:http://baike.baidu.com/view/32726.htm )机制时,发现hadoop的RPC机制的实现主要用到了两个技术:动态代理(动态代理可以参考博客:http://weixiaolu.iteye.com/blog/

简单分析percona-zabbix-templates

    当Zabbix和Percona两者相遇,会擦出不少的开源火花来,众人拾柴火焰高,最终受益的还是大部分运维人员.     我很早就用过Percona提供的MySQL监控模板,但是却没有刨根问底,只是简单使用而已,自从定制了Orabbix之后,我还是信心满满,MySQL的数据字典相对要少很多,监控起来可能想必Oracle要少很多,不过关于Percona的这个插件,我还是带着好奇之心,内部是否有很多独门秘籍,我想好好学学那些监控项对应的SQL,好好弥补我对于MySQL监控的一些空缺,所以简单分

Rman操作简单分析

http://www.itpub.net/245264.html Rman操作简单分析 在我的上一篇文章中为大家演示了rman 备份恢复的一个特定例子.(参考:http://www.dbanotes.net/Oracle/Rman...lfile_howto.htm)rman 对dbms_backup.restore 的一些特定调用完梢酝üebug 分析出来.通过设置debug 模式,我们可以跟踪到大量的Log,从而为分析提供一定的说明.假定我们提交如下的命令:rman target /

简单分析针对搜索引擎优化的三个阶段

做SEO优化绝大部分的精力都会放在针对搜索引擎上面的优化,通常针对搜索引擎优化都有三个阶段,下面我们就来简单分析一下这三个阶段! 第一阶段:这是初始化的阶段,这个时期是搜索引擎对新网站的考察期,通常百度考察的比较严格,谷歌考察的比较宽松,此时搜索引擎会对网站的首页会优先收录,算是给站长们的鼓励,对于内容一般收录很少,排名也是镜花水月,看不清楚,搜索引擎的蜘蛛更是很少光顾,此时的优化主要是优化网站的代码,定时定量的更新网站内容,每天做少量的外链,当然这些外链质量要高一点,这个优化阶段大致要花费近一