Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103113884
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: DB2/Informix

2008-04-03 21:15:00

 

简介

编者注:本文摘自 Dynamic Web Programming: Using Java, javascript, and Informix(Graham Harrison 著)一书。

Informix® Web DataBlade™ 支持捕获、管理和发送非常复杂且基于网站的动态多媒体。本文旨在清楚地说明所涉及的体系结构组件,以及它们的工作原理。由于我们正在讨论 Web DataBlade,所以本文特地包含一节,提供足够详细的信息,使您能直接使用 DataBlades 和 DataBlade 函数。本文在向您详细展示它是如何工作的同时,突出了重点概念。理解 Web DataBlade 的工作方式将有助于您在 Web 项目中作出一些重要的设计决策。

本文将涵盖以下内容:

Informix Web DataBlade 体系结构

图 1 显示了 Informix Web DataBlade 的组件。


Informix Web DataBlade 体系结构

正如您所见,有三个基本的平台 — Web 浏览器、Web 服务器和 Informix 数据库服务器。您可以将每个平台视为在逻辑上是独立的、执行特定任务的主机或计算机。表 1 描述了这些平台,以及它们是如何交互的。


体系结构软件组件

表 2 更详细地列出了每个平台的软件组件,如图 1 所示。


分布式组件体系结构

可以将这三个逻辑平台放在一个物理平台上。例如,NT4 Server 可以托管 Netscape 浏览器、Netscape Web 服务器和 Informix 数据库服务器。与此相对照,可以用 NT4 托管 Netscape Web 服务器和 webdriver,而用另一台计算机上的 UNIX 托管 Informix 数据库。表 3 详细列出了 Web DataBlade 组件的分布。


是否将这些互操作对象(譬如,webdriver)重新分配到另一台机器上的决策取决于几种因素,其中较重要的一些因素都是对安装条件的需求。例如:

  • 当前的体系结构是异构的,并且出于财务上或其它方面的考虑,仍需要保持这种异构方式。
  • 性能需求要求数据库服务器平台专门用于 Informix 数据库和客户机应用程序(譬如,4GL 报告和批处理作业),因此其它机器专门用于处理客户机 HTTP Web 服务器请求(例如,大容量的站点)。
  • 出于安全性因素,将 Web 服务器放置在防火墙之外,而数据库放在防火墙的后面。

图 2 展示了这些组件的缺省位置。Web 服务器 webdriver 和 Informix 数据库服务器(装有 Web DataBlade)位于内部网环境中同一台主机计算机(NT 或 UNIX)上。


图 3 展示了 Web DataBlade 的一个高级实现,它跨越了不同的服务器。注:这里用 Web 服务器软件托管 webdriver 中间件。只要符合表 4 中的相关性,webdriver 中间件可以跨网络与另一台机器上的 Informix 数据库服务器进行通信。


连接相关性


使用协议进行通信

体系结构中的每个组件必须能够接收消息以及向其它组件发送消息。协议是这样一组规则:它定义了计算机之间以及软件应用程序之间如何进行通信。协议帮助位于不同计算机上的不同应用程序通过共享的“语言”进行通信。HTTP 协议定义了 HTTP 客户机(浏览器)和 HTTP 协议处理程序(Web 服务器)之间的交互。协议处理程序解释协议指令,并用客户机和服务器之间传递的数据执行协议指令所定义的功能。

协议类型
针对不同的使用情况,有不同类型的协议。Web 浏览器不必关心 Web 服务器是位于 UNIX 上还是位于 NT4 Server 上,因为 Web 服务器理解 HTTP 协议。当在浏览器的地址栏输入 http://,这就开始与目标主机上的 HTTP 服务器进行协议对话,缺省情况下,端口为 80。如果输入 ftp://,浏览器将试图开始与目标主机上端口 21 的 FTP 服务器进行 FTP 协议对话。

协议层
由 HTTP 定义的协议指令不同于 FTP 所定义的协议指令。TCP/IP(传输控制协议/网际协议)是一个用于计算机之间通信的传输/寻址协议。TCP 定义的信息包携带 HTTP 或 FTP 协议指令,这个信息包是发送给具有某个 IP 地址(譬如,920.325.123.0)的计算机。HTTP 和 FTP 是应用层协议。TCP 是传输层协议,而 IP 是网际寻址协议。可以用以太网在物理层传输数据。Informix 客户机程序(譬如 webdriver)之所以称作客户机程序,是因为它们与数据库服务器相连。然而,与 Informix 数据库服务器的通信是通过客户机和服务器均理解的协议 — SQLI - 进行的。在这里,Informix 服务器是协议处理程序。对于应用程序开发人员来讲,这是透明的。

应用程序协议
可以定义自己的应用程序协议。简单地讲,就是定义一组命令和编写一个协议处理程序,以接受和解释这些命令。可以使用 Java 来实现协议处理程序,这个处理程序可以相当方便地与网络中的客户机进行通信。其中一个示例就是分布式批处理调度应用程序,每个计算机运行一个批处理作业,而这个作业与其它计算机上另外的批处理作业相关。实现协议,以便每台计算机上的控制程序能够理解其它计算机在做什么,这使您可以编写一些组件,作为客户机和服务器进行交互,因为这些组件都可以解释协议(它是独立于语言的)的语义。在这种情况中,每台计算机上的控制程序既是协议客户机(发送指令),也是协议处理程序(接收和处理指令)。

动态页面生成的工作原理

这一节将描述 Informix Web DataBlade 通过使用 HTML 模板(AppPage)、AppPage Scripting 标记、webdriver 和 Web DataBlade 来生成动态的 Web 页面的工作原理。图 4 展示了在浏览器客户机请求一个 URL 时,生成动态 Web 页面所涉及的步骤。


表 5 列出了上图中所涉及的组件。


按部就班的动态页面生成

当 URL 包含对 webdriver 的请求时,Web 浏览器将生成一个对 Web 服务器的请求,以调用 webdriver。这个请求可以是 CGI 或 API 请求。例如,要调用 UNIX 上作为 CGI 程序的 webdriver

要调用 NT 上作为 CGI 程序的 webdriver

要调用 UNIX 和 NT 上作为 Web 服务器 API 实现一部分的 webdriver

接下来,会发生:

  • 根据配置信息,webdriver 会写一条 SQL 语句来检索所请求的 AppPage,然后执行 webexplode() 函数展开它
  • webexplode() 从 Web 应用程序表(存储在 Informix 数据库中)获取选定的 AppPage,在该 AppPage 内执行 SQL 语句,展开 Web DataBlade 模块标记,并格式化结果
  • webexplode() 将产生的 HTML 返回给 webdriver。然后,webdriver 将 HTML 返回给 Web 服务器
  • Web 服务器将 HTML 返回给 Web 浏览器,由它来呈现 HTML。webdriver 使 Web 服务器可以与数据库通信,以抽取出存储在数据库中的 AppPage。有了 webdriver,无需编写 CGI 程序就可以使 Web 服务器与数据库进行交互。

在 Web DataBlade V4 之前,webdriver 有三个基本的实现:Netscape Server API(NSAPI)、Microsoft ISAPI 和 CGI。在 V4 中,提供了一个 Apache API webdriver。作为 Informix 应用程序,webdriver 构建执行 webexplode() 函数的 SQL 查询,以从 Informix 数据库检索 AppPage。webdriver 将来自对 webexplode() 调用所产生的 HTML 返回给 Web 服务器。

Web 服务器通过 CGI 或 API 接口调用 webdriver,以从 Informix 数据库检索 AppPage。webdriver 从以下来源获得配置信息:

  • webdriver 配置文件 — Web 服务器机器上称为 web.cnf 的文件,它包含目标数据库的名称、数据库用户、用户认证表名称和其它重要配置信息
  • Web 浏览器 — 可以将 cookie 信息从浏览器传递给 Web 服务器,然后传给 webdriver
  • Web 服务器环境 — webdriver 可以使用 Web 服务器所使用的环境变量

理解 webexplode() DataBlade 函数

webexplode() 是一个 DataBlade 函数。它使用 Informix DataBlade API 来与 Informix Dynamic Server 进行相互操作。因为 webexplode() 是一个 DataBlade 函数,所以它需要带有 Universal Data Option 的 Informix Dynamic Server.2000 或 Informix Dynamic Server。这些服务器使 DataBlade API 用于“链入”诸如 webexplode() 这样的函数,这些函数是由第三方供应商、客户和顾问所编写的。Informix 可以在 SQL 语句使用这些函数,就好象它们属于核心 SQL 实现一样。

webexplode() 函数根据 Informix 数据库中存储的数据构建动态的 HTML 页面。webexplode() 执行以下操作:

  • 解析 AppPage,它在 HTML 中包含 AppPage Script 标记,并动态地构建和执行嵌入在 AppPage 标记中的 SQL 语句和处理指令
  • 格式化这些 SQL 语句和处理指令的结果,然后将产生的 HTML 文档返回给客户机应用程序(通常是 webdriver

例如,下面这个查询将给专门用于 Web DataBlade webexplode() 函数的 Web DataBlade 变量赋值。可以在 dbaccess 或 AppPage 中执行该查询:

select webexplode( object,
"MI_DATABASE='stores7'&MI_USER='joe'&HTTP_HOST='theale2'&" ||
"REMOTE_HOST='theale2.informix.com'&SERVER_NAME='theale2'&" ||
"SERVER_URL=''&SERVER_PORT='80'&" ||
"SERVER_PROTOCOL='http://'&SERVER_SOFTWARE='Netscape FastTrack'&" ||
"HTTP_USER_AGENT='Netscape Browser'")
from webpages
where ID='HelloWorld1'

用语法将传递给 webexplode() 函数的 AppPage 变量链接起来,该语法类似于 CGI 程序参数的 URL 语法。以顺序方式连接参数的运算符是“&”字符。

该查询属于 webdriver 程序将发送给 Informix 服务器的这类查询。该示例中的查询将执行以下操作:

  • 标识称为 HelloWorld1 的数据库中的 AppPage
  • 初始化 AppPage 所需要的 AppPage Scripting 变量(例如,MI_USER)

    调用 webexplode() 函数,来处理 AppPage 源,并将 AppPage Scripting 变量设置成 webexplode() 参数列表中的值

如果在对 webexplode() 的调用中,覆盖第二个参数中的变量赋值,则新的变量赋值会一直保留,直到在其它地方重新对它赋值。

因为 webexplode() 是一个功能强大的服务器函数,可以在 SQL 查询中调用它,所以可以在 MISQL AppPage 标记内使用 webexplode() 将一个 AppPage“链接”在另一个 AppPage 中,从而动态地生成非常复杂的 Web 页面。

第一个 webexplode() 参数称为 object;这是 webpages 表中的一列,其数据类型为 HTML — 它是 WebDataBlade 中引入的新数据类型。只有 Web DataBlade 理解 HTML 数据类型,这就是 Web DataBlade 安装函数以创建、选择和维护 HTML object 列的原因。图 5 向您显示了 dbaccess 查询。


图 6 显示了对 webexplode() 查询的输出进行的选择。


dbaccess 中的 webexplode() 查询样本输出

在这个示例中,我们所做的与 webdriver 程序构造的查询没有大的区别。请记住,webdriver 将查询组合在了一起;webexplode() 函数将 AppPage 转换成适合于浏览器的 HTML 页面。

Web DataBlade 的 webdriver 组件是一个用 SQLI 协议来连接到 Informix 数据库的程序。可以将 webdriver 称为“中间件”,因为它在 Web 服务器和 Informix Dynamic Server 之间运行,可能位于浏览器客户机和 Informix 服务器之间的“中间层”。它也是 Informix 数据库客户机。

阅读(821) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~