cgi编程概述

cgi编程概述

徐春香

  随着internet的广泛使用,人们对被动地接收信息或服务的方式越来越不满意,人们不希望看到或接受不喜欢的服务,而希望主动去参与。同时,厂商也希望能利用internet获得用户对其服务的质量、内容或性质的反馈以便更好地改进服务。总之,人们都希望改变internet的单向通信方式,使原先只能提供静态文档或静态链接的web页面具有交互性,变得生动、富有生命力。这时,internet上就需要提供web应用程序以支持用户的随机参与。于是,cgi(common gateway interface,通用网关接口)便应运而生。

  一、cgi工作方式

  cgi是一种在服务器与外部脚本或程序之间进行交互的方法,它通过从web服务器上接收信息,创建一个子过程以便为cgi脚本处理或存储从服务器上接受的信息。通过cgi,用户可以在web页面上添加一些程序,向访问者提供一种方式来存储信息和执行一些外部程序,访问数据库。另外,用户可以通过cgi动态地修改页面。

  cgi运作的主要步骤如下:

  (1)首先根据url的第一和第二部分,浏览器向web服务器某一端口发出建立连接的请求;

  (2)然后,浏览器将url的其余部分提供给web服务器,web服务器将url转换成路径和文件名;

  (3)当服务器意识到url指向一个程序而不是一个静态文件时,服务器将执行cgi脚本;

  (4)cgi脚本执行,读取环境变量和输入的信息,处理后输出正确的信息,然后脚本终止;

  (5)服务器发现脚本执行结束,关闭与浏览器的连接;

  (6)最后,浏览器显示脚本的执行结果。

  此过程如图1所示。

14401t01.jpg
  图1

  cgi脚本和服务器之间通过stdin(标准输入)和stdout(标准输出)传递信息。服务器通过stdout向脚本传递需求信息,cgi脚本读取环境变量和stdin,然后根据流程将满足条件的信息输出给stdout。也就是说,对于web服务器而言,stdout将信息流送至脚本的stdin,脚本的stdout将信息流送至服务器的stdin,从而形成一个环路。除此之外,脚本不需要知道服务器将最终的结果重定向到什么地方。cgi脚本和web服务器之间的输入输出流程如图2。

14401t02.jpg
  图2

  二、cgi脚本语言

  cgi脚本语言大致分为两大类:解释型和编译型。

  解释型脚本语言是一种不需要预先编译的语言,它完全依赖解释器来完成任务,例如perl、tcl、unix shell等。这种语言通俗易学,能够被广泛应用。但是,由于这种语言的源代码是ascii码的文本文件,用户能够看到脚本,所以安全性较差。同时,由于解释型语言都是在执行的时候才进行解释,所以执行效率比较低。编译型脚本语言是一种需要预先编译、能够生成二进制代码的语言,例如c、c++、visual basic等。由于这种语言需要编译环境,所以它依赖于具体的操作平台。但是这种语言可以降低因装载解释器造成的服务器负载过量,同时,由于这种语言生成了二进制代码,所以安全性较高。

  三、cgi编程环境

  在进行cgi编程之前,必须创建cgi的编程环境。与其他编程环境的创建一样,我们要考虑硬件、操作系统及其他相关因素。

  在创建cgi编程环境的众多考虑中,最重要的是针对特殊的web应用选择合适的脚本语言。在选择cgi脚本语言的过程中,我们不仅要看语言本身的优缺点,同时要考虑所使用的数据库和web服务器。

  在实际工作中,我们将很多信息存放在数据库中。为了做到信息共享和动态服务,我们必须能够让web用户通过cgi访问数据库。cgi需要通过一个接口才能访问数据库,这种接口产品多种多样,几个大的数据库厂商也提供某些cgi脚本语言访问数据库的接口。例如,oracle就提供perl对oracle数据库的接口。我们在选择cgi脚本语言的时候,一定要看是否有相应的产品支持它对相应数据库的访问,以及支持数据库的访问到什么程度,例如是否支持事务操作等。

  正如上面cgi运作方式中所阐述的,所有的请求都经过web服务器。所以cgi脚本语言的选择与web服务器的类型也关系紧密。

  下面以perl为例说明cgi编程环境的创建。



  在使用perl语言进行编程之前,必须安装它的解释环境。从网上下载符合开发环境的perl语言解释器,然后开始安装。一旦安装成功,就可以使用perl语言开发动态服务。如果需要使用perl语言访问数据库,例如oracle,则需要安装perl语言与oracle之间的接口。

  编写完perl程序后,必须能够让用户通过浏览器的方式访问到这个程序。这时,在web服务器上必须设置perl程序所放置的目录。在某些web服务器上,cgi脚本语言的程序目录不能更改,一般为cgi-bin;也有一些web服务器允许cgi程序放在任何目录下,但这些目录必须在web服务器上说明,例如netscape的www server。通过在web服务器中设置perl程序目录,当服务器接收一个请求后,它就能够知道访问的是否是perl程序的目录,如果是,则创建子进程,采用相应的解释器解释执行这个程序,否则就直接传送文档。

  perl语言开发环境配置完毕后,我们看一个用perl开发的实例(由于使用接口不同,故在程序中只是大致说明接口的使用)。

  目的:在一个页面上,根据用户的填写查询资料数据库。

  步骤:一旦用户提交,先检查用户输入,然后执行相应的perl程序,从数据库中查询满足条件的记录,按规定的格式显示记录。

  首先,在页面的html文件的提交按钮onclick事件中利用javascript编写一个检查输入是否正确的函数,一旦检查通过,则执行页面form标志中的action操作。(javascript在此略)。

  下面我们看一看perl程序的操作过程。

  (1)perl从环境变量中接收输入的信息;

  # if post method

  if ($env{'request_method'} eq "post") {

   read(stdin, $buffer, $env{'content_length'});

  }

  # if get method

  if ($env{'query_string'}) {

   $buffer = $env{'query_string'};

  }

  (2)分析输入信息;(略)

  (3)与数据库之间建立连接;

  $dh = connect("数据库源", "用户","口令"); 这里的数据库源、用户及口令均属于数据库的配置。

  (4)一旦连接成功,我们就可以执行一个查询语句(标准的select语句)。

  $csr = $dh-〉execute(select语句);

  (5)将结果打印在屏幕上;

  print "结果";

  (6)断开与数据库的连接;

  $dh-〉disconnect;

  (7)返回。

  完成一个perl动态查询程序。

  四、结束语

  为了实现internet上用户的随机参与,除了cgi之外,我们还可以采用一些web服务器厂商提供的针对某种特定web服务器的编程接口。例如,netscape针对自己本身的产品提供的javascript。但我个人认为,这种方法具有片面性。以netscape提供的liveware为例,如果要修改页面或修改程序必须重新编译。这对经常改变页面风格的需求十分不利。

  当然,在实际使用cgi编程过程中会遇到许多问题,例如汉字的显示和传递等。这就需要针对具体语言、具体问题具体解决。

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24790158/viewspace-1041679/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/24790158/viewspace-1041679/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值