Jetspeed2中实现了对Ajax的支持。客户端可以通过基于HTTP请求的API接口异步向服务端发送请求,得到xml格式的数据响应。
AJAX全称为“Asynchronous JavaScript and XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。
Ajax 应用程序所用到的基本技术:
1)HTML 用于建立 Web 表单并确定应用程序其他部分使用的字段。
2)JavaScript 代码是运行 Ajax 应用程序的核心代码,帮助改进与服务器应用程序的通信。
3)DHTML 或 Dynamic HTML,用于动态更新表单。我们将使用 div、span 和其他动态 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里需要经过7个Valve(阀门)。capabilityValve;portalURLValve;securityValve;localizationValve;profilerValve;containerValve;layoutValve。在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);
}
Jetspeed2中AJAX访问都是通过“ajaxapi”路径,后面跟随要操作的页面。如果没有指定就去访问当前用户的缺省页面。
对不同的请求有不同的请求参数,但其中有一个“action”参数是必须的,缺省的action是getpage。
例如:
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/