Send As SMS

2005-12-31

Simple SSO framework

目前,我们的网站还没有一个很好的SSO的架构,但是SSO对于我们来说,却是非常紧迫的一个需求:不如说,我们迫切的希望我们的基于Java的WEB应用、基于ASP的WEB应用,能够共享会员的信息。

在环境而言,目前主要的是:IIS、Tomcat、Weblogic等。

此外,目前我们的很多的应用都是在应用层面上进行用户认证和权限管理的,并不是使用WEB容器的用户认证和权限管理的。在很长的时间之内,SSO对应用级别进行支持仍然是十分必要的。

Tomcat在内部实现了一个很简单的SSO框架,基于Cookie: JSESSIONIDSSO,在同一个Virtual Host内部,很简洁的就可以实现SSO。

如果不在 一个Virtual Host呢?我觉得也可以建立一个简单的SSO协议,大致的想法是:

1、设定一个 SSO 登陆的主服务器,在各个WEB应用需要登陆认证时,转移到这个SSO服务页面上(登陆完成后,自动返回)
2、SSO主服务器检查用户是否已经成功登陆,如果是的话,在返回信息中包括 SSOID,否则首先登陆,然后返回SSOID
3、其它的WEB应用将SSOID 作为Cookie保存到浏览器上,并在local session中保存SSOID 的相关信息(直接向SSO登陆主服务器发出请求)

主要的开发工作:
1、SSO 主认证服务器
  • checklogin.service -- 检查用户是否已经登陆,已登录,返回SSOID
  • login.service -- 向服务器发送登陆请求,登陆成功的话,返回SSOID
  • getUserInfo(ssoid) -- 服务器返回指定ssoid 的用户相关信息
2、基于AJAX的工作流程:
  1. 网站如果需要进行用户认证,跳转到 login.jsp 页面
  2. 在这个页面中,向 SSO 主认证服务器发送 checklogin.service 请求,如果已有SSOID,则设置SSOID Cookie,成功,跳至4
  3. checklogin 返回无 SSOID 的话,ajax在前端打开 SSO 主认证服务器提供的 Login 用户界面(可以嵌入到当前页面中)
    1. 用户输入登陆信息,提交 login.service
    2. SSO主认证服务器成功后,返回SSOID及基本客户信息
    3. AJAX根据返回结果设置Cookie
    4. 登陆完成
  4. WEB服务器根据Cookie中的SSOID向SSO主认证服务其请求 getUserInfo 获得用户的详细信息,保存在Local Session中。
优势:
1、在应用级别上的SSO不依赖于WEB服务器
2、采用AJAX的解决方案,可以最为简单的在服务器上进行SSO实现。

这里还只是一个初步的想法,详细地形式需要在实战中进行验证。

2005-12-27

基于easyajax的MDA开发的一些想法

Model Driven Application 一直是我比较关注的一个技术,不过,我对MDA的正统理论始终是不得要领,也从来没有对一个实际的MDA框架有过了解。对于基于UML德MDA,我一直都不太感冒。

在我的理想境界中,MDA的模式就是我们将业务逻辑(包括数据结构)这样的开发体完成后,MDA框架可以帮我们完成剩下的任务,比如说用户界面(这往往是 最花费时间的开发任务),虽然不一定很好,适用,但起码可以使用,然后我们可以针对这些不适用的地方把进行开发工作。不需要额外的开发工具(我现在讨厌所 谓的建模工具),也不需要声称一堆无聊的代码(其实,真的不知道正统的MDA框架为什么这么热衷于生成中间代码)。在我看来,MDA的Model其实就是 一些数据,可以被一些通用的模式匹配上,从而做相应的自动处理。就像组件可以根据不同的输入数据执行不同的动作一样,MDA也完全可以利用组件的概念,这 是这时输入的信息就是模式本身。

easyajax 的技术模式,再WEB开发上比较良好的回归到了传统的UI组件模式,一个简单的MDA模式可以这样设计:

1、对于每一个 对象,我们需要的是浏览它的状态(显示)以及执行其容许的操作,前者涉及的是对象的状态显示(对应属性),后者涉及的则是对象的动作(方法)。
2、对于需要进行现实的信息,我们可以将属性映射到一些预先设定的数据结构,这些数据结构可以通过固有的组件显示出来。典型的Record数据结构、RecordSet数据结构。
3、有的时候,一个对象的行为不仅仅是这个对象的方法,在这种情况下,有一种可以扩展的方式,比如说,通过Rule Engine就是一个很好的模式,由规则引擎根据对象的当前状态,决定它可以执行一些什么样的操作。

具体而言,在 easyajax 中,我们可以进行这样的开发:
1、easy.DynamicRecord 可以用来显示/编辑一个 Record
2、easy.DynamicRecordSet 可以用来显示/编辑一个RecordSet。
3、easy.DynamicData 可以用来显示/编辑一个更为General的对象,包括:简单的属性、嵌套的子对象、数组等。
4、对于服务器上的一个对象,可以作为一个 Record/RecordSet/Javascript对象返回,前端界面可以对其进行显示。
5、对于对象的一个方法,我们可以产生一个DynamicForm,来输入这些参数,然后Pass到服务端。

这种MDA的成功推出,对WEB软件的快速开发会具有极为重要的作用,虽然这些动态的用户界面可能不会作为最终的UI制品,但可以最大化的让软件达到一个Baseline,作为迭代开发的一个基础。

2005-12-25

htmlunit

晚上,初步的看了看htmlunit这个软件的资料,觉得很不错,是个很好地web测试的软件,我觉得,可以基于这个包做很多的事情:

1、基于htmlunit提供的环境,实现 easyajax 的服务器端模拟。这使得部分的组件可以在服务器上进行计算,从而提供一个对搜索引擎友好的环境。当然这样的页面也完全可以在浏览器本地进行御览。

2、基于htmlunit进行单元测试,我觉得尤为重要的是,我们可以直接使用javascript来模拟测试。就像这个javascript是运行在网页内部一样。

3、近期可做的任务包括:对公司的一些网站可以进行定期的监控,检查网站是否能否正常工作。如果不能正常工作的话,可以显示一个警告信息。(但目前还缺乏一个监控的框架),如果做好这样的一个框架的话,对WEB网页的测试可以采用htmlunit框架来进行。



关于资讯网站开发的一些想法

做一个好的资讯网站,如果是基于easyajax框架的话,应该如何来做呢?需要怎么来组织呢?

1、首先是需要有一个很好的内容管理框架。对于显示的文本信息而言,xhtml是一个很不错的选择。可以采用LOB来保存内容。
2、可以采用fckeditor为基础来提供一个可视化的编辑器,提供WYSIWYG的编辑功能。需结合对图片等的上传处理。使得提供图文并茂的编辑功能。
3、可以结合邮件的MultiPart功能,使用邮件的形式来进行内容的发布工作。需要开发一个软件,将POP3收到的邮件存储到数据库中。
4、提供easyajax组件来在显示资讯,XMLHttp取到xhtml内容后,可以通过innerHTML的形式在前段进行显示。
5、为了便于搜索引擎搜索,很有必要开发服务器端的支持。

目前的,jsclass组件都是在前端进行执行,在需要搜索的情况下,还是希望这些操作能够在服务器端进行支持。

1、将html文档解析成为DOM模型。(结合xerces/jtidy等功能,可以在服务端构造DOM)
2、提供Javascript到DOM的绑定功能,使得可以执行javascript功能。为此,可以需要提供一定的模拟前端环境。
3、对部分需要在服务器端执行的代码,进行执行。在javascript执行过程中,可以更新DOM。

最后,servlet负责将生成的DOM序列化成为xhtml传会给浏览器。
比如说:
1、服务器端模拟装入DOM,初始化执行head中的全部server-side javascript。<script runat="server">...</script>
2、执行 body.onload 事件,一般的,执行ajax.DomBean.InitPage(),在递归遍历树时,对DomBean类中支持server端运行的,执行init/apply/refresh循环。
3、在服务器端,提供一些额外的辅助方法,以模拟前端的行为,比如说:window.loadHTML(url) 可以直接返回一个DOM。也可以直接调用其他的服务提供的方法。

但一般地说,设计easyajax的原则应尽可能让这些页面可以直接在不需要服务器支持的情况下,也可以模拟执行。在服务器端执行的一个主要的目的是让同样的代码有一种不同的执行方式。比如说,更好的支持搜索引擎。

The bugs cause IE crash

在开发easyajax的过程中,有一个应用案例,是用来进行数据库的增删改查的,在处理翻页的过程中,总是出现 IE 异常崩溃的现象。而且这个过程出现得很奇怪,在调试Javascript过程中,执行的每一行代码都不会导致这个错误的出现,但是在事件执行完毕,回到 IE后,就会让IE提示一个:系统异常,IE需要重新启动的错误。

这个错误也不是100%发生的,在有的情况下,需要反复翻页近100次才会出现,而有的时候则在第一次翻页时就出现了。相反,在Firefox等则不会报错。

经过反复的思考,后面总算发现了原因:

<table width="100%"  border="0" cellpadding="1" cellspacing="1">
                 <tr bgcolor="#FFFFFF">
                    <td class="style3">ID</td>
                    <td class="style3">客户号</td>
                    <td class="style3">常用姓名</td>
                    <td class="style3">性别</td>
                    <td class="style3">国籍</td>
                    <td class="style3">证件类型</td>
                    <td class="style3">证件号码</td>
                    <td></td>
                    <td></td>
                  </tr>
                 <tbody jsclass="ajax.DataIteration" datasource="#{crud.entities}" variable="memberName" id="crud.listTemplate" style="display:none">
                    <tr  >
                      <td class="style4">#{env.memberName.memberNamesId}</td>
                      <td class="style4">#{env.memberName.memberNo}</td>
                      <td class="style4">#{env.memberName.commonUseName}</td>
                      <td class="style4">#{env.memberName.commonUseSex}</td>
                      <td class="style4">#{env.memberName.commonUseCountry}</td>
                      <td class="style4">#{env.memberName.certificateType}</td>
                      <td class="style4">#{env.memberName.certificateNo}</td>
                      <td class="style4"><a href="#" onclick="modify();crud.edit(this.domBean.getEnv('index') );" jsclass="true"><img src="../../images/update_but.gif"  border="0"/></a></td>
                      <td class="style4"><a href="#" onclick="crud.remove( this.domBean.getEnv('index') );" jsclass="true"><img src="../../images/del_but.gif"  border="0"/></a></td>
                    </tr>
                 </tbody>
               </table>
在这段代码中,ajax.DataIteration 施加在 tbody 对象上,在多行记录的情况下,也就是说tbody被重复了很多行。导致IE死亡的一个原因当然是这个DOM的不合法引起的(但是,如果能够给出一个很好的 报错的话,IE还是可以理解的,但不明就里的死掉,确实是程序鲁棒性作得不好的原因)。
如果把ajax.DataIteration 移到 tr 上,(当然这也是应该的),那么这个DOM就是一个合法的,自然也不会再导致IE死亡了。这个也给我们以后再碰到类似的问题时,如何解决这类问题提供了参考的经验:DOM操作如果不正确的话,IE是可能会死的。

经过这些时候遇到的这么多的问题,既让我们对ajax程序开发,要对多个浏览器提供很好支持,在开发、调试,发现问题等困难有了一定的了解,同时,也对于这些疑难问题,确实还是可以解决的,让ajax实用化,完全是可以的。

2005-12-21

关于数据库元信息处理的一些Idea

  • datatype: boolean, string, number, decimal, image, date
  • length, precision
  • required
  • regexp
  • jsexp
  • lookups -- 可以支持常见的下拉框模式。
  • label
  • tips
在Java端,我们将通过Annotation(初步考虑使用 @FieldInfo名称)来对信息进行附注,然后基于JAXB2框架,可以返回所有的这些元信息。同时,easyajax可以自动的根据这些元信息来生成用户界面。(配合JAXB2-reflect API)

希望这个工作可以在 12-31 前完成。

JSON-RPC-Java

http://oss.metaparadigm.com/jsonrpc-1.0/manual.html

JSON新近的rpc做得还是很有新意的,我觉得也可以把这个特性合并在easyajax中,使得javascript调用java更为简单灵活。

这里是一些基本的想法:

1、JAXB2的模式还是应该继续保存,但可以使用JSON-RPC的模式来支持非JDK5的情况。
2、easyajax目前的传输模式是XML,可以考虑增加json传输模式。
3、在Java5的服务器实现上,对于非JAXB绑定的对象可以考虑使用JSON-Java的这种绑定模式(来支持普通的JavaBean)

特殊类型的支持:
1、array
2、Collection/Set/Map

这些既可以作为参数,也可以作为返回值。

此外,对easyajax,我也有比较长的一段时间没有更新了,主要是让内部的一个团队在学习、使用它,一些迫切的增强包括:
1、对Input/Select 等组件进一步的进行完善,尤其是校验这一块,传统的Form要素度可以在easyajax中更好的支持。

2005-12-05

基于Ajax的应用程序架构汇总(转摘)

浏览器端框架被划分成两大类:

・应用程序框架:提供浏览器的功能,但是常以包括窗口小部件抽象和另外的部件而出名,其功能主要围绕桌面GUI框架。

・基本结构框架:提供基本的管道和可移植的浏览器抽象,让开发者去创建内容。典型的功能:

* 针对XMLHttpRequest的包装器以封装浏览器-服务器的交互。(所有的框架都提供这一功能)。

* XML操作和查询。

* 根据来自XMLHttpRequest的应答执行DOM操作。

* 在一些情况中,与另外的浏览器端技术如Flash(和潜在的Java applets)集成在一起。

而服务器端框架通常以下面两种方式工作(尽管它们在这里根据语言的不同进行了分类):

・HTML/JS生成:服务器提供完整的HTML/Javascript代码生成和浏览器-服务器协调,结果是只有浏览器端编码可以被定制。

・远程调用:Javascript调用直接被路由到服务器端功能(例如Java方法)并返回到Javascript回叫处理器;或者Javascript调用服务器以提取信息,例如会话细节,数据库查询等。

・纯Javascript:应用程序框架

1.1 Bindows(自从2003年)

网址是:http://www.bindows.net,Bindows是一个软件开发包(SDK),它,通过强力联合DHTML,JavaScript,CSS和XML等技术,能生成高度交互的 互联网应用程序-成为现代的桌面应用程序的强有力对手。Bindows应用程序不要求下载和也不需要在用户端安装-仅要求有一个浏览器(也不需要Java,Flash或者ActiveX)。Bindows有可能领导面向对象开发的AJAX应用程序的平台。

・它是商业化的,使用来自于MB的技术(总部位于GA USA,主要开发中心在瑞典,成立于2002年)。

Bindows框架提供给你:

・基于类的面向对象的API

・一套完整的窗口系统,提供宽范围的窗口小部件支持,包括菜单、表单、格子、滑动条、量程,甚至更多

・用于开发zero-footprint SOA客户端应用程序的领先的工具箱

・本机的XML,SOAP和XML-RPC支持

・单用户到企业级的支持

・内建的对AJAX的支持

Bindows开发环境:

・支持企业级规模的工程开发

・跨浏览器,跨平台支持

・服务器独立结构

・与新的和现有资源的互操作性

・一致性开发方法学

1.2 BackBase(自从2003年)

网址是:http://www.backbase.com,是一个全面的浏览器端框架,支持丰富的浏览器功能以及与.NET和Java的集成。

・商业化,来自于Backbase B.V(总部在Amsterdam,成立于2003年)。

1.3 DOJO(开发中;自从2004年9月)

网址是:http://dojotoolkit.org/,提供全面窗口小组件和浏览器-服务器消息支持。

・为创建定制的Javascript窗口小组件提供框架支持。

・预置的窗口小组件库。

・浏览器-服务器消息支持-XMLHttpRequest和另外的机制。

・支持浏览器中的URL操纵功能。

・ 开源许可(学术自由许可2.1(http://opensource.org/licenses/afl-2.1.php)),由JotSpot (http://www.jot.com/)的Alex Russell(http://alex.dojotoolkit.org/)所领导。

1.4 Open Rico(开发中;自从2005年5月;基于早期的私有框架)

网址是:http://openrico.org/demos.page,是一多用途框架,支持Ajax基础结构和用户交互。

・一个XMLHttpRequest应答能被路由到一个或者更多回叫操作,DOM对象,或者Javascript对象。

・容易鼠标拖动支持。

・Ajax动画,例如缩放和变换。

・"行为"-实质上是窗口小组件库。

・使用指南(http://www.mirimar.net/mailbrowser/),由RussMirimar的Yonah所提供

・开源。源于Sabre航空公司解决方案,由Bill Scott(http://looksgoodworkswell.blogspot.com),Darren James及另外一些人所支持。

1.5 qooxdoo(开发中;自从2005年5月)

网址是:http://qooxdoo.sourceforge.net/,是另一个雄心勃勃的框架,提供宽范围的UI支持和正在开发中的基础结构特性。

・基础结构:

* DOM和事件/焦点管理的可移植的抽象。

* 调试支持。

* 易于时间调度的Timer类。

* Getter/Setter支持。

・UI:

* 窗口小组件框架和预置的窗口小组件库。

* 布局管理器。

* 图像缓冲和可移植的PNG透明性。

・开源(LGPL)。来自多方面的贡献者。

1.6 Tibet(开发中;自从2005年6月)

网址是:http://www.technicalpursuit.com/,目的是提供高度可移植的和全面的Javascript API,结果是,可能自动生成大量的客户端代码。自称是"企业级Ajax"。

・远程脚本运行在XMLHttpRequest包装之上-通过协调调用结果支持工作流管理,例如应答可以发生在只有当两个分离的调用返回时。

・URI支持。

・所有的HTTP方法-不仅是"GET"和"POST"。

・低级的协议-File://和WebDav以及HTTP

・Web服务调用-SOAP,XML-RPC,等等。

・预置的针对Google API,Amazon API等等服务的支持。

・由高级Javascript对象组成一个巨大的库。

・许多XML操作。

・IDE和开发工具。

・开源许可(显然经过OSI认证,但是细节不多)。

2 纯Javascript:基础结构框架

2.1 AjaxCaller(Alpha版本;自从5月2005年)

网址是:http://ajaxify.com/run/testAjaxCaller/,是一基本的线程安全的XMLHttpRequest包装器,主要针对Ajax新手,仍处于原始的alpha 开发阶段,目前仅与AjaxPatterns的在线搜索范例一起打包。

・实现对服务器的调用(GET/POST/PUT/DELETE),用路由到一个回叫操作的plain-text或者XML完成。

・使用过的XMLHttpRequest对象的析构。

・Response缓冲(计划的)。

・针对Ajax新手-并非强调性能优化,该库主要用于实现易读的基础代码并将提供调试支持。

・开源许可。由Michael Mahemoff(http://softwareas.com)(具有John Wehr和Richard Schwartz的一些思想)维护。

2.2 Flash JavaScript集成包

网址是:http://www.osflash.org/doku.php?id=flashjs,允许JavaScript和Flash内容的集成:

・使JavaScript能够调用ActionScript功能和反过来的实现。

・所有主要的数据类型能在这两种环境之间传递。

・开源许可。由多个开源Flash贡献者提供支持。

2.3 Google AJAXSLT(发行于2005年6月)

网址是:http://goog-ajaxslt.sourceforge.net/,是一个Javascript框架,用来执行XSLT转换以及XPath查询。

・建立在Google地图工作基础之上。

・开源许可(BSD)。由一家创新搜索方案公司支持,自称为"Google"。

2.4 HTMLHttpRequest(Beta版;始于2005年)

HtmlHttpRequest(http://www.twinhelix.com/javascript/htmlhttprequest/),它使用了XMLHttpRequest和Iframes以改进兼容性。

・测试过并能工作在:IE6/Win,IE5.5/Win,IE5/Win,IE4/Win,Mozilla/Win,Opera7/Win,Safari/Mac,IE5/Mac。

・未测试,可能能工作在:IE4/Mac,Mozilla/Mac,Opera/Other,Konqueror/Linux。你正在使用这些之一吗?作者正在请求兼容性信息。

・开源许可(LGPL)。由Twin Helix Designs(http://www.twinhelix.com/)的Angus Turnbull维护。

2.5 交互式网站框架(自从2005年5月)

交 互式网站框架(http://sourceforge.net/projects/iwf/,是一个项目,目的是从浏览器端对Ajax基础结构的多方面予 以支持。自描述为"使用javascript,css,xml,和html来创造高度交互网站的框架。包括一个定制的针对高度可读的javascript 的xml分析器。实质上,是建立基于AJAX的网站的基础,还有另外一些通用脚本"。

・线程安全的XMLHttpRequest实现。

・针对XML文档的包装器,以便你能够创建更具可读性的代码:

var node = doc.groceries.frozen[0].pizza[0].size;</pre>

代替手工的导航:

var node = doc.documentElement.firstChild.firstChild.getAttribute("size");</pre>

・开源许可。由Weaver(http://circaware.com|Brock)维护

2.6 LibXMLHttpRequest(发行于2003年6月)

libXmlRequest(http://www.whitefrost.com/servlet/connector?file=reference/2003/06/17/libXmlRequest.html) ,是XMLHttpRequest的一个瘦包装器。

・getXML()和postXML()方法。

・XMLHttpRequest对象池支持。

・Response缓冲。

・可用源码(明显),但是受标准版权的保护,由Stephen W.Coate(http://www.whitefrost.com/index.jsp)所维护。

2.7 RSLite(x)

网站是:http://www.ashleyit.com/rs/main.htm,是一个针对XMLHttpRequest的瘦包装器。

・一个简单的组件,作为Brent Ashley的更全面的远程脚本工作(参见Javascript远程脚本-JSRS在多语言服务器端)的一部分发行。

2.8 Sack(在开发中,自从2005年5月)

网站是:http://twilightuniverse.com/2005/05/sack-of-ajax/,是一个针对XMLHttpRequest的瘦包装器。

・调用者能指定回叫函数或者回叫DOM对象。借助于回叫DOM,应答文本直接被推入到DOM中

2.9 Sarissa(发行于2月,2003年)

网站是:http://sarissa.sf.net,是一种Javascript API,它封装了在浏览器端可以独立调用XML的功能。

・可移植的XMLHttpRequest创建

・可移植的XPath查询

・可移植的DOM操作

・可移植的XSLT

・可移植的XML串行化

・开源(GPL2.0和LGPL2.1)。来自多方面贡献者。

2.10 XHConn(发行于自从4月,2005年)

网站是:http://xkr.us/code/javascript/XHConn/,是一个对XMLHttpRequest的瘦包装器。

・例如:

new XHConn().connect("mypage.php","POST","foo=bar&baz=qux",fnWhenDone);

・开源许可。由Brad Fults所维护。

服务器端:多种语言

3.1 跨平台异步的接口工具箱(5月2005年)

CPAINT: http://cpaint.sourceforge.net/,是一真正的支持PHP和ASP/Vbscript的Ajax实现和JSRS (JavaScript远程脚本)实现。CPAINT提供给你需求的代码在后台实现AJAX和JSRS,而返回的数据以JavaScript形式在前台操 作,格式化和显示。这允许你创建能提供接近实时的反馈给用户的web应用程序。

・支持PHP&ASP

・针对所有函数的一致的JavaScript文件

・支持远程脚本和XML

・支持本地和远程函数

・单个或者多个XMLHTTP对象

・以文本或者JavaScript XML/DOM文档对象方式返回后台数据

・能支持POST和GET请求

・后台代理函数来访问远程函数和数据

・在所有的主要浏览器上测试过

・在GNU GPL&LGPL保护下发行

3.2 SAJAX(可用,但是不是1.0版本;自从3月2005年)

网站是: http://www.modernmethod.com/sajax/,直接把调用从Javascript发送到你的服务器端语言并再次回返。例如,调 用一个javascript方法x_calculateBudget(),将先到达服务器和调用一个Java calculateBudget()方法,然后以javascript方式把值返回到x_calculateBudget_cb()。

・便利从Javascript代理函数到后台操作的映射。

・能够代理对众多服务器端平台(ASP/ColdFusion/Io/Lua/Perl/PHP/Python/Ruby)的调用。

・开源许可。来自多方面贡献者。

3.3 Javascipt对象标志(JSON)和JSON-RPC

JSON (http://www.crockford.com/JSON/index.html),是一个"胖的自由的XML选择",而JSON-RPC (http://www.json-rpc.org/)是一种远程过程协议,类似于XML-RPC,强有力支持Javascript客户。

・实现多服务器端平台(http://www.json-rpc.org/impl.xhtml):Java,Python,Ruby,Perl。

・针对每种平台有独立的打包和许可,如JSON-RPC-Java(http://oss.metaparadigm.com/jsonrpc/)。

3.4 Javascript远程脚本(JSRS)(自从2000年)

网址是:http://www.ashleyit.com/rs/jsrs/test.htm,直接把调用从Javascript发送到你的服务器端语言并再次回返。

・知名的浏览器:IE4+,NS4.x,NS6.x,Mozilla,Opera7和Galeon。

・服务器端支持:ASP,ColdFusion,PerlCGI,PHP,Python和JSP(servlet)。

・开源许可。由Brent Ashley(http://www.ashleyit.com/)提供支持。

4 服务器端:Java

注意:许多现有的框架最近正在添加Java支持(例如struts),我将在后面指出。

4.1 WebORB for Java(自从2005年8月)

网址:http://www.themidnightcoders.com/weborb/aboutWeborb.htm,是一个平台,支持开发AJAX和基于Flash的胖客户端应用程序,并可以把它们与Java对象和XML Web服务相系起来。在线举例(http://www.themidnightcoders.com/examples)

・WebORB包括一个称作丰富的客户系统(http://www.themidnightcoders.com/rcs/index.htm)的客户端库。该丰富的客户系统提供一简单的在线api来绑定到并调用任何Java对象,XML Web服务或者EJB上的方法。

・支持同步的和异步的方法调用。

・并不要求在服务器端代码上作任何修改,不需要定制方法属性,特别的签名或者参数类型。★不要求设计时生成代理。

・同步调用返回来自于该调用(不需要回叫)的数据。异步的调用依赖于一个回叫实现。

・任何服务器端方法能被同步地或者异步地调用。

・客户应用程序能向服务器对象请求指定的活动方式。结果,对象能被轻易地创建而不需任何特殊的编程

・提供一个特定API来处理数据库查询结果-服务器代码能返回Data集合或者Data表,而客户端以一个特殊RecordSet JavaScript对象来显示这个结果。该对象提供一个方法以检索列名和行数据。

・支持数据分页技术。客户应用程序能检索页面中的数据。

・支持所有的服务器端参数类型并返回值-原型,字符串,复合类型,数组,本机.net集合,远程参考。

・共有两种版本可用:标准版(自由)和专业版(商业许可)

4.2 Echo 2(自从3月2005年)

网址是:http://www.nextapp.com/products/echo2/,允许你用纯Java代码编写Ajax应用软件(范例(http://demo.nextapp.com/InteractiveTest/ia))。

自动地生成HTML和Javascript。

・协调浏览器和服务器之间的消息。消息形式为XML。

・如果需要,可以手工编写定制的Javascript部件。

・开源许可(Mozilla公共许可或者GNU LGPL)。源于Next App,Inc.(http://www.nextapp.com/)。

4.3 Direct Web Remoting (DWR)(2005年)

网址是:http://www.getahead.ltd.uk/dwr/,是一个框架,用于直接从Javascript代码中调用Java方法。

・象SAJAX,能把Javascript中的调用传递到Java方法,并返回到Javascript回叫。

・能与任何web框架(Struts,Tapestry,等等)一起使用。

・ 开源许可(Apache(http://www.apache.org/LICENSE.txt))。由Joe Walker(http://www.getahead.ltd.uk/sg/space/joe/)所支持。被加入到WebWork(http: //www.opensymphony.com/webwork/)版本。

4.4 SWATO(2005年)

网址是:http://swato.dev.java.net/,是一套可重用的和良好集成的Java/JavaScript库,它实现了一种更容易的方式来改变你的web应用程序的交互,它是通过AJAX方式实现。

・服务器端Java库能被容易地配置到所有的Servlet 2.3+匹配的容器中。

・客户端JavaScript库能工作在支持HttpXMLRequest的各种浏览器中。

・使用JSON来在服务器端编组你的POJO数据。这样你能存取在任何JavaScript环境(HTML,XUL,SVG)中的远程数据,这种存取可以容易地通过硬编码或者与某种成熟的JavaScript库集成来实现。

・提供一个简单的接口来使你的JavaScript代码可以与暴露在客户端的远程POJO交互(RPC等)。

・使用web.xml中的<servlet>和<filter>的容易且灵活的配置,并能(但不是依赖)与Spring集成到一起。

・提供了几个可帮助你快速开发web应用程序的组件(如自动完成的文本框,在线表单,在线列表,等等)。

5 服务器端:Lisp

5.1 CL-Ajax

网址:http://cliki.net/cl-ajax,实现Javascript直接调用服务器端Lisp函数。

・如下输出函数:

(export-函数 #'my-函数)

・可以产生带有参数的Javascript代理。

・能回叫Javascript函数或者DOM对象。

・可以被集成进SAJAX。

・开源(定制,非常灵活,许可)。由[Richard Newman](http://www.holygoat.co.uk/)所维护。

6 服务器端:.NET

6.1 WebORB for.NET(自从8月2005年)

网址:http://www.themidnightcoders.com/weborb/aboutWeborb.htm,是一个平台,用于开发AJAX和基于Flash的胖客户端应用程序,并能把它们连接到.NET对象和XML Web服务。(在线举例( http://www.themidnightcoders.com/examples))

・WebORB 包括一个客户端库,名叫Rich Client System(http://www.themidnightcoders.com/rcs/index.htm)。Rich Client System提供一简单的在线api以绑定到和调用任何.NET对象或者XML Web服务上的任何方法。

・支持同步和异步的方法调用

・并不要求在服务器端代码上作任何修改,不需要定制方法属性,特别的签名或者参数类型。**不要求设计时代理生成。

・同步调用返回来自于该调用的数据(不需要回叫)。异步的调用依赖于一个回叫实现。

・任何服务器端方法能被同步地或者异步地调用。

・客户应用程序能向服务器对象请求指定的活动方式。结果,对象能被轻易地创建而不需任何特殊的编程

・提供一个特定API来处理数据库查询结果-服务器代码能返回DataSet或者DataTable,而客户端以一个特殊RecordSet JavaScript对象来显示这个结果。该对象提供一个方法以检索列名和行数据

・支持数据页面技术。客户端应用程序能检索页面中的数据。

・支持所有的服务器端参数类型并返回值-原型,字符串,复合类型,数组,本机.net集合,远程参考

・共有两种版本可用的:标准版(自由)和专业版(商业许可)

6.2 Ajax.NET(自从3月2005年)

网址是:http://ajax.schwarz-interactive.de/,是一个库,实现从Javascript到服务器端.NET的存取。

・象SAJAX,能把Javascript中的调用传递到.NET方法,并返回到Javascript回叫。

・能存取来自于JavaScript的会话数据。

・缓存结果

・自由使用,可用的源码,未指定使用许可。由Michael Schwarz(http://weblogs.asp.net/mschwarz/)所维护。

・不允许改变源代码,用属性标记方法

・完整的类支持以返回客户端JavaScript值

・使用HtmlControls来进行输入和返回值

・可以返回数据表,数据集,数据视图,数组和集合

7 服务器端:PHP

7.1 AjaxAC(自从2005年4月)

网址是:http://ajax.zervaas.com.au/,用单个的PHP类封装了完整的应用程序。

・所有的应用程序代码是自包含在单个类中(附加另外一些JavaScript库)

・干净利索地调用PHP文件/HTML页面。只需创建应用程序类,然后参照应用程序JavaScript和依附任何需要的HTML元素到该应用程序。

・容易地处理JavaScript事件的内嵌功能

・创建子需要并处理它们的内嵌功能

・允许定制的配置值,因此某些单元能在运行时间设置

・无凌乱的JavaScript代码夹杂在调用HTML的代码中-所有的事件是被动态依附的

・由于以上两个原因容易和模板引擎集成到一起

・容易钩到(hook in to)已有的PHP类或者MySQL数据库以返回来自于子需求的数据

・能够容易地进一步生成JavaScript对象的可扩展的窗口小组件结构(但是还需要做一些工作)

背景:

・开源许可(Apache2.0)。由Zervaas Enterprises(http://ajax.zervaas.com.au/)支持

7.2 JPSpan

网址是:http://jpspan.sourceforge.net/wiki/doku.php,直接把Javascript调用传递到PHP函数。

・进行了严肃的单元测试。

・开源许可(PHP)。

7.3 XAJAX

网址是:http://xajax.sf.net,直接把Javascript调用传递到PHP函数。

・使用Javascript代理来调用PHP脚本。

・开源。由J.Max Wilson所创。

8 服务器端:Ruby

Ruby On Rails(http://www.rubyonrails.org/)是一个通常的强力支持Ajax的web框架:

・当Ajax出现的时候Rails还处于其发展的早期,因此Ajax可能逐渐成为Rails框架的核心。

・生成浏览器中大多数/全部的窗口小组件和动画的Javascript脚本。

・支持服务器端调用。

・调度支持。

・开源许可。