Centos系统下载大全 | Redhat系统下载大全 | Windows2012系统下载大全 | Windows2008系统下载大全| CMS教程 | 网站地图 51运维网-专注Linux/Unix系统安全运维!
当前位置:51运维网 > 认证 > Java认证 > 正文

结合运用 Ajax 和 WebSphere Portal

时间:2015-06-11 22:35 来源:网络整理 作者:51ou.com 阅读:


  引言
  本文向您介绍将 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 和 WSRF::Lite
  将整个 Ajax 控制器设计运用 于运用 程序时,您应该运用 Ajax 控制器处理所有基本用户输入操作和分段显示更新。而仅将门户 actionPerformed() 要领 用于页面级转换或处理主要状态修改 。
为什么 Ajax 和 WebSphere Portal 不能很好地配合?
  那么,为什么您不希望在您的富 Internet 运用 程序中运用 这一新颖的范例呢?所有的技能 周刊都认为这是一个好要领 ,此外,您的上司也通知您运用 它,因为它是“业务目标之一”。当然,我们不会叫您不要运用 它,但是,我的确想让您知道一些潜在缺陷:
  运用 多个控制器(例如 Portlet、Servlet 和 Web 服务)会添加 运用 程序的复杂性。
  运用 Ajax 强制客户端处理许多逻辑。
  JavaScript 很难调试,特别是在跨阅读 器环境中更是如此。
  可访问性疑问 和移动设备会产生冗余代码。因为许多屏幕阅读器和其他辅助设备不支持 JavaScript/Ajax,所以您须要 提供备选功能。
  您的运用 程序可能不须要 在页面切换之间执行 额外的数据更新。
  综上所述,您可能确定 Ajax 不适合您,须要 改读其他文章。稍等,这只是一个玩笑。朋友,请继续阅读!Ajax 太酷了,如果您不将其添加到自己的运用 程序中,您肯定会感到遗憾。
  至少您应该慢慢接受它。找到一个可以运用 小技巧的运用 程序,并将 Ajax 的妙处添加到用户表单或向导中。一旦您入门并了解到做一点努力就可以获得一些有效的用户增强功能,您肯定会准备将一些奇妙的要领 实际添加到自己的门户运用 程序中。
  设计留心 事项
  将 Ajax 添加到门户运用 程序后,您就可以有效地将多个控制器添加到经典 MVC 模式。此决定对强制执行模型逻辑的清晰分离有潜在的优点 。不足之处是添加 了复杂性,并且不可防止 地将控制器分成以下三个部分:
编缉推选 阅读以下文章
结合运用 Ajax 和 WSRF::Lite
  Portlet
  Servlet 或 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 和 WebSphere Portal[多图]图片1


  Ajax 工具包
  实现 Ajax 的缺陷之一是难以编写良好的跨阅读 器的 JavaScript。有许多 JavaScript 和 DHTML 工具包可以提供 Ajax 抽象。事实上,由于要测试的内容太多,所以不能 确定哪一个工具包最适合您。对于所有开放源代码项目,在接下来的两年里可能将推出新的工具包。
  我们运用 的最有前途、设计合理的一些工具包是:Dojo、Rico 和 DWR。 DoJo 是首选工具包,因为它具有类似于方面的高级体系结构。DWR 或 Direct Web Rendering 提供了从客户端 Javascript 引用基于主机的 JavaBeans 的方便机制。由于提供了许多其他好的工具包,所以您须要 确定哪些适合您。
  将 Ajax 添加到 Portlet 运用 程序
  要在门户运用 程序中实现 Ajax,您须要 按照以下多个 基本 步骤执行 操作。下面的讨论假设您将 Ajax Servlet 与 Portlet WAR 文件捆绑在一起。
编缉推选 阅读以下文章
结合运用 Ajax 和 WSRF::Lite
  建立 和定义 Ajax Servlet。
  定义指向 Servlet 的 JavaScript 引用变量。
  加载任何外部 JavaScript 文件。
  实现 Ajax 框架。
  建立 和定义 Ajax Servlet
  将 Servlet 与 Portlet WAR 文件捆绑在一起的流程 非常基本 ;不过,即使体会 丰富的 Portlet 开发人员也并非总是能够确保所有的细节都正确无误。所以,下面是全部易忽略的细节。
  在 web.xml 文件中定义 Servlet,如清单 1 所示
  包括 Servlet JAR 文件或类。

清单 1. web.xml 中的 Servlet 映射
<servlet> 
 <servlet-name>MyAjaxServlet</servlet-name> 
 <display-name>MyAjaxServlet</display-name> 
 <description></description> 
 <servlet-class> 
  com.ibm.ajax.MyAjaxServlet 
 </servlet-class> 
</servlet> 
<servlet-mapping> 
 <servlet-name>MyAjaxServlet</servlet-name> 
 <url-pattern>/Ajax</url-pattern> 
</servlet-mapping> 
定义指向 Servlet 的 JavaScript 引用
  您须要 在 JSP 文件中定义全局引用(参见清单 2),以便可以对 Portlet 请求库执行 访问。定义全局变量后,包括的任何 JavaScript 都可以安全地运用 它,以指向 Servlet。

清单 2. 指向 Servlet 的全局引用。
<script type="text/javaScript"> 
 var PATH = "<%= request.getContextPath() %>"; 
 var Ajax_SERVLET = PATH + "/Ajax"; 
</script> 
编缉推选 阅读以下文章
结合运用 Ajax 和 WSRF::Lite
  加载任何外部 JavaScript 文件
  对于添加到 Portlet 页面的任何外部资源,您必须对 URL 执行 编码,并配置 基本上下文,如清单 3 所示。

清单 3. 对 URL 执行 编码并配置 基本上下文的脚本。
<script type="text/javascript" 
 src="<%=renderResponse.encodeURL( 
     renderRequest.getContextPath() + "/js/myajax.js?v1.1.2")%>" > 
</script> 
  提示: 通过在 JavaScript 参数上运用 字符串参数,可以使阅读 器在每次加载时强制执行缓存刷新。如果您的 JavaScript 可能频繁修改 ,则此刷新将使阅读 器不能运用 旧的缓存代码。此示例运用 的是版本 ID(?v1.1.2),但是也可以运用 任何字符串。
  实现 Ajax 框架
  使 Ajax 执行其奇妙要领 的流程 涉及到多个 样板文件操作。我们在此处向您简要介绍一下。以后您会看到有关 代码说明描述,并且可以按教程 说明执行 操作。
  建立 全局 XMLHttpRequest 对象变量。因为所有通信都是异步的,所以您必须为每个 Ajax 事件定义唯一的变量。
  定义触发该进程的事件。通常,您可以在输入标记中运用 JavaScript 事件。例如:<input onChange='eventHandlerFunction()' ... >
  定义一个函数以处理事件;特别是,要实现以下任务:
  实例化 XMLHttpRequest (xhr) 对象变量。此变量的细节是特定于阅读 器的,我们将在后续教程 中对此执行 介绍。
配置 xhr 回调函数。 xhr.onreadystatechange()
  配置 Servlet、类型和参数。 xhr.open(), xhr.setRequestHandler(), and xhr.send()
  定义回调函数,以处理通信状态和响应数据。
  此函数会处理各种通信状态修改 (如调用启动时、建立连接时和接收到响应时)。
编缉推选 阅读以下文章
结合运用 Ajax 和 WSRF::Lite
  响应处理通常涉及到分析 返回的 XML(或其他内容)和运用 此数据来更新 DOM 树。
  图 2 显示了如何 汇总各个部分。

图 2. Ajax 通信事件模型

结合运用
 Ajax 和 WebSphere Portal[多图]图片2


  门户特定的留心 事项
  在门户运用 程序中实现 Ajax 时,您应留心 多个 疑问 。
  全局 JavaScript 变量
  通常,在门户运用 程序中,防止 运用 JavaScript 中的全局变量,因为门户会将多个 Portlet 聚合到单个页面中。全局 JavaScript 变量的命名空间(如清单 4 所示)是一个好的做法,因为您可以保证变量名是唯一的,即使在同一页面上部署相同的 Portlet 两次。

清单 4. 命名空间 JavaScript 变量。
// Global XMLHttpRequest variable 
var <portlet:namespace />xhrFieldsRequest; 
  如果您运用 Ajax 工具包,则抽象层将处理 任何命名冲突。
  运用 ID 属性
  通常在 Ajax 中运用 ID 属性,以高速 更新页面的某个部分。因为任何 HTML 标记中的 ID 属性对于 DOM 都是全局的,所以您须要 确保它们是唯一的。如果您有重复的 ID 属性,那么结果是不可预知的,但是,通常这不是您希望的结果,并且疑问 非常难以确定。
  为了安全起见,请对所有 ID 属性配置 名称空间,即使此操作会使您的代码像在清单 5 中看到的一样难于阅读。

清单 5. 安全地对 ID 属性配置 命名空间。
<h1 id="<portlet:namespace />header">Hello</h1> 
<script type="text/javascript"> 
 var x = document.getElementByID 
  ("<portlet:namespace/>header"); 
 x.innerHtml = "GOODBYE!"; 
</script> 
编缉推选 阅读以下文章
结合运用 Ajax 和 WSRF::Lite
  状态维护
  在门户中运用 Ajax 调用时,您容易遇到的缺陷是缺乏内在的状态管理。没有什么可以让用户停止在 Portlet 中执行可能导致页面刷新的操作。您须要 确保能够重启任何 Ajax 活动,而不依赖于以前的任何状态。尽管能够对 Servlet 运用 Cookies 或 Ajax 调用来检查和存储状态消息,但是要防止 依赖于页面的状态。使所有的 Ajax 调用变成原子的。
  容易让您失败的另一个状态疑问 是后退按钮和书签标记的 URL。通常,防止 基于 Ajax 的主要状态修改 。将它保留到真实 的门户 actionPerformed() 调用。
  共享会话数据
  当您将 Servlet 与门户运用 程序捆绑在一起时,您可以在 Servlet 和 Portlet 之间共享会话数据。通常,在共享会话数据时,您希望运用 运用 程序范围。对于 Servlet,这是正常的会话范围。从 Servlet 访问 Portlet 范围变量须要 一个已配置 命名空间的特殊名称值,该值基于最初将其部署到门户时配置 的 Portlet 的 ID。在部署流程 中提取此值非常困难。尽管大多数理论认为,Portlet 范围变量的语法是:
  javax.portlet.p.<ID>?<NAME>
  其中:
  <ID> 是 Portlet 的唯一标识
  <NAME> 用于在 Portlet 会话中配置 对象的名称。
  Action URL
  在运用 Ajax 时,处理 Action URL 会非常麻烦。通常您不应在共享的会话中尝试存储 Action URL,因为它们仅对当前的 doView() 有效。尝试运用 在会话(来自先前的 doView() 周期)中存储的 ActionURL 将导致不可预期的结果。
  您须要 将 Action URL 存储到会话的例子是 Ajax 驱动的分页数据表,它包含 Action URL 链接作为数据集的一部分。当用户单击 Next,阅读 器会生成一个对 Servlet 的 Ajax 调用。然后,Servlet 从会话中提取下一页数据,并且它必须具有预定义的 Action URL。只需确保 doView() 调用在任何时间都能够处理,存放任何 Action URL 的任何会话数据都能够重新生成。
  活动通知
  由于聚合的许多信息都被填充到单个页面,所以门户页面通常非常繁忙。因为 Ajax 调用是在后台执行的,并且它们不能触发阅读 器上的活动图标,所以您须要 提供一致的可视机制来通知用户继续完成某事。否则,他们会感到困惑,不知道运用 程序正忙着处理什么操作。(我们的确不希望用户困惑。)
您可以在活动流程 中运用 浮点 DIV 部分显示或运用 阅读 器状态栏上的基本 消息实现此通知(不过,有些人认为这不是好的形式)。您也可以集成自定义主题扩展,它会在页面上显示任何启用 Ajax 的 Portlet 的一般 Please Wait 消息。
  结束语
  在本文中,我们描述了在门户运用 程序中运用 Ajax 的方式和原由 。在未来的有关 教程 中,我们将向您展示如何 将各部分组合在一起,以获得支持 Ajax 的数据库管理工具。请继续关注。
编缉推选 阅读以下文章
结合运用 Ajax 和 WSRF::Lite

  

1 2

标签: 程序开发 Java

感谢您对【51运维网 http://www.51ou.com/】的支持,我们为您免费提供《结合运用 Ajax 和 WebSphere Portal》技术文章,《结合运用 Ajax 和 WebSphere Portal》详细使用和说明,有时《结合运用 Ajax 和 WebSphere Portal》可能不完善、敬请谅解!如果《结合运用 Ajax 和 WebSphere Portal》有错误请给我们留言,我们将尽快修复文章错误,如果您觉得本站不错,请分享给周围的朋友!谢谢!

顶一下
(0)
0%
踩一下
(0)
0%
推荐内容
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
验证码:点击我更换图片