Jetspeed2中Ajax的支持

一、概述

Jetspeed2中实现了对Ajax的支持。客户端可以通过基于HTTP请求的API接口异步向服务端发送请求,得到xml格式的数据响应。

二、Ajax简介

AJAX全称为“Asynchronous JavaScript and XML”(异步JavaScriptXML),是指一种创建交互式网页应用的网页开发技术。

Ajax 应用程序所用到的基本技术:

1HTML 用于建立 Web 表单并确定应用程序其他部分使用的字段。

2JavaScript 代码是运行 Ajax 应用程序的核心代码,帮助改进与服务器应用程序的通信。

3DHTML Dynamic HTML,用于动态更新表单。我们将使用 divspan 和其他动态 HTML 元素来标记 HTML

4)文档对象模型 DOM 用于(通过 JavaScript 代码)处理 HTML 结构和(某些情况下)服务器返回的 XML

AJAX不是指一种单一的技术,而是有机地利用了一系列相关的技术。

Ajax应用程序的优势在于:

1. 通过异步模式,提升了用户体验

2. 优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了带宽占用

3. Ajax引擎在客户端运行,承担了一部分本来由服务器承担的工作,从而减少了大用户量下的服务器负载。

Ajax的工作原理相当于在用户和服务器之间加了—个中间层,使用户操作与服务器响应异步化。这样把以前的一些服务器负担的工作转嫁到客户端,利于客户端闲置的处理能力来处理,减轻服务器和带宽的负担,从而达到节约ISP的空间及带宽租用成本的目的。Ajax的核心是JavaScript对象XmlHttpRequest。该对象在Internet Explorer 5中首次引入,它是一种支持异步请求的技术。简而言之,XmlHttpRequest使您可以使用JavaScript向服务器提出请求并处理响应,而不阻塞用户。

更多详细情况请参看相关文档说明。

三、功能

使用ajax接口可以实现以下功能:

<!--[if !supportLists]-->1、 <!--[endif]-->个性化页面布局:在一个页面里移动,复制,添加或移去一个portlet

<!--[if !supportLists]-->2、 <!--[endif]-->布局样式选择:在一个页面里改变布局样式,比如行数,列数。

<!--[if !supportLists]-->3、 <!--[endif]-->主题和装饰器选择:在一个页面里改变主题和portlet装饰器。

<!--[if !supportLists]-->4、 <!--[endif]-->Portlet选择:为用户提供一个portlet的选择列表。

<!--[if !supportLists]-->5、 <!--[endif]-->安全配置:对一个资源配置安全约束或安全方针。

<!--[if !supportLists]-->6、 <!--[endif]-->菜单配置:为portal站点创建或修改菜单。

<!--[if !supportLists]-->7、 <!--[endif]-->普通的管理:目前只有获取用户信息和用户列表,其他的管理功能还没有。

四、实现

AJAX的实现可以分为客户端和服务端两方面:

在服务端,所有的AJAX API请求都是一个标准的Jetspeed Pipeline请求,您可以根据需要自己定义处理流程。在预定义的AjaxPipeline里需要经过7Valve(阀门)。capabilityValveportalURLValvesecurityValvelocalizationValveprofilerValvecontainerValvelayoutValve。在layoutValve中定义了一个Spring component处理所有的AJAX请求——AjaxRequestService,根据不同的参数处理相应的请求。每一个AJAX处理都有一个自己的安全约束,在一个页面里的所有请求将使用整个页面配置的安全约束。根据不同的处理动作,需要判断是处于view模式下还是edit模式下。比如,获取信息的操作只要需要在view状态下;而添加,移动,删除等操作需要在edit状态下。

在客户端,AJAX客户端都是在javascript中调用。遗憾的是jetspeed2 中的javascript都被混淆了,不过可以查看别的资料去了解实现方式。比较核心的就是这么几个方法:

1、创建新的 XMLHttpRequest 对象

<script language="javascript" type="text/javascript">

var request = new XMLHttpRequest();

</script>

2、增加对 Microsoft 浏览器的支持

<script language="javascript" type="text/javascript">

var request = false;

try {

request = new XMLHttpRequest();

} catch (trymicrosoft) {

try {

request = new ActiveXObject("Msxml2.XMLHTTP");

} catch (othermicrosoft) {

try {

request = new ActiveXObject("Microsoft.XMLHTTP");

} catch (failed) {

request = false;

}

}

}

if (!request)

alert("Error initializing XMLHttpRequest!");

</script>

3、打开请求

request.open("GET", url, true);

4、设置回调方法

request.onreadystatechange = updatePage;

5、发送请求

request.send(null);

6、处理服务器响应

function updatePage() {

if (request.readyState == 4)

if (request.status == 200)

alert("Server is done!");

else if (request.status == 404)

alert("Request URL does not exist");

else

alert("Error: status code is " + request.status);

}

五、接口定义

Jetspeed2AJAX访问都是通过“ajaxapi”路径,后面跟随要操作的页面。如果没有指定就去访问当前用户的缺省页面。

对不同的请求有不同的请求参数,但其中有一个“action”参数是必须的,缺省的actiongetpage

例如:

http://localhost:8080/jetspeed/ajaxapi/Public/content.psml

具体的接口定义请参看Jetspeed2的官方网站,那里介绍的很详细,这里就不一一列举了。

六、参考资料

Jetspeed2官方网站

http://portals.apache.org/jetspeed-2/guides/guide-ajax-api.html

掌握AJAX系列 作者:Brett McLaughlin

http://www.ibm.com/developerworks/cn/web/wa-ajaxintro/

你可能感兴趣的:(Jetspeed)