第二部分:第8章编写CGI程序 第8章编写CGI程序 本章分为基础和提高两部分内容。基础部分是指编 写CGI程序的基础知识,内容包括公共网关接口、CGI 程序及其测试,还包括CGI的程序功能分析及输入流分 析等。提高部分包括编写与测试CGI应用程序,内容有 信息传递方法、高级CGI应用程序、CG程序的候选方 案、加速CGI应用程序、CGI程序的客户端、使用 Javasci[t对象、安全性问题,以及CG程序测试方法 实例等 2004.11.3 A|程序设计
2004.11.3 AI程序设计 1 第二部分:第8章 编写CGI程序 第8章 编写CGI程序 本章分为基础和提高两部分内容。基础部分是指编 写CGI程序的基础知识,内容包括公共网关接口、CGI 程序及其测试,还包括CGI的程序功能分析及输入流分 析等。提高部分包括编写与测试CGI应用程序,内容有 信息传递方法、高级CGI应用程序、CGI程序的候选方 案、加速CGI应用程序、CGI程序的客户端、使用 Javascipt对象、安全性问题,以及CGI程序测试方法 实例等
第二部分:第8章编写CGI程序 第8章编写CGI程序 8.1概述 8.2编写CGI程序基础 8.3编写实用的CGI应用程序 84CGI应用程序测试实例 本章小结与习题 2004.11.3 A|程序设计
2004.11.3 AI程序设计 2 第二部分:第8章 编写CGI程序 第8章 编写CGI程序 8.1 概述 8.2 编写CGI程序基础 8.3 编写实用的CGI应用程序 8.4 CGI应用程序测试实例 本章小结与习题
第二部分:第8章编写CGI程序 8.1概述 我们已经对 Visual Prolog6中的基本编程比较熟悉。此处不再对诸如类、 接口、对象等概念进行叙述。也不会介绍 Prolog中的回溯、子句、谓词等 概念。此处假设读者对这些概念是熟悉的。本章中的例子不牵涉任何类及对 象的创建,所以对于那些不熟悉面向对象语言的读者来说,应当比较易懂。 最后一个例子用 Javascript处理客户端进程。它利用了 Javascript的面向对 象的特点。要阅读本章的内容,读者最好要熟悉 Javascript的概念。要想详 细了解 Javascript的面向对象的特点,不妨到下面这个网站去浏览一下 http://www.webreference.com/js 本章中讲述的三个CGI应用程序的例子都在文件 cgitutorial zip中。如果电 脑中没有安装网络服务器,可以用压缩文件中自带的 Tiny Web web server。 2004.11.3 A|程序设计
2004.11.3 AI程序设计 3 第二部分:第8章 编写CGI程序 8.1 概述 • 我们已经对Visual Prolog 6中的基本编程比较熟悉。此处不再对诸如类、 接口、对象等概念进行叙述。也不会介绍Prolog中的回溯、子句、谓词等 概念。此处假设读者对这些概念是熟悉的。本章中的例子不牵涉任何类及对 象的创建,所以对于那些不熟悉面向对象语言的读者来说,应当比较易懂。 • 最后一个例子用Javascript处理客户端进程。它利用了Javascript的面向对 象的特点。要阅读本章的内容,读者最好要熟悉Javascript的概念。要想详 细了解Javascript的面向对象的特点,不妨到下面这个网站去浏览一下: http://www.webreference.com/js • 本章中讲述的三个CGI应用程序的例子都在文件cgitutorial.zip中。如果电 脑中没有安装网络服务器 ,可以用压缩文件中自带的TinyWeb web server
第二部分:第8章编写CGI程序 8.2编写CGI程序基础 82.1公共网关接口 82.2CG程序 82.3测试CG程序 8.2.4用 Visua| Prolog6创建CGI程序 825测试 Example1 82.6应用程序功能分析 8.2.7输入流分析 2004.11.3 A|程序设计
2004.11.3 AI程序设计 4 第二部分:第8章 编写CGI程序 8.2 编写CGI程序基础 8.2.1 公共网关接口 8.2.2 CGI程序 8.2.3 测试CGI程序 8.2.4 用Visual Prolog 6创建CGI程序 8.2.5 测试Example1 8.2.6 应用程序功能分析 8.2.7 输入流分析
第二部分:第8章编写CGI程序 8.2.1公共网关接口 CGI是指公共网关接口,是由世界万维网组织协会推荐的一种网络 服务器输入和输出信息流规范。 正如我们所知道的,HTML浏览器(如 Internet Explorer, Netscape)是通过网络服务器发送和接受信息的。但是万维网的作 用并不只是读取一些超链接HTML文件,还需要有交互。即数据要 从浏览器流入和流出,其中包括用户输入到浏览器窗口的信息。网 络服务器自己并不能解决所有问题,那么它是如何处理这些交互信 息的呢? 2004.11.3 A|程序设计
2004.11.3 AI程序设计 5 第二部分:第8章 编写CGI程序 8.2.1 公共网关接口 • CGI是指公共网关接口,是由世界万维网组织协会推荐的一种网络 服务器输入和输出信息流规范。 • 正 如 我 们 所 知 道 的 , HTML 浏 览 器 ( 如 Internet Explorer, Netscape)是通过网络服务器发送和接受信息的。但是万维网的作 用并不只是读取一些超链接HTML文件,还需要有交互。即数据要 从浏览器流入和流出,其中包括用户输入到浏览器窗口的信息。网 络服务器自己并不能解决所有问题,那么它是如何处理这些交互信 息的呢?
第二部分:第8章编写CGI程序 8.2.1公共网关接口 网络服务器只是一个最基础的部分,它可以输出HTML文件到浏览 器,包括其它的可识别的MIME类型的文件。但它并不支持一些高 级操作,比如进入数据库后台并返回数据库的请求给浏览器。为了 加强网络服务器的功能,于是CGI就产生了。服务器和同一台主机 上的CGI程序进行对话后,CGI应用程序就可以替服务器完成它无 法完成的任务。比如进入数据库后台或执行复杂的搜索任务。应用 CGI的网络服务器通常要比那些不用CGI的服务器可以发送更多的 信息。 2004.11.3 A|程序设计 6
2004.11.3 AI程序设计 6 第二部分:第8章 编写CGI程序 8.2.1 公共网关接口 • 网络服务器只是一个最基础的部分,它可以输出HTML文件到浏览 器,包括其它的可识别的MIME类型的文件。但它并不支持一些高 级操作,比如进入数据库后台并返回数据库的请求给浏览器。为了 加强网络服务器的功能,于是CGI就产生了。服务器和同一台主机 上的CGI程序进行对话后,CGI应用程序就可以替服务器完成它无 法完成的任务。比如进入数据库后台或执行复杂的搜索任务。应用 CGI的网络服务器通常要比那些不用CGI的服务器可以发送更多的 信息
第二部分:第8章编写CGI程序 8.2.1.1公共网关 公共”这个词代表能被所有的网络服务器接受的协议。“网关”这 个词表示获得信息的行为,就像通过一个门或关口进入另一端的程 序进程一样。抽象地说,网络服务器是网关的一端,而CGI应用程 序表示网关的另一端,它们通过CGI彼此进行对话。 2004.11.3 A|程序设计
2004.11.3 AI程序设计 7 第二部分:第8章 编写CGI程序 8.2.1.1 公共网关 • “公共”这个词代表能被所有的网络服务器接受的协议。 “网关”这 个词表示获得信息的行为,就像通过一个门或关口进入另一端的程 序进程一样。抽象地说,网络服务器是网关的一端,而CGI应用程 序表示网关的另一端,它们通过CGI彼此进行对话
第二部分:第8章编写CGI程序 8.2.1.2流 我们所说的术语流,是指信息处理时,每次只能处理数据队列中的一个字节。 就好像一根管道,它的直径只能允许通过一个字节,这些字节以流的形式从 通道的另一端流出,每次只有一个字节。 正如水不能同时在水管中朝两个方向流动一样,程序中的字节流也不能同时 进行读和写操作。数据或者从流中输岀(通常被称作可读流),或者输入到 流中(可写流),但在单个程序中不能对同一个流同时进行读写操作。 对CGI程序来说,字符是ANS格式的,是八位的字符。这一点以后必须要注 意,因为 Visual Prolog默认的是∪ NICODE字符,它是十六位字符。 Visual Prolog中有专门用来接收ANSI字符流的谓词,所以处理流并不是 问题。最后需要指出的是,当我们浏览因特网的时候,数据流通过因特网通 道流出到浏览器,一次只有一个字节。我们甚至注意不到他的通过,因为 旦单个字符到达浏览器,他们很快被组合起来,所以我们看到的好象是那些 字节同时到达。 2004.11.3 A|程序设计 8
2004.11.3 AI程序设计 8 第二部分:第8章 编写CGI程序 8.2.1.2 流 • 我们所说的术语流,是指信息处理时,每次只能处理数据队列中的一个字节。 就好像一根管道,它的直径只能允许通过一个字节,这些字节以流的形式从 通道的另一端流出,每次只有一个字节。 • 正如水不能同时在水管中朝两个方向流动一样,程序中的字节流也不能同时 进行读和写操作。数据或者从流中输出(通常被称作可读流),或者输入到 流中(可写流),但在单个程序中不能对同一个流同时进行读写操作。 • 对CGI程序来说,字符是ANSI格式的,是八位的字符。这一点以后必须要注 意,因为Visual Prolog默认的是UNICODE字符,它是十六位字符。 Visual Prolog中有专门用来接收ANSI 字符流的谓词,所以处理流并不是 问题。最后需要指出的是,当我们浏览因特网的时候,数据流通过因特网通 道流出到浏览器,一次只有一个字节。我们甚至注意不到他的通过,因为一 旦单个字符到达浏览器,他们很快被组合起来,所以我们看到的好象是那些 字节同时到达
第二部分:第8章编写CGI程序 8.2.1.3M|ME类型 MIME( Multipurpose internet Mail Extensions)比较确切的中文名称 为“多用途互联网邮件扩展”。它是当前广泛应用的一种电子邮件技术规范, 基本内容定义于RFC2045-2049。 ·MIME的目标之一是在数据文件和用于显示和编辑该文件类型的应用程序之 间建立联系。MIME通过为每种数据文件提供一个内容类型来实现这一点 MIME类型是 Internet的命名数据类型的一个标准.数据类型名由两部分组 成,第一部分是说明数据的基本类型,如图像、视频、音频、文本等。由于 文本有不同的类型,如C源程序、英文文本,以及保存图像有多种格式,所 以数据类型的第二部分是用来说明它的特殊类型。 Image/gⅰf就是一个恰当 的例子。第一部分 mages说明它是一个图像文件,第二部分gf说明它是以 GIF格式保存的。 2004.11.3 A|程序设计
2004.11.3 AI程序设计 9 第二部分:第8章 编写CGI程序 8.2.1.3 MIME类型 • MIME(Multipurpose Internet Mail Extensions)比较确切的中文名称 为“多用途互联网邮件扩展”。它是当前广泛应用的一种电子邮件技术规范, 基本内容定义于RFC 2045-2049。 • MIME的目标之一是在数据文件和用于显示和编辑该文件类型的应用程序之 间建立联系。MIME通过为每种数据文件提供一个内容类型来实现这一点。 • MIME类型是Internet的命名数据类型的一个标准. 数据类型名由两部分组 成,第一部分是说明数据的基本类型,如图像、视频、音频、文本等。由于 文本有不同的类型,如C源程序、英文文本,以及保存图像有多种格式,所 以数据类型的第二部分是用来说明它的特殊类型。image/gif就是一个恰当 的例子。第一部分images说明它是一个图像文件,第二部分gif说明它是以 GIF格式保存的
第二部分:第8章编写CGI程序 8.2.1.3M|ME类型 Status L Http/1.0 200 Ok 在信息以流的形式被发te;dy,2-9e-9415:94:092 Server. CSA/2.3 MIME Content-type 送到浏览器的同时,服 MIME-version: 1.0 Content-type: text/html Last-mocifled: Friday, 10-Feb-95 16: 03: 27 GMT 务器会在流的开头加入 Content-1 ength:145 biank iine, containing only CRLFj 报头,包括数据的m MIME类型。图8.1就是 title> Test HTML file s/head> 个典型的例子,它说 The 明了从服务器发送到浏 h1> This is a test files/hIs sp> So what did you expect, art? 览器的信息的格式 /html 图81服务器到浏览器的信息格式 2004.11.3 A|程序设计 10
2004.11.3 AI程序设计 10 第二部分:第8章 编写CGI程序 8.2.1.3 MIME类型 • 在信息以流的形式被发 送到浏览器的同时,服 务器会在流的开头加入 报 头 , 包 括 数 据 的 MIME类型。图8.1就是 一个典型的例子,它说 明了从服务器发送到浏 览器的信息的格式。 图8.1 服务器到浏览器的信息格式