首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

用 Ajax 和 Apache Geronimo 创建异步消息框架-1

用 Ajax 和 Apache Geronimo 创建异步消息框架-1

框架组件概览经过良好设计的面向服务的业务层可以帮助您将松散耦合的服务组成过程和复合应用程序。面向服务的架构(Service-Oriented Architecture,SOA)中的这种服务组合使您能够用不同环境中的服务构建应用程序和过程,而无需了解每种环境的细节。使用 SOA 可获得的益处依赖于使用一般、粗略的接口设计和实现的服务。
在开发基于浏览器的 UI 时,Ajax 编程将为您提供强大的功能和很大的灵活性。将此 UI 功能与面向服务的业务层结合使用还将为您提供更大的灵活度。Ajax 编程本身十分适于进行异步请求和响应。在将 Ajax 的异步本性与基于异步的消息传递系统结合使用时,您可以构建基于浏览器的应用程序,这样做将使用户体验更近似于桌面应用程序,给用户一种更加实时的感受。
Apache Geronimo 是一个模块化的符合 Java™ 2 Platform, Enterprise Edition (J2EE) 规范的应用服务器平台,它基于使用控制反转(Inversion of Control,IoC)的架构解耦组件和服务以构建企业级应用程序和服务。
在本文中,您将了解如何使用基于消息的框架或总线处理来自客户机的异步业务请求,以便在多个基于 Ajax 的客户机与基于 Geronimo 的服务器之间进行交互。了解如何在浏览器与服务器之间跟踪基于 Ajax 的客户机请求。并了解如何通过目标业务服务的面向消息的服务总线在服务器端跟踪这些请求。
Ajax 简介查看 ,这是您的一站式 Ajax 编程模型信息中心,包括文章、教程、论坛、blog、wiki、事件和新闻。所发生的任何事情都会在这里介绍。

Ajax 是一个受基于 XML 的请求和响应服务器调用模型驱动的 UI 功能和概念的框架。这些概念本性上大都具有不定性,但是都根据约定经过标准化。这些概念在 Ajax 应用程序开发中大多以标准的形式出现,已成为主流 Web 浏览器的功能。            
Ajax UI 依赖于浏览器中的文档对象模型(Document Object Model,DOM)功能和 JavaScript 组件,这些功能和组件用于在任何指定时间解析和显示 Web 页面。很多(但不是所有)这类功能和组件都是由大多数主流 Web 浏览器共享的。这么多的内容掌握起来可能有些困难,因此本文仅讨论 DOM 和面向 Ajax 的 JavaScript 代码的最基础功能。
几乎所有称得上是基于 Ajax 的应用程序都会创建称为 XMLHttpRequest 对象的组件。此 JavaScript 对象用于构造请求和在浏览器与服务器之间来回传输请求。清单 1 中的代码片段将创建可以在 Mozilla Firefox 浏览器或 Microsoft® Windows® Internet Explorer® 浏览器与服务器之间使用的 XMLHttpRequest 对象的实例。
清单 1. 创建 XMLHttpRequest 对象
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
function getHTTPObject()
{
   var xmlhttp = null;
   var success = false;
   
   // List of MS XMLHTTP versions - newest first
   var MSXML_XMLHTTP_PROGIDS = new Array(
       'MSXML2.XMLHTTP.5.0',
       'MSXML2.XMLHTTP.4.0',
       'MSXML2.XMLHTTP.3.0',
       'MSXML2.XMLHTTP',
       'Microsoft.XMLHTTP'
   );

   for (var i = 0; i < MSXML_XMLHTTP_PROGIDS.length && !success; i++)
   {
      try
      {
         xmlhttp = new ActiveXObject(MSXML_XMLHTTP_PROGIDS);
         success = true;
         return xmlhttp;
      }
      catch (e)
      {
         xmlhttp = false;
      }
   }

   if (!xmlhttp && typeof XMLHttpRequest != 'undefined')
   {
      try
      {
         xmlhttp = new XMLHttpRequest();
      }
      catch (e)
      {
         xmlhttp = false;
      }
   }

   return xmlhttp;
}




创建 XMLHttpRequest 对象的实例后,您可以使用该实例向 HTTP 服务器组件(例如 Java servlet)发送 HTTP 请求和从 HTTP 服务器组件接收 HTTP 请求。清单 2 中的代码片段将使用 XMLHttpRequest 对象向 HTTP 服务器组件发送 HTTP GET 请求。
清单 2. 使用 XMLHttpRequest 对象发送 HTTP GET 请求
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function callService(url)
{
  if (!isWorking)
  {
    httpObj.open("GET", url, true);
    try
    {
       httpObj.setRequestHeader("Content-type", "text/plain");
    }
    catch(e)
    {
       // setRequestHeader is missing in versions of Opera
    }
    isWorking = true;
    httpObj.onreadystatechange = handleServiceResponse;
    httpObj.send(null);
    return true;
  }
}




HTTP 响应都是由被指定为 XMLHttpRequest 对象的 onreadystatechange 字段值的 JavaScript 回调函数异步处理的。该值在清单 2 中被指定为 handleServiceResponse。清单 3 中的代码片段显示了 onreadystatechange 回调函数的典型实例化示例。
清单 3. 在回调函数中处理 XMLHttpRequest 实例的响应
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function handleServiceResponse()
{
  if (httpObj.readyState == 4) // a value of 4 represents a request-completed state
  {
    isWorking = false;
    if (httpObj.status == 200)
    {
       var contentType = httpObj.getResponseHeader("Content-type");
      var xmlDoc = httpObj.responseXML.documentElement;
      var textResponse = httpObj.responseText;
      // do something with either xmlDoc or textResponse or with both
    }
  }
}




现在,HTTP 请求可以通过基于 Ajax 的浏览器页面来发送和接收,您必须构造一个服务器组件来处理请求和传送响应。本例将使用部署到 Apache Geronimo 应用服务器上的 Java servlet。
返回列表