Network 版 (精华区)

发信人: yunguo (~@_@~liuliu), 信区: Network
标  题: CGI与WWW服务中的编程
发信站: 紫 丁 香 (Sat Oct  3 19:40:59 1998), 转信

作  家: diming (还是丁丁好) 


    当前, WWW 应用正处于蓬勃发展的阶段, 许多单位或部门正计划把自己的相关信息
放入WWW服务器, 然而, 由于WWW编程中用到的HTML语言, 只适用于静态文本的编程, 如
果要与数据库相连, 进行数据库查询等, 就必须编写专门的cgi程序。

一、WWW服务的两种形式    从技术的角度来说, WWW服务有两种形式: 静态访问和动态
访问。静态访问是指WWW服务器将预先存放的HTML文件原封不动地返回给用户。动态访问
是指用户发出的请求含有动态生成过程及其参数, WWW服务器接受用户的请求后,将用户
的请求通告相应的的接口传给后台的其它服务进程, 有后台的服务进程处理用户的请求
, 生成相应的结果, 返回给WWW服务器, 由WWW服务器将后台处理的结果返回给用户。因
此,用户而已通过统一的访问界面(如NETSCPAE)访问事先放置的静态信息和动态生成的
数据库和应用信息。

二、WEB成为交互式每体的两种机制

    使WEB成为交互式每体的两种机制使表格和网关。表格可以让您的读者把信息反馈给
您, 或反馈给您所建立的处理这些信息的程序, 这样可以形成双向和交互式通信。但是
所返回的表格只是问题的一个方面,要处理所有返回的信息,必须建立一个能接受读者
流览器发出信息的程序,这些程序叫做通用网关接口(Common Gateway InterFace),即CGI
,或叫做CGI程序.

三、CGI程序的实质
    CGI变成,可根据实际情况(服务器提供的接口,实际需求和程序员经验等)选择变成的
语言,如C/C++、PERL、TCL、Anyy Unix shell、VB、Applescrippt。如果选用C/C++等语
言,必须编译成可执行文件; 如果选用PERL等解释语言,服务器上必须安装相应的解释器
并完成相应的文件联结。
    服务器使用环境变量(执行CGI程序时的设置)传输有关的请求信息到CGI程序.这些环
境变量包括服务器的名字、CGI和服务器使用协议的版本号、客户端的IP地址和域名地址
、客户端的请求方式、请求内容及编码方式、合法性访问信息以及用户的输入信息等。

四、CGI在编程在NETWARE WEB SERVER环境中的一个实例
    1、NETWARE WEB SERVER中RCGI Low-level InterFace Report的环境变量值:

    Server_software=Novell HTTP Server/2.0r11(NLM)
    Server_name=168.1.100.2
    Gateway_interface=RCGI/1.0
    Server_protocol=HTTP/1.0
    Server_port=80
    http_accept=*/*,image/gif,image/x-xbitmap,image/jpeg
    path_info=/
    path_translated=sys:/web/docs/
    Remote_host=168.1.100.66
    Remote_addr=168.1.100.66

    2、CGI编程要实现的功能
    某单位为了在本系统内的Intranet网上实现自动生成HTML文档,自动产生导航链接点
,以使日常工作中大量文件以WWW信息的形式向本单位提供,通红司避免人手工进行大量的
HTML文档生成,达到既要保证大量信息每天的即使更新, 又要减少工作人员的数量几劳动
程度的目的。
    3、CGI程序实现上述功能
    本CGI程序的编写使用PERL语言实现的,在NETWARE WEB SERVER环境下,PERL RCGI文件
存放在SYS:WEB\SCRIPTS\PERL目录中,故本程序存放在这一缺省目录中。

 require("cgi-lib.pl");
 print&PrintHeader;
 & readparse;
 $server="http://".$ENV{"SERVER_NAME"}."/";
 $v1=$in{"item"};
 $v2=$in{"month"};
 $v3=$in{"day"};
 $v4="rcd";
 #print html header
 print"<html>";
 print"<head> <title> 新华社信息分类索引</title></head>\n<body>";
 print"<img src=\"/images/new.gif\" align=left border=0>";
 print"<font size=+3><center>信息索引</center></font>\n"
 print"<hr size=4 widdth=90%>\n";
 $v8="/";
 $v9="XINHUA/";
 $v10="<a href=\"";
 $v11="\">Display the file:";
 $v12="</a> <p>";
 $filename="$ path $v1 $v8 $v1 $v4.$v2 $v3";
 open(FILE,"$filename");
 @LINES=<FILE>
 close(FILE);
 $SIZE=@LINES;
 $server="http://".$ENV{"SERVER_NAME"}."/perl/type.pl?fn=";
 #$path="./DOCS/XINHUA/";
 $j=0;
 for($i=0;$i<=$size;$i++) 
   {
   $_=$lines[$i];
   $j=$i+1;
   $filename="$path$v11$v8$v1$v5$j.$v2$v3";
   $link="$server$filename;
   if($j<110 
     {
     $v5="00"
     $filename="$path$v1$v8$v1$v5$vj.$v2$v3";
     $link="$server$filename";
     print"<a href=\"$link\">$_</a><br>\n";
     }
   else 
     {
     if($j<100)
       {
       $v5="0"'
       $filename="$path$v1$v8$v1$v5$vj.$v2$v3";
       $link="$server$filename";
       print"<a href=\"$link\">$_</a><br>\n";
       }
      else 
        {
        $v5=" ";
        printf"<a href=\"$link\">$_</a><br>\n";
        }
     }
   }
#print tail of html
print"<hr>";
print"<pre><font size=+1><i>使用顶部菜单中 Go/Back 返回前
   一页面</i></font></pre>";
print"</body></html>\n";



    当用户端通过浏览器返回一个信息,如表格、数据库查询等,在本程序中返回的是浏
览相关的主题,这个信息触发本CGI程序,于是服务器后台进行相关处理,将处理结果送给用
户端,在用户看来,所查询的信息就是早已生成的HTML文档,用户丝毫觉察不出来是通过CGI
接口返回的自动生成的HTML文档.

--
※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: 202.118.233.18]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:4.694毫秒