Send As SMS

2005-08-17

AJAX开发的一些想法

由于在接下来的项目中考虑采用AJAX+J2EE的开发技术,因此,最近对相关的技术考虑得比较多,这里将一些想法收集下来,作为余下研发的一个参考。

 

1、   XML数据处理

AJAX技术中,浏览器和服务器之间更多的交换是数据而不是传统的页面,这是Ajax的一个最重要的特性,那么,表示数据的最佳形式是XML,主要的优势在于:

l          XML具有很强的数据表示能力,尤其是表示复杂的数据结构。实际上,取决于你的抽象能力,XML可以表示任何的数据。

l          XML已经非常成熟,有精确定义的规范,并且已经作为通用的数据交换语言,在BrowserJava以及几乎所有的与Intenet关联的环境之中。

l          Java中,JAXB2技术使得XMLJava可以以一种很友好的方式进行映射,可以使用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=”10”></option>

option: {

   $id: 10    // 属性被编译为 $打头

}

<option id=”10”>text value</option>

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: [ “option1”, “option2”]

采用了如上的映射规则时,我们实现一种双向的映射,即实现从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