Chinaunix首页 | 论坛 | 博客
  • 博客访问: 656665
  • 博文数量: 134
  • 博客积分: 3158
  • 博客等级: 中校
  • 技术积分: 1617
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-30 22:36
文章分类

全部博文(134)

文章存档

2012年(2)

2011年(28)

2010年(68)

2009年(35)

2008年(1)

我的朋友

分类:

2011-04-02 09:42:48

CGI是什么

CGICommonGatewayInterface 的简称。是一个用于定Web服务器与外部程序之间通信方式的标准,使得外部程序能生成HTML、图像或者其他内容,而服务器处理的方式与那些非外部程序生成的HTML、图像或其他内容的处理方式是相同的。因此,CGI程序册仅使你能生成表态内容而能生动态内容。使用CGI的原因在于它是一个定义良好并被广泛支持的标准,没有CGI就不可能实现动态的Web页面,除非使用一些服务器中提供的特殊方法(如今,也有除CGI之外的其他技术逐渐在成为标准)。

 

CGI主要的功能是在WWW环境下,藉由从客户端传递一些讯息给WWWServer,再由WWWServer去启动所指定的程式码来完成特定的工作。所以更明确的说,CGI仅是在WWWServer上可执行的程式码,而她的工作就是控制讯息要求而且产生并传回所需的文件。使用CGI,你的Server可以读取并显示在客户端无法读取的格式(像是SQLDataBase)。而且可以像闸道(Gateway)一样,在伺服端和客户端之间,产生客户端所需要的讯息。基本上,在此种主从式(Client/Server)的环境之下,其IPC(InterProcess Communication)的协定是利用讯息传递及记忆体分享(环境变数)的方式来完成。CGI有其特定的写法及规格,必须遵守其原则,方可达到主从端资讯交流的目的。

 

 

什么是CGI

1. 定义:

CGI(Common Gateway Interface)HTTP服务器与你的或其它机器

上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。

 

2. 功能:

绝大多数的CGI程序被用来解释处理杰自表单的输入信息,并在服

务器产生相应的处理,或将相应的信息反馈给浏览器。CGI程序使

网页具有交互功能。

 

3. 运行环境:

CGI程序在UNIX操作系统上CERNNCSA格式的服务器上运行。

在其它操作系统(如:windows NTwindows95等)的服务器上

也广泛地使用CGI程序,同时它也适用于各种类型机器。

 

4. CGI处理步骤:

⑴通过Internet把用户请求送到服务器。

⑵服务器接收用户请求并交给CGI程序处理。

CGI程序把处理结果传送给服务器。

⑷服务器把结果送回到用户。

 

5. CGI服务器配置:

CGI程序不是放在服务器上就能顺利运行,如果要想使其在服务器

上顺利的运行并准确的处理用户的请求,则须对所使用的服务器进

行必要的设置。

配置:根据所使用的服务器类型以及它的设置把CGI程序放在某一

特定的目录中或使其带有特定的扩展名。

CREN格式服务器的配置:

编辑CREN格式服务器的配置文件通常为/etc/httpd.conf/

在文件中加入:Exec cgi-bin/*/home/www/cgi-bin/*.exec

命令中出现的第一个参数cgi-bin/*指出了在URL中出现的目录

名字,并表示它出

现在系统主机后的第一个目录中,如:

命令中的第二个参数表示CGI程序目录放在系统中的真实路径。

CGI目录除了可以点网络文件放在同一目录中,也可以放在系统

的其它目录中,但必须保证在你的系统中也具有同样的目录。在

对服务器完成设置后,须重新启动服务器(除非HTTP服务器是用

inetd启动的)。

NCSA格式服务器的配置

NCSA格式服务器上有两种方法进行设置:

①在srm.conf文件(通常在conf目录下)中加入:

Script Alias/cgi-bin/cgi-bin/

Script Alias命令指出某一目录下的文件是可执行程序,且这

个命令是用来执行

这些程序的;此命令的两个参数与CERN格式服务器中的Exec

令的参数的含意一样。

②在srm.conf文件加入:

Add type application/x-httpd-cgi.cgi

此命令表示在服务器上增加了一种新的文件类型,其后第一个

参数为CGI程序的MIME类型,第二个参数是文件的扩展名,表

示以这一扩展名为扩展名的文件是CGI程序。

在用上述方法之一设置服务器后,都得重新启动服务器(除非

HTTP服务器是用inetd启动的)。

 

CGI是什么

 

好了,现在我们来说到底什么是CGICommon Gate Intergace听起来让人有些专业, 我们就管它叫CGI好了。在物理上,CGI是一段程序,它运行在Server上,提供同客户段 Html页面的接口。这样说大概还不好理解。那么我们看一个实际例子:现在的个人主页上大部分都有一个留言本。留言本的工作是这样的:先由用户在客户段输入一些信息,如名字之类的东西。

 

接着用户按一下“留言”(到目前为止工作都在客户端),浏览器把这些信息传送到服务器的CGI 目录下特定的cgi程序中,于是cgi程序在服务器上按照预定的方法进行处理。在本例中就是把用户提交的信息存入指定的文件中。然后cgi程序给客户端发送一个信息,表示请求的任务已经结束。此时用户在浏览器里将看到“留言结束”的字样。整个过程结束。

 

 

既然CGI是一种程序,自然需要用编程语言来写。你可以用任何一种你熟悉的高级语言, C,C++,C shellVB。值得特别指出的,有一种叫Perl的语言。其前身是属于Unix专用的高 级语言,其具有强大的字符串处理能力而成为现在写CGI,特别是表单类程序的首选。最近它已经有了Window95,和winnt版本。你可以在搜索程序里找到在那里下载它。 VBMs的杀手锏,从目前的情况看,微软公司正试图使VB无所不能。自然也包括在Internet 请各位注意,VB开发的程序只能在windows平台上被执行,所以它有一定局限。 C Shell,经典的语言。可惜能做的事情不多,而且必须在Unix平台下。 C,C++,正真的无所不能。可是在写CGI的时候显得非常难以掌握。特别是缺乏可以灵活使用的字符串处理函数。对程序员的要求也比较高,维护复杂。

 

 

最后要提醒各位,因为CGIServerClinet的接口,所以对于不同的Server,CGI程序的移值是一个很复杂的问题。一般对于不同的Server,决没有两个可以互相通用的CGI。实际上 这就是CGI程序最复杂的地方。

 

cgi:common gate interface ,通用网关接口。

以前网站上的动态功能都是用CGI实现,而写CGI的语言有很多,C也行。最流行的是perp

后来sun公司推出了servlet基本上取代了CGI

后来又推出了JSP试图取代servlet

所以呢,如果不想学深的话,只学JSP就行(要先学JAVA/

否则学完JSP再学SERVLET

CGI就不用了,已基本被淘汰。

 
 
与传统的CGI和许多其他类似CGI的技术相比,Java Servlet具有更高的效率,更容易使用,功能更强大,具有更好的可移植性,更节省投资。在未来的技术发展过程中,Servlet有可能彻底取代CGI。
  在传统的CGI中,每个请求都要启动一个新的进程,如果CGI程序本身的执行时间较短,启动进程所需要的开销很可能反而超过实际执行时间。而在Servlet中,每个请求由一个轻量级的Java线程处理(而不是重量级的操作系统进程)。
  在传统CGI中,如果有N个并发的对同一CGI程序的请求,则该CGI程序的代码在内存中重复装载了N次;而对于Servlet,处理请求的是N个线程,只需要一份Servlet类代码。在性能优化方面,Servlet也比CGI有着更多的选择。
  * 方便
  Servlet提供了大量的实用工具例程,例如自动地解析和解码HTML表单数据、读取和设置HTTP头、处理Cookie、跟踪会话状态等。
  * 功能强大
  在Servlet中,许多使用传统CGI程序很难完成的任务都可以轻松地完成。例如,Servlet能够直接和Web服务器交互,而普通的CGI程序不能。Servlet还能够在各个程序之间共享数据,使得数据库连接池之类的功能很容易实现。
  * 可移植性好
  Servlet用Java编写,Servlet API具有完善的标准。因此,为IPlanet Enterprise Server写的Servlet无需任何实质上的改动即可移植到Apache、Microsoft IIS或者WebStar。几乎所有的主流服务器都直接或通过插件支持Servlet。
  * 节省投资
   不仅有许多廉价甚至免费的Web服务器可供个人或小规模网站使用,而且对于现有的服务器,如果它不支持Servlet的话,要加上这部分功能也往往是免费的(或只需要极少的投资)。
阅读(27383) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~