使用WebBroker组件创建Web服务器.DOC

上传人:国*** 文档编号:606147 上传时间:2018-10-22 格式:DOC 页数:21 大小:247.50KB
下载 相关 举报
使用WebBroker组件创建Web服务器.DOC_第1页
第1页 / 共21页
使用WebBroker组件创建Web服务器.DOC_第2页
第2页 / 共21页
使用WebBroker组件创建Web服务器.DOC_第3页
第3页 / 共21页
使用WebBroker组件创建Web服务器.DOC_第4页
第4页 / 共21页
使用WebBroker组件创建Web服务器.DOC_第5页
第5页 / 共21页
点击查看更多>>
资源描述

1、第 17 章 使用 WebBroker 组件创建 Web 服务器WebBroker 是一套 VCL 工具,可以帮助您建立 Web 服务器程序。WebBroker 与Delphi 企业版一同发布,也可单独购买并与 Delphi 专业版配合使用。WebBroker 可用于建立 Web 服务器,支持 ISAPI、 NSAPI 或 CGI 协议。ISAPI(Internet Services API)和NSAPI(Netscape Services API)通过 TISAPIApplication Web 应用程序组件来支持。CGI(Common Gateway Interface)通过 TCGIAp

2、plication Web 应用程序组件来支持。Web服务器 Apache 是通过新的 TApacheApplication 组件来支持。对于开发者来说,这意味着使用对大多数 Internet 服务器可用的通用协议编写 Web 程序更为容易。本章我们将特别注重用于建立 Web 服务器的组件,它们位于 Internet 属性页上。所有的 Web 服务器都包含一个 TWebModule 组件,或者是一个 TDataModule 和一个TWebDispatcher 组件。在讨论这些组件之前,我们先快速浏览一下 HTML 的基础知识。理解 URL(Uniform Resource Locator)请求

3、和 HTML 页面的基本结构是很有必要的,因为用户会调用 Web 服务器,而 Web 服务器要提供 Web 页面服务。17.1 HTML 基础Web 服务器是 URL 路径的一部分。WebBroker 服务器将基于 URL 请求的内容和Web 服务器的设计返回 HTML 页面。通常,这些响应都是以 HTML 文档的形式进行。文档可能会包括到其他 Web 站点或 Web 服务的超链接。本节包含了对 URL 分解、HTML 文档和可替换参数标记的简要综述,这些机制有助于返回动态 Web 页面。17.1.1 URL(Uniform Resource Locator)URL 由协议标签、主机名、脚本或

4、服务器程序、路径信息和一些由用户向服务器提供的查询信息构成。参见下面的代码和图 17.1,可以看到一个 URL 的各个部分,该 URL指向如图所示的 Web 服务器。http:/localhost/scripts/iserver.dll/runquery?CustNo=1645本例中,所用协议为 HTTP,即超文本传输协议(Hypertext Transfer Protocol ) 。HTTP可能是最常用的浏览器协议,但从第 16 章是可知,并非只有这一种可能(回忆第 16 章,可以知道有几种 TCP/IP 协议,像 FTP 和安全 HTTP,都可以用作 URL 中的协议) 。例子中的主机名是

5、 LocalHost,它代表客户机。LocalHost 也是计算机名或 IP 地址127.0.0.1(127.0.0.1 也称为回送 IP 地址) 。主机名可以是任何 IP 地址或 DNS 表中的名字;例如 、 或 。URL 的脚本部分是430 Delphi 6 应用开发指南可选图 17.1 URL 在 Web 浏览器的地址栏中输入,也可能出现在 HTML 文档中的 HREF 标记之后的。对 Web 服务器而言,即包含服务器程序的文件夹。如果在 Windows 2000 系统下运行IIS 或在 PC 上运行 Peer Web Services,那么默认情况下脚本位于 c:inetpubscri

6、pts 目录(见图 17.2) 。服务管理器将虚拟路径脚本映射到物理上的目录。脚本后紧接着是服务器程序。本例的服务器程序是 iserver.dll。例子中的路径信息由 run-query 表示。最后一部分信息示范了如何向服务器发送查询参数。在例子中,CustNo=1645 将发送到服务器程序。图 17.2 Windows 2000 专业版系统中 Scripts Properties 对话框,第 17 章 使用 WebBroker 组件创建 Web 服务器 431可以看到虚拟的脚本路径被映射到物理路径注意:本例中所示的请求摘自 Delphi 中的例子 iserver.dpr,该工程位于$(DEL

7、PHI)DemosWebServIIS 文件夹中。上文中的请求是对 biolife.db 表发出的,该文件是 Delphi 附带的。您可能已经熟悉协议标签加上主机名的请求类型。但如果您对电子商务有一定程度的了解,例如在 进行购物,您可能已经看到过另外一些 URL 请求类型。注意:最熟悉的 URL 形如 http:/,在请求中不存在路径、脚本、查询和特定的页面信息。只涉及到 Web 服务器上的一个页面。Microsoft 公司的 Web 服务器 IIS 在默认情况下返回 default.asp 页面,但可以进行配置以返回任何页面。http:/ 站点返回的页面是index.htm。默认页 面是可

8、配置的。管理和配置 IIS 或其他 Web 服务器已经超出了本书的范围;但在这方面有很多书籍可供参考。如果给出了 Web 站点和路径来运行脚本(例如上文例子中的 runquery)但没有找到,则 Delphi 的 WebBroker 组件允许指定默认路径。按照惯例,本章中的默认路径是/root。17.1.2 基本的 HTML 结构上一节中的请求是要求 WebBroker 服务器返回特定页面。如果提供查询信息,则页面内容可以由查询值来控制。可以通过设计,对用户屏蔽 Web 页面的细节,如 CustNo,这是个好主意,把细节嵌入到 HTML 源文件中即可完成;而用户可通过输入 URL 直接发送请求

9、。无论如何,基本的 HTML 页面的结构都是一致的。提示:HTML(Hypertext Markup Language )中包括标记,标记语 言的读者可以认为这些标记是指令。注意:请记住,页面可能会非常复 杂。其中可能包括 Active Server Pages 和JavaScript 或 VBScript,而且像 FrontPage 这样的页面设计工具可能会添加相对数量和种类的修饰。不考虑这 些修饰, HTML 页面包含了某些一致的元素。基本的 HTML 页面由标记组成,它们定义了文档的结构。许多标记是对称的,包括开始标记和结束标记。例如,HTML 文档以标记开始,结束标记为 (请注意,/

10、用于结束标记) 。在文档标记之内是文档体标记 和 。通常所看到的文档内容是在文档体标记之内定义的。下面列出的代码使用和标记示范了框架性的 Web 页面,与本书开头的 Hello World 程序差不多。Welcome to Valhalla Tower Material Defender!上述 Web 页面是无法得到任何“本年度Web 站点”奖励的,但它确实示范了432 Delphi 6 应用开发指南HTML 的简单的和基本的特性。作为练习,打开 notepad.exe 并输入上面的代码。将文件保存为 hello.htm。然后打开 Web 浏览器。单击 File | Open 并浏览 hell

11、o.htm 的位置,再单击 OK。可以看到,浏览器中显示了文档体标记之间的文本(五、六年前这可是件了不起的事情) 。还有许多标记以及使得这些标记易于使用的工具,但你还是可以使用简单的文本编辑器。下面示范了常用的其他标记,可以帮助您入门。定制文档体可以向文档体添加额外的特征。使用 标记,可以将页面的背景颜色指定为颜色名或十六进制数字。在文档体标记中,还可以指定背景图像。下面对文档体标记进行了修改,示范了背景颜色和背景图像的使用。注意:本章中的 HTML 文档使用 Notepad.exe 生成,并在 Internet Explorer 5.5上进行了测试。无法保证其他的特定 Web 浏览器或早期版

12、本是否能够对这些超文本标记进行渲染。背景颜色由颜色名或 48 比特的 RGB(红、绿、蓝各 16 比特)颜色表示。颜色数字由三个十六进制数组成,各 16 比特。这里没有设置红色的比特位,而设置了所有的绿色和蓝色比特位。可以用颜色名 cyan 或 blue-green 来替换上述的颜色值。Background 属性指向一个图形文件,该文件将在文档的背景上绘出。有许多标记,一些标记有各种属性,特定的浏览器可能支持其中的全部或一部分。由于标记的种类和属性很多,因此需要使用 Web 页面设计程序如 FrontPage 或 Hot Metal 等(该程序与某些版本的 Delphi 捆绑发行) 。使用水平

13、规则具有 3D 效果的线由水平规则标记 表示,该标记指示浏览器在 HTML 文档体中绘出一条具有浮雕效果的线。行结束和段落标记在 HTML 文档体中文本结束处的 将向文本插入一个硬回车。如果在文档体中使用 标记,浏览器会在该位置创建段落。例如,This is some text.在 Web 页面中显示如下:This isSome第 17 章 使用 WebBroker 组件创建 Web 服务器 433Text.可以使用、以及标记格式化文档中的文本。最后一对标记是预格式化标记,它表示文本块在 Web 页面中的显示方式与其书写方式相同。使用标题标记可以为页面指定标题。标题标记通常位于 标记之前,在开

14、始标记之后。下面的代码示范了标题标记。Hello World!Welcome to Valhalla Tower Material Defender!上述 HTML 文档将在浏览器的标题栏显示文本 “Hello World!”。添加超链接页面上显示的文本 标记用于向 HTML 文档体中添加超链接。例如,Microsoft将显示带下划线的文字 Microsoft,它是超链接。用户单击该超链接时,浏览器将重定向到 http:/。 Web 本身就是由数以百万计的页面组成,页面中可能包含指向其他页面的超链接。实际上,每个页面都可以想像成 Web 的一个点,而每个超链接都是万维网的一条线。请记住,超链接

15、可能会指向 Web 服务,而服务再生成页面,我们在这里正是这样做的。书签书签标记表示为text,它可以作为 Web 页面的定位器,使用户可以在页面内移动。使用标记既可以表示当前页面内的位置,也可表示另外的页面中的位置。下面是一些例子:Location TitleGoto Index.htmLocationlocation注意:当键入的 URL 中有空格时,请在 URL 中使用空格字符的 值(ASCII 字符 32)。字面上是20,在十六进制中 20 是十进制的 2*16,即 32;在 URL 中要使用空格之处插入20 即可。上述例子的第一行定义了一个书签位置。可以注意到前缀#。在 Web 页面

16、上会显示文434 Delphi 6 应用开发指南本 Location Title。第二个例子打开位于 的 Web 页面 index.html,并定位到#location 书签。最后一个例子在当前页面内移动,因此并未给出页面位置。插入图像可以在 Web 页面中插入各种图像,包括 GIF、JPEG 或 BMP 格式。标记用于将图像嵌入到 Web 页面中。可以向图形标记加入高度和宽度属性,以限制图像的大小。alt 属性用于指定 Web 页面在文本格式下用于替换图像的文本,其他情况下用于提示。border 属性用于指定图像周围边界的宽度。这里有个例子:本例向 Web 页面嵌入了一幅 GIF 图像,1

17、50 像素高、100 像素宽、边界宽一个像素、提示为“Building Delphi 6 Applications”。当鼠标移动到图像上时,将显示包含 alt 文本的提示(在较新的浏览器中) 。格式化文本HTML 支持很多种文本格式,在一定程度上依赖于浏览器对特定边界的渲染能力。通常,在大多数浏览器中可以使用较为简单的标记。 标记表示标记之间的文本应该是斜体。与此相似, 标记表示其中的文本显示为黑体;对其中的文本添加下划线;而标记向其中的文本添加删除线。这里是一些例子:bold yields bolditalics yields italicsunderline yields underlin

18、estrikethrough yields strikethrough文本格式化标记可以嵌入到其他种类的标记中,从而形成形式非常丰富的 Web 文档。创建表格视图有些浏览器支持帧。帧可以对 Web 文档进行嵌套,看起来像是单一的文档,这里并不讨论该机制。尽管许多浏览器支持帧,但许多 Web 站点是使用表格而不是帧制作的。标记可以将页面的空间组织起来并划分为区域。表格标记基本上支持对页面空间进行三维划分。标记定义了表格的边界。标记定义了表格中的一行,而标记则定义了表格中一个单元。另外,您还可以指定表格头,它表示每一列的标题信息;同时,表格还以进行 n 维嵌套。可以想像到,这样的 HTML文档看起

19、来可能会复杂一些。关于 Web 页面设计有许多出色的书籍,我们在这里只介绍表格标记的基本应用。定义表格 将 HTML 文档中的表格等价于电子表格或数据库表是有道理的。HTML表格标记可以将页面划分为统一分割的区域。一种用法是用来代表基于表格的数据,另外还可以用于划分页面的区域和数据。表格以标记开始, 标记结束。表第 17 章 使用 WebBroker 组件创建 Web 服务器 435格也可以嵌套。例如,表格中的一个单元还可以包含另一个嵌套的表格。表格还支持一些属性标记,用于定义表格的显示方式。包括背景颜色、表格宽度、单元内部占位空间、单元距离以及边界宽度等。宽度可以用像素数目或全部可用宽度的百

20、分比来表示。下面列出的代码(其页面显示如图 17.3 所示)示范了如何在表格标记中使用各种属性标记。注意:本小节只强调了下面代码中的表格标记。代 码的其他方面将在其后的三个小节中讨论,我们将继续 引用该代码。Sample TableColumn1Column 2Column 3Col 1, Row 1Col 2,Row 1Col 3, Row 1Col 1, Row 2Col 2,Row 2Col 3, Row 2表格标记的 bgcolor 属性表示表格所显示的背景颜色。前面提到过,颜色属性可以用一个三元组表示,其中红、绿、蓝各 16 比特;也可用颜色名称表示,如 red。width 属性表示

21、表格在页面的水平宽度所占的百分比或像素数目。如果使用百分比表达,则表格的宽度可根据显示区域动态变化。CellPadding 属性表示每个单独的数据单元中使用的额外空间的大小。CellSpacing 表示表格之间的距离大小。 border 属性表示表格边界的宽度。将标记放置在表格开始后、结束前,可以为表格添加相关联的标题。如图 17.3 所示,本例中与表格相关联的标题是“Sample Table”。图 17.3 使用表格标记和相关属性进行格式化的文档添加表格头 表格头标记表示 HTML 表格的列标题。请注意上面的代码,其中分别向表格的三列添加了列标题 Column1、Column2、Column

22、3。436 Delphi 6 应用开发指南定义表格行 表格的每一行数据都使用标记表示。即使在 HTML 源文件中标记之间包括了许多行文本也是如此,该标记指示浏览器将标记之间的所有东西都作为表格的一行数据来显示。向表格添加数据 单独的表格元素使用标记表示,如代码所示。由于单一的数据元素可以包含简单的文本或嵌套表,因此其工作方式非常简单。请注意,标记可能会包含一些额外的属性,如代码中所示的 ALIGN 属性。提示:为建立有趣的 Web 页面,一个好方法是复制已存在的页面,并进行定制。很明显,单独的标记是易于理解的。HTML 的潜在威力正在于这种简单性。如同任何语言的语法,我们进行通信的能力受对语言

23、的理解的限制。虽然 HTML 是简单的,考虑到 26 个拉丁字母其可能性确实是令人吃惊的,正像 World Wide Web 一样。如果需要创建高级的 Web 页面,还需要进一步学习,本节只是提供了进阶的基础。17.1.3 将可替换参数标记与 WebBroker 一同使用专业水准的 Web 页面需要更多的努力,并广泛地使用 HTML,其内容远远超过这里所介绍的。除了需要创建基本的 Web 页面之外,还需要表示在动态 Web 页面中可替换的标记;这些标记将使用由 Web 服务器传送的动态数据替换。可替换参数标记与书签标记看起来很相似。可替换参数在 Delphi 的 Web 服务器页面中使用表示。

24、对于并不表示有效的超文本标记的对,HTML 惟一的行为是忽略掉这些标记。但 Delphi 组件可以查找一些特定格式的文本。注意:TPageProducers 的 TagString 行为与 Format 函数行为非常相似。当遇到特定的标记时,就使用格式化文本替 换该标记。 Format 函数使用字符串参数,以开头,后接特殊的格式化字符;而 HTML 文档中遇到时,则触发 OnHTMLTag 事件。显然,一旦该类型事件发生,即可使用必要的代码进行合适的替换。当为 Web 服务器设计页面时,当需要向 WebBroker 页面插入数据时,只要找到 参数标记即可。TPageProducer 组件的 O

25、nHTMLTag 事件会传递一个 TagString 参数,可以将其与预先确定的值进行比较,然后根据 TagString 的值采取合适的动作。下面一节示范了 WebBroker 组件一些基本的方法、特性和事件,可用于建立 Web 服务器。17.2 使用 WebBroker 组件Delphi 的 WebBroker 套件定义了一些组件,能够对 URL 请求进行响应;这些 URL 请求是由浏览器或 HTTP 服务器应用程序向基于 WebBroker 套件建立的服务器发出的。有一些基本的组件可以支持这种行为特征,而服务器的其余部分则是由您业已熟悉的组件构第 17 章 使用 WebBroker 组件创

26、建 Web 服务器 437成的。WebBroker 支持建立 ISAPI、NSAPI、CGI 和 Apache 服务器。ISAPI 和 NSAPI 服务器分别是由 Microsoft 和 Netscape 的 Internet 服务器支持的。而 Apache 服务器则是一种流行的 Internet 服务器; Delphi 6 的 WebBroker 组件也支持建立 Apache 服务器。Delphi 的WebBroker 支持 CGI 服务器,可建立为单独的控制台程序或 Windows 程序,将请求返回到标准输入/输出设备。大多数流行的浏览器都支持 CGI。所有的服务器程序都以 WebDisp

27、atcher 组件开始,我们在讨论 WebBroker 组件时也从这里开始。17.2.1 WebDispatcher 组件所有的 Web 服务器程序都包含了一个单独的 WebDispatcher 组件,当使用 New Items对话框中的 Web Server Application 向导启动新的工程时,该组件将自动添加到TWebModule 组件中;也可以手工从组件面板的 Internet 属性页向已有的 TDataModule 组件添加。特别是,TWebDispatcher 组件是 TCustomWebDispatcher 组件的后代,子类化TDataModule 并实现了 IWebApp

28、Dispatcher 和 IWebDispatcherAccess 接口。TWebDispatcher 组件、IWebAppDispatcher 和 IWebDispatcherAccess 接口支持添加动作项与函数,动作项用于响应 Web 请求,而函数用于返回 TWebResponse 和 TWebRequest 对象。TWebResponse 和 TWebRequest 对象用于交换所请求的数据和返回到 Web 服务器的数据。当向数据模块添加 TWebDispatcher 组件时,与定义 TWebModule 对象在效果上是相同的。TWebDispatcher 包含一个 TWebActio

29、nItems 的集合。这些项可用于为 URL 响应和请求定义路径信息。如果使用 Web Server Application 向导,则 Delphi 将自动创建一个TWebModule 对象,该组件实现了 TWebDispatcher 的接口。每个 Web 服务器只需一个TWebDispatch 对象:可以向 TDataModule 组件添加 TWebDispatcher 组件,也可创建TWebModule 组件。TWebModule 组件TWebModule 由 TDataModule 子类化而来,并支持添加和管理 TWebActionItems 以及非可视化控件,这些组件对于使用 WebB

30、roker 套件创建 Web 服务器是必要的。除了TWebModule,还需要添加其他 VCL 控件,如 TPageProducer,该组件以 URL 路径信息和查询数据的形式对发送到 Web 服务器的请求进行响应(请回忆在本章开始讨论的 URL 的各个部分) 。TWebActionItem用右键单击 TDataModule 中的 TWebDispatcher 组件或 TWebModule 中的任意点,然后从上下文菜单中选择 Action Editor 菜单项,即可启动 WebAction 编辑器。WebAction 编辑器(如图 17.4 所示)可以为 Web 服务器定义路径信息。在动作项中

31、包括了动作的名字、触发该动作的 URL 路径信息、该动作项是否可用、某个特定的动作是否是默认的动作以及可选的页面生成器。最低程度也需要一个默认动作,438 Delphi 6 应用开发指南而且可能只有一个。默认动作是某个特定的请求不存在匹配路径时触发的动作。在图 17.4中,该动作项名为 Root。路径为 /root。该动作是可用的,并且是默认动作。当触发该动作时,使用 PageProducer1 组件来生成相应的页面。图 17.4 WebAction 集合编辑器可以定义路径信息,用于浏览器或其他来源发出的 URL 请求中注意:当某个动作是默认动作时,忽略 Enable 特性。默 认动 作总是可

32、用的。假定图中所示的 Root 动作是为驻留在 LocalHost 计算机上的 ISAPI 服务器 server.dll定义的。下面的两个 URL 都会返回由 PageProducer1 组件所定义的响应。http:/LocalHost/scripts/server.dllhttp:/LocalHost/scripts/server.dll/root除了 WebAction 编辑器中所显示的信息之外,还可以指定 MethodType。默认的MethodType 是 mtAny。默认的 MethodType 必须对任何请求进行响应,其他可能的MethodType 包括 mtGet、mtHead

33、、mtPost 和 mtPut。mtGet 类型请求用于获取与 URL 关联的信息。mtPut 类型用于替换与 URL 关联的信息的内容。mtPost 用于将请求的内容发送到服务器。最后,mtHead 类型只返回请求的头信息。当 Web 服务器从 HTTP 服务器接收到路径和查询信息时,首先从动作项列表中查找匹配的路径和 MethodType。如果没有匹配的动作,则使用默认动作。另一方面,找到匹配动作后,则调用 OnAction 事件。OnAction 事件处理程序的参数包括:调用对象的引用、TWebRequest 对象、TWebResponse 对象和一个布尔类型的变量参数Handled。T

34、WebRequest 对象 Request 包含了发送到 HTTP 服务器的请求的所有信息。TWebResponse 对象 Response 可用于将内容返回到服务器。Content 特性可用于返回简单的文本,而 ContentStream 和 ContentType 特性可用于返回较为复杂的二进制数据如图像或大块的文本。变量参数 Handled 用于表示事件处理程序是否完全处理了该请求。将Handled 设置为 False 表示还需要其他处理程序来完成对请求的处理。procedure TDataModule2.WebDispatcher1GetHeadAction(Sender:TObject; Request: TWebRequest; Response: TWebResponse;var Handled: Boolean);constsContent = %s %s Connection: %s User-Agent: %s

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 重点行业资料库 > 1

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。