JSON-RPC-Java
白驰
2023-12-01
JSON-RPC-Java 简单说就是一个web 应用中间件,它允许DHTML直接访问远程的java应用,并无刷新的返回结果。表面上类似于Xml-RPC,或者远程调用EJB。不过JSON-RPC -Java的实现要简单得多,而且最重要的一点,它在客户端是且仅是使用Javascript 。
做web程序的人一定不会陌生 XMLHttpRequest。所以你也许已经猜到 JSON-RPC-Java 框架最底层的实现技术。没错,JSON-RPC-Java 正是使用 XMLHttpRequest 与服务端交换数据并表现出页面无刷新的效果。XMLHttpRequest 我不多说,apple的网站上有一个比较大概的介绍,参见这里,Mozilla的文档就更详尽了,参见这里(很意外,我竟然没有在微软的MSDN上找到一个比较系统的文档)。
从我对现在的所谓新技术的理解,通常是有一个很磅礴的名号,然后便是各巨头一番你捧我喝,实际上却无非是新瓶装老酒。现有的技术套上标准或者规范的外衣,再加上商业吵作,业界就血雨腥风一把。各巨头为了自己的商业利益,订立的繁杂的标准常常让我等望而反胃。
明确了最底层的实现,再看JSON-RPC-Java 就有了一个本质的认识,这有助于我们一件件拨开它神秘的外衣。就好像对待女人,我们通常在已经了解或者相信她有着诱人的身体的时候,才会乐于或者有耐心对待脱衣的前戏。
外套 JSON
JSON (JavaScript Object Notation) 很显然是 JSON-RPC-Java 的基础,它是基于javascript的一种简单易读的轻量级数据交换格式。它的主页在这里。
如果不熟悉Javascript,那么理解JSON则有一些困难。在这里我要先引入“直接量(Literals)”这个javascript概念。很不幸,我很难找到一篇中文的文章介绍它,好不容易在Lycos的中文网站上发现一份,但是只能通过 google 的网页快照来访问了,参见 《JavaScript 的直接量》。
简单说,如果我们要 javascript 创建一个对象,通常情况下可能会这样写:
function Person(name, sex) {
this.name = name;
this.sex = sex;
}
var p = new Person('zhaozexin', 1);
alert(p.name);
从Javascript 1.2开始,创建一个对象有了一种相当快捷的语法,如下:
var p = {"name": 'zhaozexin', "sex" : 1};
这一句就是对象的“直接量”。这样的语法很象java中的Map里toString()方法的输出。name 就是 key, 'zhaozexin' 就是 value。和Map一样,value除了可以是字符串或者数字以外,还可以是数组,函数或者其他对象。 再说说数组,常见的数组声明如下:
var a = new Array();
a[0] = 'zhaozexin';
a[1] = 1;
或者 var a = new Array('zhaozexin', 1);
数组的直接量 如下: var a = ['zhaozexin', 1]; 是否觉得也很象 ArrayList 的toString() 方法输出呢。javascript 何以叫 Javascript,那不是没有道理的。
除了代码的简化以外,直接量还有什么好处呢。我们就要关注 eval (codeString) 这个javascript内置函数了,它接受一个字符串参数,当作javascript的代码去解析并执行。所以eval 函数允许 javascript 源代码的动态执行。例如,下面的代码创建了一个包含 Date 对象的新变量 mydate :eval("var mydate = new Date();")。那么如果我们把“直接量” 作为参数传递给 eval函数,那么就可以动态的创建各式各样的对象了。
更详细的直接量的介绍,可以阅读 《Javascript 权威指南》,我强烈推荐这本书给所有从事web编程的同行。
现在 JSON 应该容易理解了,它的语法实际就是 javascript 的“直接量”。所以 JSON 的介绍上这样写:
JSON is a text format that is completely language independent but uses conventions that are familiar to programmers of the C-family of languages, including C, C++, C#, Java, JavaScript, Perl, TCL, and many others. These properties make JSON an ideal data-interchange language.
这诸多的语言实现 JSON 的工作就相当简单了,就仿佛做一个字符串处理程序一样。那么JSON-RPC-Java 我们就可以猜出了大概了: