主题:  COLDFUSION ASP PHP CGI PERL 比较

5DDC版主

职务:版主
等级:6
金币:10.0
发贴:3820
#12002/4/12 10:20:12
WEB应用程序设计技术面面观

  当你在互联网上冲浪的时侯,细心观察一下,不难发现网页的制作技术在不断进步,日新月异,从以往单调的HTML,到java小程序、javascript脚本、ActiveX控件的加入,使本来静态的网页变得“动”了起来。滚动字幕、日历、划动鼠标时出现的轨迹等等。还有近来许多网页上所使用的FLASH动画,令我们的WWW世界越来越精采。
现在我们来全面体验一下关于网页制作技术的服务端编程开发,也就是Web应用程序的设计。网页计数器,问卷调查系统,BBS论坛,聊天室虚拟社区,相信大家都并不陌生。Web应用程序真正地为网页提供的交互能力。不难想象,如果没有了这些给我们提供极大交互性的Web程序,那么浏览网页也就将会变得不再那么有趣了,而对于网站的商业价值也就似乎只能提供象报纸媒体一样的宣传效果,不能互动,不能在线收集用户意见,更别说实现网上的电子商务,在线购物,销售产品了。



静态页面VS动态页面
  在网站建设发展的初期,人们全部使用HTML语言设计网页。这些简单的HTML文档在被手工编辑完成之后保存在与INTERNET相连接的计算机内,任何连入互联网的用户都可以访问其中的信息,这种形式的页面被称做静态页面。由于HTML采用了超文本链接的方式,因此访问者可以很方便的从一个页面跳转到另一个页面,实现非线性浏览。正是由于这种全新的,更加合理、便捷的信息查询方式,促成了WEB空前快速的发展。随着互联网技术的不断发展以及网上信息呈几何级的增加,人们逐渐发现手工编写包含所有信息和内容的页面对人力和物力都是一种极大的浪费,而且几乎已经变的难以实现。此外,采用静态页面方式建立起来的站点只能够简单的根据用户的请求传送现有页面,而无法实现各种动态的交互功能。具体来说,静态页面在以下几个方面都存在明显的不足:

无法支持后台数据库。
随着网上信息量的增加,以及企业和个人希望通过网络发布产品和信息的需求的增强,人们越来越需要一种能够通过简单的WEB页面访问服务端后台数据库的方式。这是静态页面所远远不能实现的。

无法有效的对站点信息进行及时的更新。
用户如果希望对传统静态页面的内容和信息进行更新或修改的话,只能够采用逐一更改每个页面的方式。在互联网发展初期网上信息较少的时代,这种做法还是可以接受的。但是现在即使是网友们的个人站点也包含着各种各样的丰富内容,因此,如何及时、有效的更新页面信息也成为一个急待解决的问题。

无法实现动态显示效果。
所有的静态页面都是事先编写好的,是一成不变的,因此访问同一页面的用户看到的都将只是相同的内容,静态页面无法根据不同的用户做不同的页面显示。

为了克服静态页面的种种不足,人们将传统单机环境下的编程技术引入互联网络与WEB技术相结合,从而形成新的网络编程技术。网络编程技术通过在传统的静态页面中加入各种程序和逻辑控制,在网络的客户端和服务端实现了动态和个性化的交流与互动。人们将这种使用网络编程技术创建的页面称为动态页面。虽然开发Web应用程序的编程语言工具越来越多,而且功能越来越强,使用上也越来越简单,比如说现在流行的ASP(Active Server Pages)PHP等等。但作为老前辈的CGI(通用网关接口)方式的接口程序依然在这种服务器/客户端交互的Web应用程序中占主要地位。说到CGI,不可不谈到Perl了,接下来将为你详细逐一介绍。

 

网络编程技术的运行和实现机制

网络编程技术一般都是采用脚本语言作为编程语言。脚本语言具有和传统的编程语言相似的语法结构和风格,只是为了方便网络应用程序的设计,对传统的编程语言,如C,VC,VB等进行了简化。例如,脚本语言允许用户在使用变量之前不需要声明变量类型,变量类型直接由变量值决定,并且在使用过程中可以自由更改变量类型。

脚本语言的另外一个显著特点就是可以结合HTML语言共同使用。脚本语言与HTML语言具有非常好的兼容性,使用者可以直接在脚本代码中加入HTML标签,或者在HTML标签中加入脚本代码从而更好的实现页面控制,提供更加丰富的功能。举一个最为简单的例子,我们使用PHP结合HTML可以实现如下输出: 

<?

$name = John

PRINT “
”;

PRINT “Hello!$name”;

PRINT “
”;

PRINT “Welcome to the wonderful world of Server_Side Programming!”;

PRINT “
”;

?>

上述代码的输出结果为:

Hello!John

Welcome to the wonderful world of Server_Side Programming!

 

  为了区分同一页面中的脚本代码和HTML代码,不同的网络编程技术采用的了不同的定界符将脚本代码包含在各自的定界符内。例如,ASP代码使用的定界符为“<% %>”,PHP使用的定界符为“<? ?>”。COLDFUSION比较特殊,使用一种具有HTML标签风格的CFML技术,拥护自己特殊的标签,如“<cfoutput></cfoutput>”等。此外,使用不同网络编程技术编写的WEB页面都具有各自不同的后缀名。例如,ASP页面的后缀名为“.asp”,PHP页面的后缀名为“.php3”,COLDFUSION页面的后缀名“.cfm”。

  与后缀名为“.html”或“.htm”的HTML页面一样,使用不同技术编写的动态页面也被保存在WEB服务器内。当客户端用户向WEB服务器发出访问动态页面的请求时,WEB服务器将根据用户所访问页面的后缀名确定该页面所使用的网络编程技术,然后把该页面提交给相应的解释引擎;解释引擎扫描整个页面找到特定的定界符,并执行位于定界符内的脚本代码以实现不同的功能,如访问数据库,发送电子邮件,执行算术或逻辑运算等,最后把执行结果返回WEB服务器;最终,WEB服务器把解释引擎的执行结果连同页面上的HTML内容以及各种客户端脚本一同传送到客户端。虽然,客户端用户所接收到的页面与传统页面并没有任何区别,但是,实际上页面内容已经经过了服务端处理,完成了动态的个性化设置。

  

(一)CGI(通用网关接口)程序

  CGI是一种早期用于Web程序设计的接口标准,也就是说,你只要熟悉这套接口标准,就能使用任何平常你所熟悉的编程语言来编制CGI程序。比如说C,VB,DEPHI等等,当然,要使用CGI,也需要相应的Web服务器支持这一标准,常用的Web服务器软件,如著名的Apache,Web-site,Netscape Enterprise Server以及Microsoft的IIS等等,都能很好地支持各种CGI程序。

   CGI程序与Web服务器的交互主要有两种数据交换方式。在UNIX或Linux下,是通过标准输入/输出来实现的,因此你可以在程序中直接通过标准输入来取得客户端传来的请求和所传递的数据,然后在你的程序中对数据进行处理,比如说你需要编制一个留言部的CGI程序,不外乎就是从客户端提交的Form表单中取得用户的名字,电子邮件,以及留言内容,而服务端相应的CGI程序则从标准输入中取得用户所提交的内容,而通过服务器的环境变量,你可以获得大量的客户端资料,如客户端的IP地址,计算机名字,所使用的浏览器,如果需要使用服务器认证功能,环境变量还能为你提功客户端用户的登录名字以及口令等等。取得用户提交内容后,然后进行记录留言的操作,打开数据文件,把留言内容写入文件,然后通过标准输出把“留言成功”的HTML信息输出到客户端。

  而在windows平台下,CGI程序与Web服务器的数据交互则是通过profile文件来进行的,profile的格式如同win.ini的格式一样。当Web服务器接收到客户端的请求数据后,就把它们以key-value的INI文件格识保存至暂存文件以供CGI程序来接收。因此,开发windows CGI程序的第一步就是对数据文件进行拆解,如果是使用Perl的话,那么这一步可以免除了,因为PerlFor Windows的解释器已为您做好了这一步,你只需要如同在Unix下一样,把数据作为标准输入来处理就可以了,也就是说,只要在Perl解释器所支持的功能范围内,Unix下的Perl程序基本上可以不经修改地作为Windows CGI程序移植到windows平台运行,这是Perl非常受CGI程序员喜爱的原因之一。



Perl

  Perl(Practical Extraction and Report Language)文字分析报告语言,是现在编写CGI程序最受欢应的编程工具,如其名,它具有强大的字符串处理能力,特别适合用于分割处理客户端Form提交的数据串,而且可以与ColdFusion等多种流行的的Web数据库处理软件相结合,编写出功能强大的Web数据库程序,从目前我们所接触的Web应用程序来看,绝大都是离不开数据库支持的。因此开发CGI程序,使用Perl既可以达到跨服务平台,又能方便地处理和使用数据库,还有一点,Perl是一种由解释器直接解释执行的语言,不同于使用C或VB等需要预编译然后才能执行,当然对于这一点,本人个人认为好处坏处都有。

  如果您是perl的初学者,或需会被分割字串的通用模块吓坏了,一定会认为perl是很复杂的一种语言,那就错啦,perl的语法有点儿象C,而上面的通用模块,基本上是每个perl程序开头都需要使用的分割功能,你不用去担心,这个程序的中心就在下面那几句print语句,perl提供了很多内置的函数功能,如果您有兴趣去学习CGI的话,perl将会是个不错的选择。

  在windows上编写CGI,VB也是个不错的选择,易学易用,而且通过DAO数据库访问对象,也能方便地对数据库进行操作。由于windows下的CGI是通过profile传递表单数据,因此使用VB开发CGI程序前,您必须对profile进行处理,读入数据。这需要一定的编程技巧了,而你可以使用一个名为CGI32.BAS的接口模块来处理这份工作,再编写任何VB的CGI程序前,把它作为启动模块加入到你的项目工程里。它提供了丰富的函数功能,让你取得环境变量及客户端提交的数据。基本上只要熟悉输入与输出的处理,你就可以使用任何语言来编写CGI了,但不同语言各有长短,到底用什么来编写,那么就由您来决定了。CGI程序执行起来比较浪费服务器资源,每一个客户执行一个CGI程序,服务器上都需要启动一个进程进行处理。而且,当进程处理完毕后,将不再保留关于该进程序所有信息,也就是没有高速缓存信息的功能。这对于处理需要频繁请求的CGI程序,如网页计数器等的程序,将会影响服务器的性能。在windows或NT的环境下,渐渐地被ISAPI等其它的新技术所取代了,而在Unix下。
  perl还是十分流行,除了因为它本身上述的优点外,其它适合方便编写CGI的工具太少了。



ASP

ASP(Active Server Pages,即动态服务器页面)是由微软公司推出的一种网络编程技术。准确的说,ASP不能算做是一种编程语言,因为ASP没有提供自己专门的编程语言,而是允许用户使用包括VBSCRIPT,javascript等在内的许多已有的脚本语言编写ASP的应用程序。因此,ASP实际上应当是一种脚本语言的服务端编写环境。

ASP默认的脚本编写语言为VBSCRIPT,但是用户可以根据自己的需要进行选择。只要用户安装了相应的脚本引擎,就可以使用几乎目前所有流行的脚本语言编写ASP应用程序。

ASP吸收了当今许多流行的技术,如IIS,ACTIVEX,VBSCRIPT,ODBC等,是一种发展较为成熟的网络应用程序开发技术。借助于与微软传统产品良好的兼容性以及自身易学易用的特点,ASP一经出现就逐渐占据了网络编程技术的主流地位。

ASP的核心技术是对组件和对象技术的充分支持。通过使用ASP的组件和对象技术,用户可以直接使用ActiveX控件,调用对象方法和属性,以简单的方式实现强大的功能。

ASP中最为常用的对象和组件如下:
对象:

Request对象:可以通过表单,cookies,用户验证信息以及HTTP头等方式获取客户端数据。

Response对象:可以通过多种方式将服务端数据发送到客户端,如客户端屏幕显示,用户浏览页面的重定向以及在客户端创建cookies等。

Application对象:可以控制服务端应用程序的启动和终止状态,并保存整个应用程序过程中的信息。

Server对象:可以创建各种Server对象的实例以简化用户的操作。

Session对象:可以控制用户会话状态,并保存用户会话过程中的信息。

组件:
Ad Rotator(广告轮显组件):可以动态的随机显示多个预先设定的BANNER广告条。
Browser Capabilities(浏览器兼容组件):可以检测客户端使用的浏览器类型以及浏览器支持的插件功能。
Collaboration Data Objects(协作数据对象组件):可以与IIS的SMTP服务相结合实现电子邮件的发送和接受。
ADO(动态数据对象组件):可以通过ODBC实现对数据库的访问。

ColdFusion

  ColdFusion是Allaire公司在1995年推出的产品,虽然到现在只不过三、四年的时间,却已经被为数众多的人们所使用和喜爱。

  作为一种全新的网络开发技术,不得不承认COLDFUSION在设计和开发理念上的新颖和超前。COLDFUSION具有许多独特之处,如COLDFUSION包含一个集成的可视化开发环境,可以极大的方便和简化用户的开发过程。此外,COLDFUSION最成功,也是最吸引广大用户的一点就是COLDFUSION不需要用户具有任何使用编程语言的背景知识。COLDFUSION采用一种被称做CFML(ColdFusion Markup Language,即ColdFusion标识语言)的技术。CFML技术继承了HTML语言的风格,用户完全可以象使用HTML标签一样使用功能强大,简单直观的CFML标签来完成各种复杂的操作。COLDFUSION为方便用户的使用,不仅提供了数量众多的功能标签,而且允许用户根据自己的需要创建并使用各种的定制标签。可以说,只要掌握了各种CFML标签,也就等于掌握了COLDFUSION技术的精髓。

  举例来说,如果用户希望通过COLDFUSION技术发送电子邮件的话,只要使用<CFMAIL>标签即可。具体如下:


<CFMAIL

TO= “recipient1@address, recipient2@address”

FROM= “sender@address”

CC= “recipient3@address”

SUBJECT= “theme”>

</CFMAIL>

 

除了可以用于发送电子邮件的<CFMAIL>标签外,COLDFUSION中较为常用的标签还有:

<CFQUERY>标签:用于设定数据库DNS,执行SQL语句。

<CFINPUT>标签:用于数据的输入,此外还可以提供对所输入数值有效性的验证。

<CFOUTPUT>标签:用于数值,字符串,表达式等的输出。

<CFIF>和<CFELSE>标签:分别相当于传统编程语言中的IF和ELSE,用于控制程序流程。

PHP

  PHP(Hypertext Preprocessor,即超文本预处理器)是当今INTERNET上最为火热的脚本语言。PHP最初由Rasmus Lerdorf发明,后来又经过一个六人小组重新编写,发展到现在最新版本为PHP 4.0 BETA3。

  PHP在很大程度上综合了Perl,Java和C语言的精华,在语法架构上继承了C语言的风格。作为一种新的脚本语言,PHP在确保易学易用的基础上,能够提供各种强大的功能。不同于其它网络编程技术,PHP象LINUX,PERL一样,是一种自由软件。这就使得PHP更加灵活,人们可以不断的为PHP增加新的功能,从而使PHP永远走在同类技术的前端。

  相对于ASP,COLDFUSION等其它网络编程技术,PHP本身就是一种脚本语言,所以,如果用户希望真正掌握PHP,就应当把学习重点放在熟悉和掌握PHP的语法结构和功能上。

举例来说,使用PHP实现一个简单的逻辑判断的过程如下:

 

if ($user_count > 200) {

print “The site is busy right now!”;}

elseif ($user_count > 100) {

print “The site is active right now!”;

else {

print “The site is lonely - only $user_count user logged on.”;

}

 

网络编程技术的主要应用和功能

  在对主要的网络编程技术有了总体上的了解之后,我们就来结合具体实例看一下如何通过使用各种网络编程技术实现不同的应用和功能。

访问后台数据库

  对后台数据库的支持可以说是目前网络编程技术发展的趋势和最重要的应用之一。一般来说,网络编程技术都是通过提供对ODBC的支持,使用SQL标准查询语句实现对当前各种主流数据库的访问,查询,和更新等操作。

设置Cookie

  相信经常上网浏览的用户一定都听说过Cookie。Cookie是由服务端在客户端设定并保存在客户端的特殊信息。也许有人会认为使用Cookie会泄露个人信息,但是无论如何我们都应当承认Cookie在用户身份识别,个性化信息的提供以及用户会话过程的管理等方面所具有的重要作用。正因为如此,目前的网络编程技术都提供了强大的Cookie设置功能。以PHP为例,PHP提供了专门的setcookie()函数用于对客户端Cookie的设置。具体格式如下:

<?php

setcookie(‘name’, ‘jeff’, $y2k, ‘~/myhome’, ‘.domain.com’ 1);

?>

如例所示,setcookie()函数共有6个参数,分别用于设定Cookie的名称,值,有效期限,允许访问Cookie值的页面的目录和域,以及限制只向采用安全连接协议(如SSL)的服务器返回Cookie值。

发送电子邮件

  现在,越来越多的动态站点都提供了可以根据用户输入信息自动发送电子邮件的功能。我们在介绍COLDFUSION时曾经举例说明了如何通过COLDFUSION的<CFMAIL>标签自动发送邮件,下面我们再以PHP为例说明如何通过PHP实现自动发送电子邮件的功能。

首先,我们编辑如下表单,用于将用户的输入数据传送到email.php3文件。

<FORM ACTION= “email.php3” METHOD= “POST”>

Your name:


<INPUT TYPE= “text” NAME= “name” SIZE=20 >< BR >

Your email address:


<INPUT TYPE= “text” NAME= “email” SIZE=20>


<INPUT TYPE= “submit” value= “Send it!”>

</FORM>

然后,我们只需要在email.php3文件中输入如下代码就可以实现根据用户输入信息自动向用户发送回复邮件的功能。

<?

mail(“$email”, “Thanks!”,“$name Thank you for your interest!”);

?>

PHP中用于发送电子邮件的MAIL()函数有三个常用参数,分别用于设定收件人地址,信件主题以及信件内容。

   . 创建模板

为了实现对含有大量信息的站点的快速更新和修改,不同的网络编程技术都提供了各自的模板创建功能。通过把某个页面或某些信息设置为模板,可以在整个站点内重复使用,同时只需要对模板进行一次性的修改就可以全部更新整个站点内的相关页面和信息。

以COLDFUSION为例,如果我们希望在站点所有页面的底部加入版权声明的话,可以首先创建一个名为COPYRIGHT.cfm的文件,并在该文件中输入相应的版权声明内容。然后,我们可以在所有需要加入版权声明的页面内直接使用<cf_COPYRIGHT>这一用户自定义标签,实现对版权信息的调用。

 

网络编程技术的发展和趋势

  互联网在世界范围内的发展是相当迅速的,可以称得上“网上一月,网下一年”。虽然我们无法对日新月异的技术做出准确的判断和估计,但是根据目前网络编程技术的发展以及用户的需求,以下几个方面将会在今后网络编程技术的发展中占据重要地位系统集成更紧密。

  网络编程技术应用程序的实现离不开WEB服务器的协同运作。目前,绝大多数的网络编程技术都要求使用者事先安装各自的解释引擎(或称作服务器),并针对平台所使用的WEB服务器进行优化设置。这一方面增加了用户的工作量,同时还可能由于不正确的安装和设置引起兼容性和系统运行的错误。在与WEB服务器的集成方面,ASP不可置疑的占据绝对优势,从开始推广之初,微软就将ASP作为其WEB服务器产品IIS的内置组件,从而为用户直接使用ASP带来了极大的方便。因此,无论是PHP还是COLDFUSION如果要想在今后的竞争中立于不败之地的话,一定要加强各自与服务端WEB服务器的紧密集成,为用户提供更加方便和直接的服务。

  .功能更完善

  正是因为人们对互联网上更加个性化,交互性更强的浏览方式的需求促成了网络编程技术的产生和发展,所以,随着今后互联网的发展以及人们对新的技术和功能的需求,网络编程技术一定会逐渐的完善,提供的功能也一定会更加丰富。单纯就功能的增加和完善来说,PHP今后的发展潜力巨大。因为PHP是自由软件,因此可以不断的吸收和采纳所有使用者的建议和想法,从而不断的推出新的功能以满足用户新的需求。

  .运行更快速,更稳定

  随着网络的普及和上网人数的增加,人们要求新一代网站必须能够提供丰富的内容和快速的响应速度。这就决定了作为动态页面处理的关键环节的网络编程技术的解释引擎(或称作服务器)具有更加高效的处理速度和更加可靠的稳定保障。以PHP为例,在最新的PHP 4.0的测试版中采用了新的Zend引擎,从而可以使整个PHP的性能提高几十倍。

  .用户界面更加友好

  从根本上说,任何新技术的出现都是为了将人们从繁重的工作中解放出来,以更加简单的方式取代复杂的传统模式。网络编程技术也不例外。哪一种技术能够让用户以最简单的方式实现最复杂的功能,哪一种技术就能够获得更多用户的支持。从简单易用方面来说,COLDFUSION具有先天的优势。COLDFUSION不需要使用者具有任何编程知识的背景,而是非常巧妙的使用了具有HTML风格的CFML技术,从而使用户可以象使用HTML标签一样,实现复杂的编程功能。相信其它技术在今后的发展过程中也一定会不断的降低对使用者的技术用求,提供更加大众化的服务。

编辑历史:[此帖最近一次被 allinhands 编辑过(编辑时间:2005-12-20 13:50:49)]


lirui

职务:普通成员
等级:1
金币:0.0
发贴:22
#22002/4/12 15:47:44
COLDFUSION究竟有什么过人之处能够吸引PHP,ASP,JSP的用户来学他呢?



5DDC版主

职务:版主
等级:6
金币:10.0
发贴:3820
#32002/4/12 16:36:15
更短的开发周期,更加成熟的c/s结构,Coldfusion可是比asp和php出现的早呀?cfml 95年就可以在hp_UX上跑了!更加好的平台移植性。cfml很难吸引jsp的用户,因为jsp都是较为成熟的用户,并且cfml也可以算为是jsp的一种,因为内核是相同的。尤其是在企业领域,cfm拥有最为完美的企业c/s架构结构,在企业内部系统架构中使用最多的就是cfml了,也最成熟,其次就是jsp,廉价的c/s企业系统使用asp较多!php是用最少,因为开放的代码和结构企业并不认同,免费对于企业来说毫无意义,但是php和asp在自由环境用使用最多!

如果你想以后搞c/s ro b/s 的企业系统选择cfml、jsp是最好的!如果是想搞免费程序那么asp/php是最好的!不同的程序不同的用处!