当前位置:Linux教程 - Php - 动态网页技术--CGI:ASP:JSP:PHP

动态网页技术--CGI:ASP:JSP:PHP



         阿济·yesky

    稍为对网络有点熟悉的人都知道,HTML是编制网页的基本语言,但它只能用于静态的网页。当今的Web已经不再是早期的静态信息发布平台,它已被赋以更丰富的内涵。现在,我们不仅需要Web提供所需的信息,还需要提供可个性化搜索的功能,可以收发email,可以进行网上销售,可以从事电子商务等等。为实现以上功能必须使用更新的网络编程技术制作动态网页。所谓动态,指的是,按照访问者的不同需要,对访问者输入的信息作出不同的响应,提供响应的信息。笔者根据自己的实际使用经历,写下心得感受,并举例说明。
      动态网页技术的原理是:使用不同技术编写的动态页面保存在WEB服务器内,当客户端用户向WEB服务器发出访问动态页面的请求时,WEB服务器将根据用户所访问页面的后缀名确定该页面所使用的网络编程技术,然后把该页面提交给相应的解释引擎;解释引擎扫描整个页面找到特定的定界符,并执行位于定界符内的脚本代码以实现不同的功能,如访问数据库,发送电子邮件,执行算术或逻辑运算等,最后把执行结果返回WEB服务器;最终,WEB服务器把解释引擎的执行结果连同页面上的HTML内容以及各种客户端脚本一同传送到客户端。虽然,客户端用户所接收到的页面与传统页面并没有任何区别,但是,实际上页面内容已经经过了服务端处理,完成了动态的个性化设置。目前实现动态网页主要有以下4种技术。
    1.CGI技术
      CGI ---Common Gateway Interface,公用网关接口。它可以称之为一种机制。因此您可以使用不同的程序编写适合的CGI程序,如Visual Basic、Delphi或C/C++等,您将已经写好的程序放在WEB服务器的计算机上运行,再将其运行结果通过WEB服务器传输到客户端的浏览器上。我们通过CGI建立WEB页面与脚本程序之间的联系,并且可以利用脚本程序来处理访问者输入的信息并据此作出响应。事实上,这样的编制方式比较困难而且效率低下,因为你每一次修改程序都必须重新将CGI程序编译成可执行文件。
      最常用于编写CGI技术的语言是Perl(Practical Extraction and Report Language,文字分析报告语言),它具有强大的字符串处理能力,特别适合用于分割处理客户端Form提交的数据串;用它来编写的程序后缀为.pl。
    我们来看个简单的例子hello.pl:
    #!/usr/bin/perl
    $Hello=\"Hello,CGI\"; #字符串变量;
    $Time=2;
    print $Hello,\" for the\",$Time,\"nd time!\",\"\\n\"; #输出一句话;
    # End hello.pl
    输出结果:
    Hello,CGI for the 2nd time!
      程序中第一个注释行具有特殊的含义,它是UNIX系统中shell的一条指令,表示在命令行上运行其后的命令。第一行是必需的,/usr/bin/perl提供了Perl解释器的完整路径名。例中的井号(#)为Perl语言中的注释字符。P erl技术参考站点:http://www.perl.com
      CGI调用数据库需要安装DBI----DataBase Interface,即数据库接口技术。DBI提供了基于Perl的标准界面连接到各种不同的SQL引擎上。各种数据库的DBI模块可在此找到:http://www.perl.com/CPAN-local/modules/by-module/DBI/。以下是连接ORACLE数据库的一个例子:
    use DBI; #调用DBI;
    #以下三项是数据库名,调用数据库的用户名,密码;
    $dbname=\"dbi:Oracle:DBName\";
    $user=\"user\";
    $pass=\"pass\";

    #联系数据库;
    $dbh=DBI->connect($dbname,$user,$pss) || die \"Error Connecting to database \\n\";

    #数据库查询;
    $tag=$dbh->prepare(\"SELECT * FROM 表名\");
    $tag->execute; #执行查询;
    die \"Error:$DBI::err\\n\" if DBI::err; #出错判断;
    my($col1,$col2); #定义只在本程序中(用my来表示)有效的两个变量;
    while(($col1,$col2)=$tag->fetchrow) {
    print \"Column 1:$col1\\n\";
    print \"Column 2:$col2\\n\";
    }
    $dbh->disconnect or warn \"Disconnection failed \\n\"; #断开与数据库的连接;
    CGI技术已经发展的很成熟了,功能强大,例如SINA,NETEASE,SOHU等网站的搜索引擎,用的就是CGI技术。
    2.ASP技术

      Active Server Pages即ASP是微软开发的一种类似HTML(Hypertext Markup Language超文本标识语言)、Script(脚本)与CGI(Common
    GAteway Interface 通用网关接口)的结合体,它没有提供自己专门的编程语言,而是允许用户使用包括VBSCRIPT,JAVASCRIPT等在内的许多已有的脚本语言编写ASP的应用程序。ASP的程序编制比HTML更方便且更有灵活性。它是在WEB服务器端运行,运行后再将运行结果以HTML格式传送至客户端的浏览器。因此ASP与一般的脚本语言相比,要安全的多。

      对于广大网页技术爱好者来说,ASP比CGI具有的最大好处是可以包含HTML标签,也可以直接存取数据库及使用无限扩充的ActiveX控件,因此在程序编制上要比HTML方便而且更富有灵活性。

      ASP吸收了当今许多流行的技术,如IIS,ACTIVEX,VBSCRIPT,ODBC等,是一种发展较为成熟的网络应用程序开发技术;其核心技术是对组件和对象技术的充分支持。通过使用ASP的组件和对象技术,用户可以直接使用ActiveX控件,调用对象方法和属性,以简单的方式实现强大的功能。可以在此找到更详细的信息:http://www.activeserverpages.com

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

      Request对象:用来连接客户端的Web页(.htm文件)和服务器的Web页(.asp文件),可以获取客户端数据,也可以交换两者之间的数据。

      Response对象:用于将服务端数据发送到客户端,可通过在客户端浏览器显示,用户浏览页面的重定向以及在客户端创建cookies等方式进行。该功能与Request对象的功能恰恰相反。

      Server对象:许多高级功能都靠它来完成;它可以创建各种Server对象的实例以简化用户的操作。

      Application对象:它是个应用程序级的对象,用来在所有用户间共享信息,并可以Web应用程序运行期间持久地保持数据。同时如果不加以限制,所有客户都可以访问这个对象。

      Session对象:它为每个访问者提供一个标识;Session可以用来存储访问者的一些喜好,可以跟踪访问者的的习惯。在购物网站中,Session常用于创建购物车(Shopping
    Cart)。

      Browser Capabilities(浏览器性能组件):可以确切的描述用户使用的浏览器类型、版本以及浏览器支持的插件功能。使用此组件能正确地裁剪出自己的ASP文件输出,使得ASP文件适合于用户的浏览器,并可以根据检测出的浏览器的类型来显示不同的主页。

      FileSystem Objects(文件访问组件):允许你访问文件系统,处理文件。

      ADO(数据库访问组件):它是最有用的组件;可以通过ODBC实现对数据库的访问。

      Ad Rotator(广告轮显组件):专门为出租广告空间的站点设计的,可以动态的随机显示多个预先设定的BANNER广告条。

    以下是ASP通过ADO组件调用数据库并输出的例子:

    <%@ LANGUAGE=\"VBSCRIPT\"%>









    使用ADO的例子





    所查询的书名为:


    <%

    Dim dataconn

    Dim datardset

    Set dataconn=Sever.CreateObject(\"ADODB.Connection\")

    Set datardset=Sever.CreateObject(\"ADODB.Recordset\")

    dataconn.Open \"library\",\"sa\",\"\" \"数据库为library

    datardset.Open \"SELECT name FROM book\",dataconn \"查询表book

    %>

    <%

    Do While Not datardset.EOF

    %>

    <%=datardset(\"name\") %>


    <%

    datardset.MoveNext

    Loop

    %>







      ASP技术有一个缺陷:它基本上是局限于微软的操作系统平台之上。ASP主要工作环境是微软的IIS应用程序结构,又因Activex对象具有平台特性,所以ASP技术不能很容易地实现在跨平台的WEB服务器的工作。



    3.JSP 技术

    让我们先看一个小程序HelloJsp.jsp:





    JSP小程序





    <%

    String Str = \"JSP小程序 \";

    out.print(\"Hello JSP!\");

    %>

    <%=Str%>







      是不是很象ASP程序?但是,它却是另一种开始流行的技术---JSP。上面的程序是最基本、最简单的的例子。 JSP(Java Server Pages)是由Sun
    Microsystem公司于1999/6推出的新技术,是基于Java Servlet以及整个java体系的Web开发技术。利用这一技术可以建立先进、安全和跨平台的动态网站。

      总的来讲,Java Sever Pages(JSP)和 微软的Active Sever Pages(ASP)在技术方面有许多相似之处。两者都是为基于WEB应用实现动态交互网页制作提供的技术环境支持。同等程度上来讲,两者都能够为程序开发人员提供实现应用程序的编制与自带组件设计网页从逻辑上分离的技术。而且两者都能够替代CGI使网站建设与发展变的较为简单与快捷。不过两者是来源于不同的技术规范组织,其实现的基础:WEB服务器平台要求不相同。
    ASP一般只应用于Windows NT/2000平台,而JSP则可以不加修改地在85%以上的Web Server上运行,其中包括了NT的系统,符合\"write
    once,run anywhere\"(\"一次编写,多平台运行\")的java标准,实现平台和服务器的独立性,而且基于JSP技术的应用程序比基于ASP的应用程序易于维护和管理。


    JSP技术具有以下的优点:

    (1).将内容的生成和显示进行分离

      使用JSP技术,Web页面开发人员可以使用HTML或者XML标识来设计和格式化最终页面。使用JSP标识或者小脚本来生成页面上的动态内容(内容是根据请求来变化的,例如请求帐户信息或者特定的一瓶酒的价格)。生成内容的逻辑被封装在标识和JavaBeans组件中,并且捆绑在小脚本中,所有的脚本在服务器端运行。如果核心逻辑被封装在标识和Beans中,那么其他人,如Web管理人员和页面设计者,能够编辑和使用JSP页面,而不影响内容的生成。


      在服务器端,JSP引擎解释JSP标识和小脚本,生成所请求的内容(例如,通过访问JavaBeans组件,使用JDBCTM技术访问数据库,或者包含文件),并且将结果以HTML(或者XML)页面的形式发送回浏览器。这有助于作者保护自己的代码,而又保证任何基于HTML的Web浏览器的完全可用性。

    (2)强调可重用的组件

      绝大多数JSP页面依赖于可重用的,跨平台的组件(JavaBeans或者Enterprise JavaBeansTM)组件)来执行应用程序所要求的更为复杂的处理。开发人员能够共享和交换执行普通操作的组件,或者使得这些组件为更多的使用者或者客户团体所使用。基于组件的方法加速了总体开发过程,并且使得各种组织在他们现有的技能和优化结果的开发努力中得到平衡。

    (3)采用标识简化页面开发

      Web页面开发人员不会都是熟悉脚本语言的编程人员。JavaServer Page技术封装了许多功能,这些功能是在易用的、与JSP相关的XML标识中进行动态内容生成所需要的。标准的JSP标识能够访问和实例化JavaBeans组件,设置或者检索组件属性,下载Applet,以及执行用其他方法更难于编码和耗时的功能。

    (4)JSP的适应平台更广

      这是JSP比ASP的优越之处。几乎所有平台都支持Java,JSP+JavaBean可以在所有平台下通行无阻。NT下IIS通过一个插件,例如JRUN(http:
    //www3.allaire.com/products/jrun/)或者ServletExec(http://www.newatlanta.com/),就能支持JSP。著名的Web服务器Apache已经能够支持JSP。由于Apache广泛应用在NT、Unix和Linux上,因此JSP有更广泛的运行平台。虽然现在NT操作系统占了很大的市场份额,但是在服务器方面Unix的优势仍然很大,而新崛起的Linux更是来势不小。从一个平台移植到另外一个平台,JSP和JavaBean甚至不用重新编译,因为Java字节码都是标准的与平台无关的。

      Java中连接数据库的技术是JDBC(Java Database Connectivity)。很多数据库系统带有JDBC驱动程序,Java程序就通过JDBC驱动程序与数据库相连,执行查询、提取数据等等操作。Sun公司还开发了JDBC-ODBC
    bridge,用此技术Java程序就可以访问带有ODBC驱动程序的数据库,目前大多数数据库系统都带有ODBC驱动程序,所以Java程序能访问诸如Oracle、Sybase、MS
    SQL Server和MS Access等数据库。


    4.PHP技术

      笔者对PHP最为熟悉,也用的最多。PHP----Hypertext Preprocessor(超文本预处理器),是一种易于学习和使用的服务器端脚本语言,是生成动态网页的工具之一。它是嵌入HTML文件的一种脚本语言。七语法大部分是从C,JAVA,PERL语言中借来,并形成了自己的独有风格;目标是让WEB程序员快速的开发出动态的网页。它是当今INTERNET上最为火热的脚本语言,只需要很少的编程知识你就能使用PHP建立一个真正交互的WEB站点。

      PHP是完全免费的,可以不受限制的获得源码,甚至可以从中加进你自己需要的特色。PHP在大多数Unix平台,GUN/Linux和微软Windows平台上均可以运行。PHP的官方网站是:http://www.php.net

      与ASP、JSP一样,PHP也可以结合HTML语言共同使用;它与HTML语言具有非常好的兼容性,使用者可以直接在脚本代码中加入HTML标签,或者在HTML标签中加入脚本代码从而更好的实现页面控制,提供更加丰富的功能。


      PHP的优点有:安装方便学习过程简单;数据库连接方便,兼容性强;扩展性强;可以进行面向对象编程。引用Nissan的Xterra的话来说就是PHP可以做到你想让它做到的一切而且无所不能!


      PHP提供了标准的数据库接口,几乎可以连接所有的数据库;尤其和MYSQL数据库的配合更是\"天衣无缝\"。下面引用一个调用MYSQL数据库并分页显示的例子来加深对PHP的了解。


    $pagesize = 5; //每页显示5条记录

    $host=\"localhost\";

    $user=\"user\";

    $password=\"psw\";

    $dbname=\"book\"; //所查询的库表名;

    //连接MySQL数据库

    mysql_connect(\"$host\",\"$user\",\"$password\") or
    die(\"无法连接MySQL数据库服务器!\");



    $db = mysql_select_db(\"$dbname\") or die(\"无法连接数据库!\");



    $sql = \"select count(*) as total from pagetest\";//生成查询记录数的SQL语句

    $rst = mysql_query($sql) or die(\"无法执行SQL语句:$sql !\"); //查询记录数

    $row = mysql_fetch_array($rst) or die(\"没有更多的记录!\"); /取出一条记录

    $rowcount = $row[\"total\"];//取出记录数

    mysql_free_result($rst) or die(\"无法释放result资源!\"); //释放result资源



    $pagecount = bcdiv($rowcount+$pagesize-1,$pagesize,0);//算出总共有几页



    if(!isset($pageno)) {

    $pageno = 1; //在没有设置pageno时,缺省为显示第1页

    }

    if($pageno<1) {

    $pageno = 1; //若pageno比1小,则把它设置为1

    }

    if($pageno>$pagecount) {

    $pageno = $pagecount; //若pageno比总共的页数大,则把它设置为最后一页

    }

    if($pageno>0) {

    $href = eregi_replace(\"%2f\",\"/\",urlencode($PHP_SELF));//把$PHP_SELF转换为可以在URL上使用的字符串,这样的话就可以处理中文目录或中文文件名

    if($pageno>1){//显示上一页的裢接

    echo \"上一页 \";

    }

    else{

    echo \"上一页 \";

    }

    for($i=1;$i<$pageno;$i++){

    echo \"\" . $i . \" \";

    }

    echo $pageno . \" \";

    for($i++;$i<=$pagecount;$i++){

    echo \"\" . $i . \" \";

    }

    if($pageno<$pagecount){//显示下一页的裢接

    echo \"下一页 \";

    }

    else{

    echo \"下一页 \";

    }



    $offset = ($pageno-1) * $pagesize;//算出本页第一条记录在整个表中的位置(第一条记录为0)

    $sql = \"select * from pagetest LIMIT $offset,$pagesize\";//生成查询本页数据的SQL语句

    $rst = mysql_query($sql);//查询本页数据

    $num_fields = mysql_num_fields($rst);//取得字段总数

    $i = 0;

    while($i<$num_fields){//取得所有字段的名字

    $fields[$i] = mysql_field_name($rst,$i);//取得第i+1个字段的名字

    $i++;

    }

    echo \"\";//开始输出表格

    echo \"\";

    reset($fields);

    while(list(,$field_name)=each($fields)){//显示字段名称

    echo \"\";

    }

    echo \"\";

    while($row=mysql_fetch_array($rst)){//显示本页数据

    echo \"\";

    reset($fields);

    while(list(,$field_name)=each($fields)){//显示每个字段的值

    $field_value = $row[$field_name];

    if($field_value==\"\"){

    echo \"\";

    }

    else{

    echo \"\";

    }

    }

    echo \"\";

    }

    echo \"
    $field_name
    $field_value
    \";//表格输出结束

    mysql_free_result($rst) or die(\"无法释放result资源!\");//释放result资源

    }

    else{

    echo \"目前该表中没有任何数据!\";

    }



    mysql_close($server) or die(\"无法与服务器断开连接!\");//断开连接并释放资源

    ?>

      从这个例子可以看出,PHP的语法结构很象C语言,并易于掌握。而且PHP的跨平台特性让程序无论在WINDOWS平台还是LINUX、UNIX系统都能运行自如。笔者编写PHP程序是在WINNT4中,然后上传到UNIX系统运行,从未发现兼容性的问题。

      到目前为止,无论在个人网站还是在企业网站上,以上4种技术中以PHP的应用最为广泛。

      以上4种技术,皆在制作动态网页上各显神通。至于选择哪种技术,取决于制作者的爱好和技术储备。对于广大个人主页的爱好者、制作者来说,笔者建议尽量少用难度较大、上手较慢的CGI技术。如果您是\"微软\"的拥趸,采用ASP技术会让您得心应手;如果是LINUX的追求者,运用PHP技术在目前是最恰当、最明智的选择。此外,不要忽略了JSP技术,据说它是未来最有发展前途的动态网站技术,但是在学JSP之前,必须掌握JAVA技术。


    发布人:Crystal 来自:it365