结合使用 Ajax 和 WebSphere Portal (上)

您肯定听说了 Ajax 的一些用法,您可能想知道是否可以在自己的门户应用程序中使用它。当然可以,本文将向您介绍一些入门知识。门户中开销最大的操作之一是刷新页面。您可以使用 Ajax 处理许多用户交互事件,然后将更新应用于页面的各个部分,而无需刷新整个页面。您可以改进门户性能,创建更清晰的总体门户应用程序体系结构,而最重要的是,您的用户会非常高兴具有此类响应的门户。引言
本文向您介绍将 Ajax 集成到门户应用程序的方法。因为已经有了几篇对 Ajax 进行一般性介绍的文章(请参见参考资料),所以我们假设您了解 Ajax 的基础知识;也就是说,您已经知道了什么是 Ajax、它的名称的由来、它并不是一项新的技术这一事实,以及 Google 如何将此技术带入全球每个经理和技术专家的思维模式。我们的目的是向您提供有用的信息,这些信息与在门户应用程序中使用 Ajax 相关,所以当 CTO 的办公室里的人员询问您的门户应用程序是否启用了 Ajax 时,您可以理直气壮地说:“当然!”。
所以,如果您已决定将 Ajax 引入门户,则本文所讨论的内容非常值得您关注。尽管本文侧重介绍的是门户应用程序,但是这些技巧通常适用于大多数复杂应用程序。本文还为您准备了后续教程,在此教程中,我们将详细介绍 Ajax Portlet 应用程序的创建。
在我们回到即将开始讨论的主题之前,先简要说明以下内容:您看到或读到的有关 Ajax 的内容所介绍的大部分不是真正的 Ajax;而是 Dynamic HTML 或 DHTML。正确意义的 Ajax 由称为 XMLHttpRequest 的单个 JavaScript 对象组成。该类为服务器和产生的响应提供后台通信通道。承担所有其他任务(包括拖放、DOM 更新、创建样式和各人喜欢做的所有其他事情)的是 DHTML。

为什么 Ajax 和 WebSphere Portal 可以很好地配合?
门户环境中开销最大的操作之一是刷新页面。当用户在页面上单击链接或进行一些其他操作时,门户会处理页面上目标 Portlet 的 actionPerformed() 方法和每个 Portlet 的 doView() 方法。然后,聚合结果,并将整个 HTML 文档向下发送到浏览器。
尽管缓存可以减少大量的开销,但是仍有许多其他问题。您可以使用 Ajax 在后台处理许多用户交互事件,然后更新页面的各个部分,而无需完整的门户刷新周期。此技术通过增加对单个操作的响应大大改进了最终用户体验,同时也显著提高了应用程序的总体性能。在某些环境中,使用 Ajax 可以使应用程序的总体体系结构更清晰。使用二级 Ajax 控制器(如 Servlet 或 Web 服务)可以进行更强大的模型代码分离。
将整个 Ajax 控制器设计应用于应用程序时,您应该使用 Ajax 控制器处理所有基本用户输入操作和分段显示更新。而仅将门户 actionPerformed() 方法用于页面级转换或处理主要状态更改。


为什么 Ajax 和 WebSphere Portal 不能很好地配合?
那么,为什么您不希望在您的富 Internet 应用程序中使用这一新颖的范例呢?所有的技术周刊都认为这是一个好方法,此外,您的上司也通知您使用它,因为它是“业务目标之一”。当然,我们不会叫您不要使用它,但是,我的确想让您知道一些潜在缺陷:
使用多个控制器(例如 Portlet、Servlet 和 Web 服务)会增加应用程序的复杂性。使用 Ajax 强制客户端处理许多逻辑。JavaScript 很难调试,特别是在跨浏览器环境中更是如此。可访问性问题和移动设备会产生冗余代码。因为许多屏幕阅读器和其他辅助设备不支持 JavaScript/Ajax,所以您需要提供备选功能。您的应用程序可能不需要在页面切换之间进行额外的数据更新。综上所述,您可能确定 Ajax 不适合您,需要改读其他文章。稍等,这只是一个玩笑。朋友,请继续阅读!Ajax 太酷了,如果您不将其添加到自己的应用程序中,您肯定会感到遗憾。
至少您应该慢慢接受它。找到一个可以使用小技巧的应用程序,并将 Ajax 的妙处添加到用户表单或向导中。一旦您入门并了解到做一点努力就可以获得一些有效的用户增强功能,您肯定会准备将一些奇妙的方法实际添加到自己的门户应用程序中。

设计注意事项
将 Ajax 添加到门户应用程序后,您就可以有效地将多个控制器添加到经典 MVC 模式。此决定对强制执行模型逻辑的清晰分离有潜在的好处。不足之处是增加了复杂性,并且不可避免地将控制器分成以下三个部分:
PortletServlet 或 Web 服务基于 JavaScript 的客户端在门户应用程序中使用 Ajax 的基本前提是需要一个独立控制器。通常情况下,您可以使用 Servlet 执行与 Ajax 客户端的通信。您可以将 Servlet 与 Portlet WAR 文件捆绑在一起,或将其作为独立 Web 应用程序的一部分包括在内。
图 1 显示了潜在的 Ajax 服务器目标。
如果您将 Servlet 与 Portlet WAR 文件捆绑在一起,那么可以在 Servlet 和 Portlet 之间共享会话数据。Servlet、Portlet 和模型代码是紧密耦合的。如果您不需要该级别的耦合,并且 Ajax 处理的数据和逻辑不依赖于 Portlet,那么您可以为远程重用创建独立的 Servlet 或 Web 服务。
图 1. Ajax 服务器目标的可能性





Ajax 工具包
实现 Ajax 的缺陷之一是难以编写良好的跨浏览器的 JavaScript。有许多 JavaScript 和 DHTML 工具包可以提供 Ajax 抽象。事实上,由于要测试的内容太多,所以无法确定哪一个工具包最适合您。对于所有开放源代码项目,在接下来的两年里可能将推出新的工具包。
我们使用的最有前途、设计合理的一些工具包是:Dojo、Rico 和 DWR(请参见参考资料)。DoJo 是首选工具包,因为它具有类似于方面的高级体系结构。DWR 或 Direct Web Rendering 提供了从客户端 Javascript 引用基于主机的 JavaBeans 的方便机制。由于提供了许多其他好的工具包,所以您需要确定哪些适合您。

将 Ajax 添加到 Portlet 应用程序
要在门户应用程序中实现 Ajax,您需要按照以下几个简单步骤进行操作。下面的讨论假设您将 Ajax Servlet 与 Portlet WAR 文件捆绑在一起。
创建和定义 Ajax Servlet。定义指向 Servlet 的 JavaScript 引用变量。加载任何外部 JavaScript 文件。实现 Ajax 框架。创建和定义 Ajax Servlet
将 Servlet 与 Portlet WAR 文件捆绑在一起的过程非常简单;不过,即使经验丰富的 Portlet 开发人员也并非总是能够确保所有的细节都正确无误。所以,下面是全部易忽略的细节。
在 web.xml 文件中定义 Servlet,如清单 1 所示包括 Servlet JAR 文件或类。
清单 1. web.xml 中的 Servlet 映射
            MyAjaxServlet            MyAjaxServlet                                    com.ibm.ajax.MyAjaxServlet                                                MyAjaxServlet            /Ajax                        

定义指向 Servlet 的 JavaScript 引用
您需要在 JSP 文件中定义全局引用(参见清单 2),以便可以对 Portlet 请求库进行访问。定义全局变量后,包括的任何 JavaScript 都可以安全地使用它,以指向 Servlet。

清单 2. 指向 Servlet 的全局引用。
                        
参与8

7同行回答

kaluoer521kaluoer521程序员河南拓普网络
支持一下 学习一下显示全部
支持一下 学习一下收起
2009-03-10
浏览816
z117wzhmz117wzhm软件开发工程师中软国际
好东西,学习一下,应该加一个完整的实例就好了显示全部
好东西,学习一下,应该加一个完整的实例就好了收起
互联网服务 · 2014-06-18
浏览758
天下天下软件开发工程师重庆
学习学习显示全部
学习学习收起
互联网服务 · 2014-03-12
浏览760
huthurthuthurt软件开发工程师克沃斯
学习学习学习学习学习显示全部
学习学习学习学习学习收起
软件开发 · 2014-03-11
浏览738
学习学习学习学习学习显示全部
学习学习学习学习学习收起
2009-10-13
浏览779
叶渔夫叶渔夫民工**
接下来的怎么没有了?显示全部
接下来的怎么没有了?收起
2009-07-10
浏览741
fronkxfronkx工程师lenovo
学习学习学习学习学习显示全部
学习学习学习学习学习收起
2009-07-08
浏览742

提问者

zhiy66
系统工程师北京微电子技术研究所
擅长领域: 中间件portaljava

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2008-12-18
  • 关注会员:0 人
  • 问题浏览:6033
  • 最近回答:2014-06-18
  • X社区推广