AJAX开发的一些想法
由于在接下来的项目中考虑采用AJAX+J2EE的开发技术,因此,最近对相关的技术考虑得比较多,这里将一些想法收集下来,作为余下研发的一个参考。
1、 XML数据处理
AJAX技术中,浏览器和服务器之间更多的交换是数据而不是传统的页面,这是Ajax的一个最重要的特性,那么,表示数据的最佳形式是XML,主要的优势在于:
l XML具有很强的数据表示能力,尤其是表示复杂的数据结构。实际上,取决于你的抽象能力,XML可以表示任何的数据。
l XML已经非常成熟,有精确定义的规范,并且已经作为通用的数据交换语言,在Browser、Java以及几乎所有的与Intenet关联的环境之中。
l 在Java中,JAXB2技术使得XML和Java可以以一种很友好的方式进行映射,可以使用Java的对象模型来简单、强类型的访问XML数据
但是在浏览器中,要处理XML,虽然现有的浏览器大部分支持XMLHTTP,可以将XML转换成为DOM来进行访问,但是,仍然存在一些问题就是,使用DOM来访问XML并不是一种很好的面向对象的方式,而如果能够类似于JAXB2,将XML映射成为Javascript对象,那么,使用Javascript来处理XML将更为便捷。经过研究,这完全是可行的,而且会潜在的带来很多的优点。
以一个例子来表述:
<?xml version="1.0" encoding="UTF-8"?>
<PollDefinition xmlns="http://www.macaufly.com/web">
<id>10</id>
<name>Favorate Programming Language</name>
<description>What is your favorate programming language,
VB/Delphi/C++/C#/PHP/Java?
</description>
<options>
<option>
<name>VB</name>
<label>Visual Basic</label>
<description>Microsoft Visual Basic
</description>
</option>
<option>
<name>JAVA</name>
<label>Java</label>
<description>Java
</description>
</option>
</options>
</PollDefinition>
这段XML完全可以映射成为如下的Javascript对象(而且符合JSON规范):
{ pollDefintion:
{
$xmlns: "http://www.macaufly.com/web",
id: 10,
name: "Favorate Programing Language";
description: "What is your favorate programming language,VB/Delphi/C++/C#/PHP/Java?";
options: {
option : [
{ name: "VB",
label: "Visual Basic",
description: "Microsoft Visual Basic"
}
{ name: "JAVA",
label: "Java",
description: "Java"
}
]
}
}
}
映射规则如下:
<name>text</name> | name: “text” or name: number // (如果text是数字的话) |
<option> <name>VB</name> <label>Visual Basic</label> </option> | option: { name: “VB”, label: “Visual Basic” } |
<option id=” | option: { $id: 10 // 属性被编译为 $打头 } |
<option id=” | option: { $id: 10, $$text: “text value” // text 节点编译成为 $$text } |
<options> <option></option> <option></option> </options> | options: [ __innertag: “option”; // 表示这包含一个内部类型。 { option1 }, { option2 } ] // 当外部标记 = 内部标记+s 并且,内部标记中都包含相同类型时,进行自动的简化。 |
<name>name</name> <option>option1</option> </option>option2</option> | name: “name”, option: [ “option |
采用了如上的映射规则时,我们实现一种双向的映射,即实现从Javascript表示映射到等效的XML,或从XML映射成为Javascript。
通过这种双向的映射,我们可以建立这样的一种通信技术:
l 在Server端使用JAXB2来映射XML,商业逻辑处理类直接面向POJO,而无需关心XML
l 服务器端通信桥(servlet)负责把POJO转换成为XML,并返回给浏览器
l 浏览器端的Ajax引擎负责把XML编译成为Javascript,供后续的代码进行处理。
l 浏览器向Ajax引擎发送Javascript对象请求,Ajax引擎负责把其转换成为XML,并发送给服务器
l 服务器接Ajax桥接收到XML请求,使用JAXB2将其自动转换成为POJO,并调用商业逻辑的代码
通过这样的一种模式,我们使用了XML作为数据交换的标准,但在浏览器端和服务器端都使用了XML-对象映射的技术,使得两端开发的代码亮都最小化。
相关的代码开发:
l function JSON2XML(json) // javascript方法,实现将json对象转换成为XML
l function XML2JSON(xml) // javascript方法,实现将XML转换成为json对象。
l function JSON2String(json) // 将 json 对象转换成为 json 文本
准备相关的单元测试代码
2、 客户端模板处理技术(待续,在下一个blog中)
0 Comments:
张贴评论
<< Home