1、第第7章章 创建创建Web服务器程序服务器程序本章要点本章要点7.1 Internet概述概述7.2 Web服务器程序简介服务器程序简介7.3 ISAPI编程编程7.4 CGI编程编程7.5 ISAPI DLL和和CGI之间的相互转化之间的相互转化 本章要点本章要点 在在Internet概述的基础上,对概述的基础上,对Web服务服务器程序进行阐述。器程序进行阐述。结合实例说明了结合实例说明了ISAPI编程。编程。结合实例说明了结合实例说明了CGI编程。编程。返回本章首页7.1 Internet概述概述7.1.1 术语与标准术语与标准7.1.2 统一资源定位器统一资源定位器7.1.3 超文本标记
2、语言超文本标记语言7.1.4 HTTP服务器活动服务器活动返回本章首页7.1.1 术语与标准术语与标准与与Web服务器应用程序相关的几个重要服务器应用程序相关的几个重要RFC标准包括:标准包括:RFC822:ARPA lnternet文本报文标准,文本报文标准,描述了报文头标的结构和内容。描述了报文头标的结构和内容。RFC152l:MIME第一部分,描述封装第一部分,描述封装和传递多种格式和多段和传递多种格式和多段Internet信息的方信息的方法。法。RFCl945:超文本传输协议(超文本传输协议(HTTP协协议),描述了多媒体文档的传输协议。议),描述了多媒体文档的传输协议。返回本节7.1
3、.2 统一资源定位器统一资源定位器 URL对网络资源的位置提供了一种抽对网络资源的位置提供了一种抽象的识别方法,并用这种方法给资源定位。象的识别方法,并用这种方法给资源定位。这里的资源是指这里的资源是指Internet上可以被访问的上可以被访问的任何对象,包括文件、文档、图像、声音任何对象,包括文件、文档、图像、声音等等,以及与等等,以及与Internet相连的任何形式的相连的任何形式的数据。数据。URL是一个字符串,它的一般格式是一个字符串,它的一般格式如下:如下:协议:协议:/主机名主机名/脚本文件名脚本文件名/路径信息路径信息?查询条件。查询条件。返回本节7.1.3 超文本标记语言超文本
4、标记语言 HTML文档通过标记(文档通过标记(Tag)和属性和属性(Attribute)对超文本的语义进行描述。对超文本的语义进行描述。HTML虽然本质上并不是编程语言,但它虽然本质上并不是编程语言,但它却是在开发却是在开发HTML文档时必须遵守的一套文档时必须遵守的一套严格而且简明易懂的语法规则。也就是说,严格而且简明易懂的语法规则。也就是说,如果一个文档是基于如果一个文档是基于HTML标准的,则可标准的,则可以解释某些标记的含义。以解释某些标记的含义。返回本节7.1.4 HTTP服务器活动服务器活动Web浏览器和浏览器和Web服务器之间通过服务器之间通过HTTP协议进行通信。协议进行通信。
5、HTTP请求分为两请求分为两种类型,一种是种类型,一种是GET请求,另一种是请求,另一种是POST请求。请求。Web服务器接收到客户请求服务器接收到客户请求之后,将根据配置信息执行一定数量的活之后,将根据配置信息执行一定数量的活动。当动。当Web服务器应用程序完成客户请求服务器应用程序完成客户请求之后。必须构造一个之后。必须构造一个HTML页面或其他页面或其他MIME内容,并传输给客户。内容,并传输给客户。返回本节7.2 Web服务器程序简介服务器程序简介7.2.1 Web服务器程序的种类服务器程序的种类7.2.2 Web服务器应用程序的逻辑结构服务器应用程序的逻辑结构7.2.3 调试服务器程
6、序调试服务器程序返回本章首页7.2.1 Web服务器程序的种类服务器程序的种类Delphi 6中可以创建的中可以创建的Web服务器程序包括:服务器程序包括:CGI程序、程序、Win-CGI程序和程序和ISAPI(Microsoft Server DLL)、)、NSAPI(Netscape Server DLL)。)。返回本节7.2.2 Web服务器应用程序的逻辑结服务器应用程序的逻辑结WebServerWebApplicationWeb Module(Dispatcher)WebRequestWebResponseActionItemContentRroducerContentRroducer
7、ContentRroducerActionItem图7-1 Web服务器程序的逻辑结构返回本节7.2.3 调试服务器程序调试服务器程序不同类型的不同类型的Web服务器程序,需要在支持相服务器程序,需要在支持相应的服务器程序的服务器上进行。调试应的服务器程序的服务器上进行。调试ISAPI或或NSAPI类型的程序,则要求在支持这种服务器程类型的程序,则要求在支持这种服务器程序的服务器上进行。可以在服务器中编写一定的序的服务器上进行。可以在服务器中编写一定的代码,作为用户请求直接调用这些服务器程序生代码,作为用户请求直接调用这些服务器程序生成的成的DLL;而调试而调试CGI和和WinCGI类型的服务
8、器类型的服务器程序就比较困难一些,需要在服务器上执行这些程序就比较困难一些,需要在服务器上执行这些程序,并且需要编写代码作为用户请求的信息。程序,并且需要编写代码作为用户请求的信息。返回本节7.3 ISAPI编程编程7.3.1 返回静态页面返回静态页面7.3.2 返回动态页面返回动态页面7.3.3 接收用户输入的接收用户输入的ISAPI DLL7.3.4 一个完整的一个完整的Web数据库应用程序数据库应用程序返回本章首页7.3.1 返回静态页面返回静态页面其步骤(具体制作如图其步骤(具体制作如图7-27-10所示):所示):1新建项目新建项目2程序框架程序框架3创建创建ActionItem4为
9、为ActionItem编写代码编写代码5设置服务器设置服务器6编译编译ISAPI动态链接库程序动态链接库程序7调试调试ISAPI动态链接库动态链接库图图7-2 选择选择Web Server Application图7-3 选择生成Web服务器程序的类型图7-4 ISAPI动态链接库的框架 图7-5 Action Editor对话框 图7-6 使用对象监视器为ActionItem设置属性图7-7 选择存放ISAPI动态链接库的目录 图7-8 设置scripts目录为可执行的图7-9 设置编译后的文件后缀名为dll图7-10 浏览器中显示由ISAPI动态链接库生成的静态HTML页面返回本节7.3.
10、2 返回动态页面返回动态页面其具体的步骤如下:其具体的步骤如下:(1)在)在projectl项目文件中选择项目文件中选择Web Module部件,激活部件,激活ActionEditor对话框。对话框。(2)在)在ActionEditor对话框新添加一个对话框新添加一个ActionItem。(3)将第二个将第二个ActionItem命名为命名为Dynamicdll,PathInfo属性设置为属性设置为DateTime。(4)为新建的为新建的ActionItem的的OnAction事件编写代码。事件编写代码。图7-11 浏览器中显示由ISAPI动态链接库生成的动态HTML页面返回本节7.3.3 接
11、收用户输入的接收用户输入的ISAPI DLL1OnAction事件的参数事件的参数(主要属性如表主要属性如表7-1)2创建用户输入的创建用户输入的HTML页面页面(创建好的创建好的HTML页面如图页面如图7-12所示所示)3添加添加PageProducer控件控件(具体含义如表具体含义如表7-2)4为项目文件新建一个为项目文件新建一个ActionItem5调试程序调试程序(如图如图7-137-15所示所示)表表7-1 TwebReques对象的主要属性对象的主要属性属性属性属性的作用属性的作用Query由由GET方法请求获得全部参数组成的字符串方法请求获得全部参数组成的字符串QueryFiel
12、ds一个经过分解的查询字段一个经过分解的查询字段Content由由POST方法请求获得全部参数组成的字符串方法请求获得全部参数组成的字符串ContentFields一个经过分解的一个经过分解的Content字段字段图7-12 创建好的用户输入界面 表表7-2 MethodType方法的参数值及其含义方法的参数值及其含义参数值参数值具体含义具体含义MtGet采用采用GET方法接收用户请求方法接收用户请求MtPost采用采用POST方法接收用户请求方法接收用户请求MtPut用用Content的值代替的值代替URL属性确定的资源的用户请求属性确定的资源的用户请求MtHead要求获得有关要求获得有关H
13、TTP服务器响应信息种类的请求服务器响应信息种类的请求MtAny任何其他形式的用户请求任何其他形式的用户请求图7-13 在用户输入界面中输入数据图7-14 使用GET方式得到的服务器响应信息 图图7-15 使用使用POST方式得到的服务器响应信息方式得到的服务器响应信息返回本节7.3.4 一个完整的一个完整的Web数据库应用程数据库应用程1将数据表作为服务器程序的响应信息将数据表作为服务器程序的响应信息(如图(如图7-16所示)所示)2增加查询功能增加查询功能(Query控件和控件和QueryTableProducer控件控件的属性设置如表的属性设置如表7-3所示所示)图7-16 作为服务器响
14、应信息输出的数据表表7-3 控件的属性设置控控 件件属性设置属性设置Query1DatabaseName:DBDEMOSQueryTableProducer1Query:Query1RowAttributes.Align:haCenterTableAttributes.Border:1返回本节7.4 CGI编程编程7.4.1 一个时间显示程序一个时间显示程序7.4.2 命令行处理命令行处理7.4.3 CGI环境变量环境变量7.4.4 CGI数据库编程数据库编程返回本章首页7.4.1 一个时间显示程序一个时间显示程序 单击单击“Project”主菜单下的主菜单下的“Remove from Pro
15、ject”选项,将选项,将unit单元从项目文件中单元从项目文件中移走,然后按下移走,然后按下Ctrl+F12键,选择项目文件,键,选择项目文件,使它在代码编辑器中显示出来。在它的使它在代码编辑器中显示出来。在它的Program保留字后加入一个保留字后加入一个¥APPTYPE CONSOLE编辑器指令,将它转换成控制台应编辑器指令,将它转换成控制台应用程序,最后删除大部分项目源代码,如果直用程序,最后删除大部分项目源代码,如果直接在接在Delphi环境中运行该程序,则它会打开一环境中运行该程序,则它会打开一个终端窗口,并输出个终端窗口,并输出writeln语句的内容,如图语句的内容,如图7-1
16、9所示。所示。图7-19 在Delphi环境中执行的结果返回本节7.4.2 命令行处理命令行处理CGI应用程序接收用户输入的方法有两种:应用程序接收用户输入的方法有两种:(1)使用它的命令行参数识别页面(激)使用它的命令行参数识别页面(激活应用程序)的活应用程序)的URL,而而URL通常在应用通常在应用程序名后面包括附加的参数。程序名后面包括附加的参数。(2)系统使用一系列环境变量向)系统使用一系列环境变量向CGI应用应用程序进一步传递信息。在程序进一步传递信息。在Win_CGI中,同中,同样通过样通过INI文件来传递,而没有使用环境文件来传递,而没有使用环境变量。变量。返回本节7.4.3 C
17、GI环境变量环境变量表7-4 CGI环境变量环境变量环境变量含义含义SERVER_NAMEWeb服务器主机名服务器主机名SERVER_PROTOCOLHTTP请求的协议请求的协议SERVER_SOFTWAREWeb服务器软件的名称和版本服务器软件的名称和版本GATEWAY_INTERFACECGI支持的版本支持的版本REQUEST_METHOD请求使用的对象方法,可以是请求使用的对象方法,可以是GET或者或者POSTDOCUMENT_ROOT目录主机文档或者目录主机文档或者Web服务器服务器PATH_TRANSLATES与服务器有关的物理路径与服务器有关的物理路径HTTP_PEFERER激活激
18、活CGI应用程序的文档应用程序的文档URLSCRIPT_NAME被执行的被执行的CGI应用程序相关的路径(基于服务器地址)应用程序相关的路径(基于服务器地址)PATH_INFO向向CGI应用程序传递的路径,位置在应用程序名和查应用程序传递的路径,位置在应用程序名和查询字符串之间询字符串之间QUERY_STRING向程序传递的查询,当请求对象的方法是向程序传递的查询,当请求对象的方法是GET时,该时,该字符串用问号追加到字符串用问号追加到URL中中返回本节7.4.4 CGI数据库编程数据库编程(1)依次单击)依次单击“File”“New”“Other”选选项,然后在项,然后在Business页面
19、中选择页面中选择DB Web Application Wizard,如图如图7-24所示。单击所示。单击“OK”按钮,则出现选择按钮,则出现选择Web数据库应用程数据库应用程序类型对话框,如图序类型对话框,如图7-25所示。所示。(2)单击)单击“Next”按钮,将出现选择数据表按钮,将出现选择数据表对话框,如图对话框,如图7-26所示。选择好数据表后,单所示。选择好数据表后,单击击“Next”按钮,将出现选择要显示的字段对按钮,将出现选择要显示的字段对话框,如图话框,如图7-27所示。所示。选择完需要显示的字段后,单击选择完需要显示的字段后,单击“Next”按钮,则出现设置按钮,则出现设置W
20、eb页面对话框,如图页面对话框,如图7-28所示。所示。(3)所有的设置都完成后,则出现确认对话)所有的设置都完成后,则出现确认对话框,如图框,如图7-29所示。单击所示。单击“Finish”按钮,就完按钮,就完成了创建一个成了创建一个Web项目文件的工作。项目文件的工作。向导为我们生成了向导为我们生成了WebModule1模块,其中模块,其中加入了三个控件如图加入了三个控件如图7-30所示。所示。编译并运行该编译并运行该程序,则在浏览器中显示的结果如图程序,则在浏览器中显示的结果如图7-31所示。所示。图7-24 利用DB Web Application Wizard向导创建项目文件 图7-
21、25 选择Web数据库应用程序类型 图7-26 选择数据表图7-27 选择要显示的字段图7-28 设置Web页面图7-29 完成创建项目文件 图7-30 向导自动生成的WebModule1模块图图7-31 显示结果显示结果返回本节7.5 ISAPI DLL和和CGI之间的相互转之间的相互转 (1)将编写好并且调试成功的)将编写好并且调试成功的project5.dll创建成创建成一个模板,以便在一个模板,以便在Win_CGI中使用(如图中使用(如图7-32所所示)。示)。(2)关闭)关闭project5项目,在主菜单中选择项目,在主菜单中选择“New”选项,创建一个新的项目,指定为选项,创建一个新的项目,指定为Win_CGI。(3)新建项目后,新建项目后,Delphi将自动产生一个缺省的将自动产生一个缺省的Web Module控件,在加入模板后再将它删除(如控件,在加入模板后再将它删除(如图图7-33所示)。所示)。返回本章首页图7-33 加入project5dll模板图7-32 为模板设置属性返回本节本章到此结束,本章到此结束,谢谢您的光临!谢谢您的光临!结束放映返回本章首页THANK YOU VERY MUCH!