Informix Web DataBlade 体系结构
下图 1 显示了 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 服务器的这类查询。该示例中的查询将执行以下操作:
如果在对 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()
查询的输出进行的选择。
在这个示例中,我们所做的与 webdriver
程序构造的查询没有大的区别。请记住,webdriver
将查询组合在了一起;webexplode()
函数将 AppPage 转换成适合于浏览器的 HTML 页面。
Web DataBlade 的 webdriver
组件是一个用 SQLI 协议来连接到 Informix 数据库的程序。可以将 webdriver
称为“中间件”,因为它在 Web 服务器和 Informix Dynamic Server 之间运行,可能位于浏览器客户机和 Informix 服务器之间的“中间层”。它也是 Informix 数据库客户机。