WWW是基于浏览器/服务器结构的,它采用TCP/IP通信协议和WWW技术集成已有的各类系统,从而把传统的客户/服务器模式中的服务器分成了一个Web服务器和多个数据库服务器。
但随着Internet的发展,静态Web站点的开发与维护变得越来越困难,其最大的问题就是缺少交互性,信息的内容只有在网站管理人员更改后才能发生变化,使得Web管理员不得不频繁修改他们的网页。为了向网络用户提供大量有用的、动态的和可交互的信息,凡是能够数据库化的内容,应尽量做成数据库的形式,因为数据库形式的数据远比其他形式的数据要容易更新与管理。
基于Web的数据库访问技术是指:在客户端安装Web浏览器,作为用户输入查询条件和显示查询结果的交互界面。用户可以通过填写表格或输入关键字的方式来与WWW进行交互,当用户单击表格上的按钮时,表格中的数据便发送到Web服务器。Web服务器介于Web浏览器与数据库服务器之间,负责用户输入信息的接收。服务器将数据传送至要被处理的脚本或应用程序,并在数据库中查询数据或将数据投递到数据库中。最后,服务器将返回结果插入到HTML页面,传送至客户端以响应用户。这种交互性提高了用户参与的积极性。
数据库引擎是Web数据库站点最重要的组成部分之一。当我们评价一个Web数据库引擎的时候,首先应考虑多用户问题,也就是说,数据库必须能够支持多个并发用户的访问。
另外,所建立的Web数据库应是关系型的。关系数据库是一种功能完善、运行可靠的数据库系统,目前大多数的商业应用都主要依赖于这种系统,如SQL Server、Sybase和Oracle等。在另一方面,关系数据库支持的是一个相当标准的特性集。所有产品都以一个非常容易理解的标准语言为基础,即SQL/92语言规范。所以在Web数据库系统中,采用何种RBMS(关系型数据库管理系统)都没有什么关系,因为它们都遵守同一个标准。
从技术发展的角度来看,以前通过浏览器访问数据库的惟一渠道是CGI方式。随后出现了ISAPI、NSAPI和JDBC等技术方案,近来又流行ASP技术。下面我们对这些技术逐一进行分析。
一、CGI技术 CGI(Common Gateway Interface)是外部应用程序与Web服务器交互的一个标准接口。CGI应用程序可以完成客户端与服务器的交互操作。它打破了服务器软件的局限性,允许用户根据需要采用各种语言去实现无法用HTTP、HTML实现的功能,给WWW提供了更为广阔的应用空间。例如,一个能够访问外部数据库的CGI程序可以使客户端用户通过Web服务器进行数据库的查询。同时,CGI也为在不同的平台之间进行沟通提供了范例。
遵循CGI标准编写的服务器端的可执行程序称为CGI程序。CGI最大的用处之一在于其与浏览Web站点的用户之间的交互能力,使信息网关、反馈机制、访问数据库、订阅和查询等一系列灵活复杂的操作得以实现。通过这个公共网关界面,服务器可以向CGI程序发送信息,CGI程序也可以向服务器回送信息。使用CGI实现Web与数据库的互连,最大的优点在于其通用性。目前几乎所有的HTTP服务器都支持CGI。CGI程序与服务器、客户机的关系及遵守的协议和标准可用图1来说明。
图 1 CGI程序民服务器、客户机的关系
首先,客户端根据某资源的URL向Web Server提出请求,Web Server的HTTP Daemon(守护进程)将此请求的参数通过标准输入stdin和环境变量(Environment Variable)传递给指定的CGI程序,并启动此应用程序进行处理。处理结果通过标准输出stdout返回给HTTP Daemon进程,再由HTTP Daemon进程返回给客户端,由浏览器负责解释执行,将最终结果显示在用户面前。
CGI程序的执行一般有两种调用方式:一是通过URL直接调用,在浏览器的URL栏里直接写入上述地址就可以调用该程序;另一种方式,也是主要的方式,是通过交互式主页中的FORM栏调用,通常都是用户在填完一张输入信息主页后按"确认"按钮启动CGI程序。主页的交互一般都是这样调用CGI来完成的。
从编程语言的角度讲,CGI只是一个普通的程序,只不过其输入、输出的处理比较特殊,只要能达到交互的目的,CGI程序可以使用Perl、C、C++,FORTRAN和数据库语言等任何能够形成可执行程序的语言编写。WinCGI是由标准CGI演变而来的。WinCGI允许作为应用程序运行的服务器使用Windows应用程序的服务,包括Visual Basic程序。使用这个界面,一个以WinCGI为基础的程序是从磁盘文件中读取信息而不是从环境变量或标准输入中读取,并且把得出的最后数据写到文件中而不是写到标准输出中。
CGI的跨平台性能极佳,几乎可以在任何操作系统上实现,如DOS、Windows、Unix、OS/2、Macintosh等。CGI的缺点也是显而易见的: CGI的应用程序一般都是一个独立的可执行程序,与Web服务器各自占据着不同的进程,而且一般一个CGI程序只能处理一个用户请求。每当有一个用户请求,就会激活一个CGI进程。当用户请求数量非常多时,大量的CGI程序就会大量挤占系统的资源,如内存、CPU时间等,造成CGI运行效率低下。另外CGI的功能有限、开发较为复杂,且不具备事务处理(Transaction)功能,这在一定程度上限制了它的应用。
二、ISAPI
数据库程序的一个关键组件是数据库API(Application Program Interface)。每个数据库引擎都带有一系列库(如Windows NT下使用的动态链接库)。只有通过这种库,应用程序才能连接和使用数据库引擎。对于特定的数据库产品,应用程序对动态链接库的调用是专用的。根据定义,每种数据库系统都有属于自己的专有调用接口,例如对SQL Server设计的API程序,就不能用它访问Oracle或Informix数据库。
Web服务器的供应商为了扩展服务器的性能,各自开发了API应用程序接口来取代CGI。目前最流行的两种API是Microsoft的ISAPI和Netscape的NSAPI,这两种接口允许我们以标准方式编写Web服务器交互的应用程序。其中对数据库访问的功能主要是以IDC文件形式提供给客户的,在IDC文件中定义了数据源、返回的模板以及动态的SQL语句。
ISAPI是Microsoft提供的一套面向Internet服务的API接口,用它编制的程序以动态链接库(DLL)的形式存在,可实现CGI程序所能提供的全部功能。ISAPI的工作原理和CGI大体上是相同的,都是通过交互式主页取得用户输入信息,然后交服务器后台处理。但是二者在实现机制上大相径庭。ISAPI与CGI最大的区别在于:在ISAPI下建立的应用程序都是以动态链接库的形式存在的;而CGI的应用程序一般都是可执行程序。在ISAPI调用方式中,被用户激活的DLL和WWW服务处于同一进程中,在处理完某个用户的请求后不会马上消失,而是和WWW服务器一起继续驻留在内存中,等待处理其他用户的HTTP请求,直到过了指定时间后一直没有用户输入为止。基于ISAPI的所有进程都可以获得HTTP Server上的任何资源, 而且当它调用外部CGI Script时,需要的开销也较单纯的CGI少。因此ISAPI的运行效率要显著高于CGI程序。ISAPI的工作过程如图2所示。图2 通过ISAPI接口访问 Web数据库
由于开发ISAPI应用要用到Microsoft的一套API,所以能用来开发ISAPI应用的语言不如CGI多,主要有Visual C++ 4.1以上版本,也可以使用Visual Basic 5.0、Borland C++ 5.0等。ISAPI可以用来写Web服务器(如IIS)的OLE服务器扩展和过滤器,例如Visual C++ 5.0 MFC提供了5个类(CHttpServer、CHttpServerContext、CHtmlStream、CHttpFiler、CHtt pServerFilter)用来写ISAPI应用。
三、ODBC
API方法与Web服务器结合紧密,所以性能较高。但是利用底层的API开发数据库访问程序仍然很困难,因此一般使用基于底层API的高层数据库编程接口,这就是我们所说的ODBC。ODBC是"开放数据库互连"的简称,是一种使用SQL的应用程序接口(API)。ODBC一个最显著的优点是用它生成的程序与数据库或数据库引擎是无关的。ODBC可使程序员方便地编写访问各DBMS厂商的数据库的应用程序,而不需了解其产品的细节。Web服务器通过数据库驱动程序ODBC向数据库服务器发出SQL请求,数据库服务器接到的是标准的SQL查询语句,数据管理系统执行SQL查询并将查询结果再通过ODBC传回Web服务器。许多服务器扩展程序使用包含ODBC层的系统结构。ODBC是为调用关系数据库提供统一途径的一类API,由于它适用于许多不同的数据库产品,因此是服务器扩展程序开发者们理所当然的选择。
Microsoft Developer Studio为大多数标准的数据库格式提供了32位ODBC驱动器。这些标准数据格式包括有SQL Server、Access、Paradox、dBase、FoxPro、Excel、Oracle以及Microsoft Text。如果用户希望使用其他数据格式,则需要安装相应的ODBC驱动器及DBMS。用户使用自己的DBMS数据库管理功能生成新的数据库模式后,就可以使用ODBC来登录数据源。对用户的应用程序来说,只要安装有驱动程序,就能注册很多不同的数据库。
四、JDBC
Java语言显示出优于以往编程语言的诸多特色,赢得了众多数据库厂商的支持。为了同时连接到多个数据库进行并行的联合查询,可以充分利用Java语言本身的特色。由于Java是一种面向对象的、多线程的网络编程语言,因此能够用多个线程对应多个不同的数据库进行查询操作。用户发出的同一条查询语句同时启动多个线程,并行运行,同时进行异构数据库的联合查询。
在数据库处理方面,Java提供了JDBC(Java数据库连接:Java Database Connectivity),为数据库开发应用提供了标准的应用程序编程接口。与ODBC类似,JDBC也是一种特殊的API,是用于执行SQL语句的Java应用程序接口(Java API),它规定了Java如何与数据库进行交互作用。JDBC由一组用Java语言写的类和接口组成,利用Java机制设计的标准SQL数据库连接接口JDBC去访问数据库。JDBC也是一种规范,其宗旨是让各数据库开发商为Java程序员提供标准的数据库访问类和接口。JDBC与Java结合,使用户很容易地把SQL语句传送到任何关系数据库中,程序员用它编写的数据库应用软件,可在各种数据库系统上运行。采用JDBC可以很容易用SQL语句访问任何商用数据库(或称异构数据库),如SQL Server,Sybase或Oracle。采用Java和JDBC编写的数据库应用程序具有与平台无关的特性,很容易用SQL语句访问任何商用数据库,而不必为每一种数据库平台编写不同的程序。
JDBC访问数据库的过程是:首先用户的浏览器连接到Web服务器上,下载含有Java小程序的HTML页,Java小程序在客户端运行,使用JDBC接口,绕过Web服务器,直接与数据库服务器交互,并直接把查询结果的HTML页返回到浏览器。
与ODBC一样,JDBC提供给程序员的编程接口由两部分组成,即面向应用的编程接口JDBC API和供底层开发的驱动程序接口JDBC Driver API。JDBC API是为应用程序员提供的,是一系列抽象的接口,它使得应用程序员能够进行数据库连接,执行SQL查询,并且得到返回结果。而JDBC Driver API则是为数据库厂商提供的编程接口。
基于Java的JDBC发展迅速。Sun承诺任何Java Applet或者Java应用软件都能够与数据库结合。由于JDBC利用了Java的跨平台特色,因此,它成为Intranet和Internet环境下访问异构数据库的一种较优方式。
五、ASP技术
ASP(Active Server Pages)是由Microsoft开发的一项新技术。ASP是一个基于Web服务器端的开发环境,利用它可以产生和运行动态的、交互的、高性能的Web服务应用程序。与常见的在Client端实现动态主页的技术如Java applet、ActiveX Control、VB Script、JavaScript等不同,ASP中的命令和Script语句都是由服务器来解释执行的,执行结果产生动态生成的Web页面并送到浏览器;而Client端技术的Script命令则是由浏览器来解释执行的。由于ASP在服务器端解释执行,开发者可以不必考虑浏览器是否支持ASP;同时由于它在服务器端执行,开发者也不必担心别人下载程序以窃取编程逻辑,从而保护了开发者的利益。
ASP具有如下特点:
1. 编程简单。ASP使用Script(描述性的语言),只使用简单的语法和数学表达式,而且不需要编译。
可嵌入到HTML文件中。ASP不需要别的设计环境,ASP文件的制作和HTML类似,且和HTML开发集成,可以在同一个过程完成。
支持广泛。ASP除支持VB Script、JavaScript外,还能以插件形式支持第三方语言,如PERL、TCL等。
ASP通过后缀名为.asp的ASP文件来实现,一个ASP文件相当于一个可执行文件,因此必须放在Web服务器上有可执行权限的目录下。当浏览器向Web Server请求调用ASP文件时,就启动了ASP。Web Server开始调用ASP,将被请求的.asp文件从头读到底,执行每一个命令,然后动态生成一个HTML页面并送到浏览器。通过ASP内置的对象、服务器组件(ServerComponent)可以完成非常复杂的任务,而且用户还可以自己开发或利用别人开发的服务器组件完成专门的任务。
目前ASP只适用于IIS 3.0 on Windows NT、Microsoft Peer Web Server v3.0 onNT Workstation、Microsoft Personal Web Server on Win95这些Web Server。
六、方案比较与结论
CGI根据浏览器端的http请求激活相应进程,每一个请求对应一个进程。当同时有很多请求时,程序挤占系统资源,造成效率低下。ISAPI针对这一缺点进行改进,利用DLL(动态链接库)技术,以线程代替进程,提高了性能和速度,但要考虑线程的同步问题,而且开发步骤烦琐。这两种技术还存在另外一个问题,那就是开发困难。程序的开发和HTML写作是两个完全不同的过程,需要专门的程序员开发。而另一些较简单的开发技术如JavaScript和IDC(Internet Database Connector)等功能有限。
Microsoft的ODBC API是使用最广泛的访问数据库规范。ODBC 2.0访问数据库时存在同步与异步执行模式之分,如果设计不当,则易发生系统故障甚至系统死锁。但是同步执行模式可以简化程序编制的复杂性。程序员不用过多地了解较复杂的ODBC 2.0 API的使用,而只需使用ODBC的同步执行模式或使用数据控制项和数据库对象变量来编写应用程序,可以提高开发效率,但程序运行速度比不上异步执行模式的速度。
JDBC保持了ODBC的基本特性。两者都基于X/Open SQL调用级接口(CLI:Call LevelInterface)标准。它们的不同就在于JDBC建立在Java语言基础上,并充分利用了其特色,易于使用;ODBC使用的是C界面,C语言大量使用了Java语言中没有的指针功能,不适于以Java为界面的JDBC直接使用。同时,JDBC确保了"100%纯Java"的解决方案。这样,JDBC应用无需像ODBC应用那样要进行客户机的安装和管理。
以上这些方案,从Intranet的技术实现来衡量,它们仍不适用于快速开发、及时维护和大面积的技术普及。ASP技术的出现,使动态交互式Web主页设计成为一件轻松愉快的事。只要几行脚本语句,就能将后台的数据库信息发布到Internet/Intranet上,在编程和网页脚本的可读性方面大大优于传统的技术方案。ASP提供了更方便、更简单的数据库访问方法,使开发基于数据驱动的Web应用程序更加容易。
总之,在浏览器中访问Web数据库的方法较多,开发Web应用程序的软件人员需要选择适当的方法,但有些方法的编程接口较为复杂,妨碍了它的进一步应用。作为Web页管理员,更希望把精力集中在信息发布或程序设计本身,而不愿意在接口方面耗费太多的精力。
|