Chris Jolley和Bob Bergman今天主持了一场有关WebLogic Portal
10.0的Ajax功能的网上技术交流会。我们拥有大量的受众——我们很高兴地看到人们对该项功能具有很大的兴趣。网上技术交流将在一周内重播,演示文稿已经发布。这篇博客文章解释了这次网上技术交流会上提出的部分问题。
WebLogic Portal 10.0 Ajax 概述
WebLogic Portal桌面实际上就是门户的一个实例。桌面具有以下一些特性:
- Shell——定义门户的整体布局,通常具有页眉和页脚。
- Look and Feel(LaF)——是一组应用于门户的CSS/JS文件,可以在运行时动态更改。
- Book——一组有标签的页面,每个桌面都具有一个顶级book和许多嵌套book。
- 页面——portlet和嵌套book的容器。
- Portlet——使用一系列包括JSP、JSR 168、JSF、JPF、WSRP在内的技术构建的应用程序窗口。
在WebLogic Portal 9.2中,可以声明性地指定portlet(只需启用Workshop中的一个复选框),使之通过XmlHttpRequest(Ajax)呈现。这就是说当用户与portlet进行交互时,只有portlet需要刷新。WLP处理所有连接重写来实现这一过程。
在WebLogic Portal 10.0中,整个桌面都可以启用Ajax。方法就是使用首个桌面请求恢复以往的桌面。然而,每当用户与portlet进行交互或存在更改页面的事件时,只有需要进行更新的那部分桌面被刷新。这可以通过使用XmlHttpRequest实现。
要了解更详细的信息,建议您:
- 下载演示文稿,现已发布,可从 wlp.bea.com 获取
- 观看网上技术交流会重播,一周后可以在 dev2dev
Live! 获取
WebLogic Portal 10.0 Ajax答疑
Chris主持网上技术交流会时,我们收到了大量来自与会者的问题。我们有三位来自WLP工程团队的同事处理了这些问题。他们有些措手不及!我们发现了一组被频繁提出的问题,于是我想通过博客来讨论这些问题并提供答案。
XmlHttpRequest、XHR、SON、Dojo等术语的含义是什么?
这些都是目前用于实现Ajax应用程序的标准技术。XmlHttpRequest(XHR)是一种通过Javascript发送HTTP请求的带外机制。JSON是一种可选择的XML数据串行化格式。Dojo是种流行的Ajax框架。Web上有很多详细介绍这些技术的资源。
WebLogic Portal 10.0如何与其他Ajax框架协同工作(比如Dojo、DWR、GWT等)?
我们没有正式地验证过WLP与这些框架的协作情况,但是通过非正式的使用,我们发现像Dojo这样的客户端框架使用正常。WebLogic
Portal 9.2的演示可以在 wlp.bea.com 看到,这里就使用了Dojo来实现拖放功能。
什么是N+1问题?
WebLogic Portal 10.0 Ajax特性避免了N+1问题——但这是什么问题呢?这里涉及的是可伸缩性和从浏览器向服务器发出的请求数量。‘N’是指一个页面中的portlet数量。当用户第一次请求桌面URL(或者刷新页面)时,您绝不希望浏览器向每个portlet发出请求。如果在页面中存在10个portlet,将会导致发送11个请求——1代表页面,10代表portlet(N+1)。
WLP 10.0在第一次收到桌面请求时(因此只有一个请求,而非N+1)即返回所呈现的整个桌面页面,从而解决了N+1问题。因此,当用户与页面上的portlet交互时,这些portlet能够独立更新,而无需刷新整个页面(再说明一下,每点击一次即发出一次请求)。
什么是IPC?
IPC代表portlet间通信(inter-portlet communication)。它在主从复合结构用例中十分常见——当用户点击portlet中的一个链接时,从视图就会出现在另一个portlet中。WebLogic
Portal具有面向服务器端IPC的富事件模型,可以得到Ajax特性的全面支持。当启用Ajax桌面时,用户在portlet中进行点击就会发出单独一条XmlHttp请求。在服务器端,portlet完成着整个生命周期,并且发布IPC事件。如果另一个portlet希望参与,也可以重新呈现。两个更新过的portlet通过一次响应即可返回。一个请求,一次响应就可以更新多个portlet。
应该在什么时候使用WebLogic 10.0桌面Ajax而不是9.2风格的portlet
Ajax
这取决于您的需求。9.2版本的解决方案较为细粒度——在每个portlet上启用。它允许您仅为需要Ajax的portlet启用Ajax。然而,9.2版本方法的缺点在于它需要向每个Ajax
portlet发出请求。因此,如果页面中的所有portlet都单独启用Ajax,就会出现N+1问题。这种情况下,推荐使用10.0版本的桌面Ajax解决方案。
WLP的所有特性(例如WSRP、授权、线程、高速缓存、IPC)都可以与WLP
10.0桌面Ajax协同工作吗?
可以,只是有几个不太重要的例外情况。这次网上技术交流会提供的演示文稿涵盖了其中的一部分例外,但总体来说Ajax特性包括了几乎所有的WLP特性。
使用Ajax特性时要注意哪些安全性问题?
出于多种考虑,很难简洁地回答这个问题。以下是一个简要列表:
- XmlHttpRequest:如果指向与上层页面不同的域,浏览器将拒绝载入XmlHttpRequest。WLP特性也必须遵从这项规则。
- HTTPS:Ajax特性使用父页面协议,因此支持HTTPS。
- 授权:WLP使用一种基于角色的系统,即授权系统,来提供portlet权限。像非Ajax
portlet一样,Ajax特性尊重授权。
- 身份/cookie:XmlHttpRequest传送cookie,因此用户身份通过Ajax特性得以维护。
Iframes的情况如何?
WebLogic Portal支持iframe portlet,它们仍然是有效方法。它们可以使用来自任何域的内容(与XHR不同),与XHR相同的是,它们都能够返回原始页面请求的带外内容。然而,iframe有着很多的局限性,其中包括无法加入IPC。
Back按钮如何与Ajax特性协同工作?
XmlHttpRequest无法与浏览器上的Back按钮挂接。因此,Back按钮将把用户引向最后一次的整页刷新,并且不会通过Ajax特性展开portlet/页面刷新。
什么是Adrenaline?它如何与Ajax特性协同工作?
Adrenaline是一种允许在WLP门户框架以外使用WLP portlet的技术。使用方页面(例如
遗留Web应用程序、您的Vista桌面 或 Mac OS X桌面)可以呈现不包含页面的portlet。当通过Web页面呈现时,有两个重要选项可用来呈现
另外一篇文章中 提到的Adrenaline portlet:
- Iframe:使用方页面使用一个iframe将portlet导向页面。
- WLP 9.2风格的Ajax:使用方页面也可以包含一个实际上使用WLP 9.2 portlet的Ajax功能的Ajax代码片段。
原文出处:http://dev2dev.bea.com/blog/plaird/archive/2007/02/weblogic_portal_2.html