欢迎光临
我们一直在努力

WWW数据库开发-数据库专栏,其他相关

建站超值云服务器,限时71元/月

一、引言
   www是目前internet上发展最快的领域,也是internet网上最重要的信息检索手段。早期的web页面(homepage)主要用来传递静态html文档,后来由于cgi接口,特别是java和javascript语言的引入,使得web页面可以方便地传播动态信息。借助java和javascript语言,可以设计出具有动画、声音、图形/图像和各种特殊效果的web页面。
   www的主要内容包括超文本传输协议(http)、超文本标记语言(html)、通用网关接口(cgi)、java和javascript语言等。
    http(hypertexttransferprotocol),是一个专门为web服务器和web浏览器之间交换数据而设计的网络协议。它通过规定通用资源定位符(urls)使客户端的浏览器与服务器的web资源建立链接关系,从而奠定了用户对internet透明访问的基础。
    html是www的通用标记语言,它用来创建web页面和控制web信息显示格式。html不是编程语言,而是一种描述语言。html2.0得到了ietf(internetengineeringtaskforce)的支持而成为internet国际标准。目前,html已经发展到3.0和3.2版,只是新版本的标准尚未完全统一,不同的商家对html2.0进行了一定的扩充,引入了更多新的功能。例如,netscape公司在html3.0中增加了页面底图(backgroundimages)和表(table)定义等标记,使得web页面更加引人入胜。
    cgi是通用网关接口(commongatewayinterface)的简称,它是web服务器与外部程序之间的通信接口,服务器并不关心外部应用程序是用什么语言(如c、c++、pascal、delphi或perl)编写的,它只是负责接收用户输入的信息,并把cgi程序所产生的结果??html文档或其他符合http规定的文件回传给用户。事实上,cgi是动态web页面制作的第一步,但由于cgi程序实现比较困难,而且效率不高,它已经逐渐被新的技术所取代。
    java是由sun公司开发的面向对象(object-oriented)程序设计语言,它支持client/server计算。java最初的目标是建立一个适合于家用电器产品使用的系统环境,但并没有获得成功,所幸的是它以其固有的优点被用来弥补和扩充html语言的不足,成为internet领域后来居上的重要工具。java很有可能成为今后十年互联网上的主流语言。
    javascript是由sun公司和netscape公司共同研制的基于对象(object-based)的语言,它舍弃了java中最复杂的类(class)定义和继承等成分,而只保留了它的表达式和控制语句。这种简化并不影响它在www中发挥重要作用,相反,因为有了javascript,一般的web页面设计者都可以十分容易地实现过去只有靠专业程序员编制复杂的cgi程序才能完成的功能,从而使web技术得到进一步普及。
   交互式动态html页面的实现需要以大量数据资源为基础,为了对数据资源进行高效的存取,自然会引入数据库系统,于是,web数据库便应运而生了。
   许多数据库和www商家都把数据库与web的连接性作为发展战略的一个重要组成部分。
    oracle公司通过oracle7数据库和web技术的全面集成,提供了一个intranet开发平台,oraclewebserver允许web客户直接通过web浏览器来访问oracle7数据库中存储的数据。oraclewebserver(2.0版以上)用户能够调用存储过程生成动态web页面,而无需依赖cgi。
    sybase公司的战略计划中也处处体现出internet的连接性,特别是通过加强internet数据仓库技术来突出其产品的稳健性和易扩展性;sybase的交互式数据仓库允许用户通过其iq(informationquery)产品进行快速交互式查询,在sybasesystem11中,internet连接性也是最主要的特色。
    作为世界上最大的web产品供应商,netscape公司也在其livewire开发工具中提供了一个内部数据库对象database,通过database对象的各种方法,可完成对数据库服务器的连接、检索、更新、提交、回退等操作。
    microsoft公司的web服务器iis(internetinformationserver)中也有一个数据库连接器idc(internetdatabaseconnector),可以动态地查询和更新数据库。
    需要指出的是,目前尚未形成web数据库工业标准,不同商家的产品各有长短。
二、从client/server应用到intranet/web应用
    在过去的十几年里,client/server结构为实现企业级的信息共享起到了举足轻重的作用,但随着企业规模的日益扩大,应用程序复杂程度的不断提高,传统的client/server结构也暴露出许多问题,尤其是系统软件和应用软件变得越来越复杂。这不仅给应用软件实现带来困难,还给软件维护造成不便;随着用户需求的改变,client端应用软件可能需要增加新的功能或修改用户界面,那么该软件的应用范围越广,软件维护的开销也就越大。另外,client/server结构所采用的软件产品大都缺乏开放的标准,一般不能跨平台运行。当把client/server结构的软件应用于广域网时就暴露出更大的不足。
    intranet/web技术可以比较圆满地解决上述问题。intranet是采用internet技术的企业内联网络,它既可与internet互联,也可以独立使用,具有很大的灵活性。用户只要在内部intranet上建立自己的web服务器,并通过web服务器与数据库服务器连接,就能够大大降低软件维护开销,因为采用intranet/web技术,我们只需开发和维护服务器端应用程序(无需开发客户端程序),而服务器上所有的应用程序都可通过web浏览器在客户机上执行,从而统一了用户界面。由于几乎各种操作系统上都有web浏览器,所以intranet/web应用可以方便地实现跨平台操作。
三、web服务器与数据库服务器的连接技术
1cgi技术
    cgi是最早的web数据库连接技术,几乎所有的web服务器都支持cgi。程序员可以选择任何一种语言,如c、c++、delphi、visualbasic或perl来编写cgi程序。
    cgi是一个位于服务器和外部应用程序之间的通信协议,cgi程序可以与web浏览器进行交互,并可以通过数据库的调用接口与数据库服务器进行通信。例如,cgi程序可以从数据库服务器中获取数据,并转化为html页面,然后由web服务器发送给浏览器;也可以从浏览器获得数据,并存入指定的数据库中。
   按照应用环境的不同,cgi可以分为标准cgi和wincgi两种。
(1)标准cgi
    标准cgi通过环境变量或者命令行参数来传递web服务器获得的用户请求信息,web服务器与浏览器之间的通信采用标准输入/输出方式。当web服务器接收到浏览器发来的cgi请求时,首先对该请求进行分析,并设置所需的环境变量或命令行参数,然后创建一个子进程启动cgi程序。cgi程序执行完毕后,利用标准输出将执行结果返回web服务器。cgi的输出类型可以是html文档、图形/图像、纯文本或声音等。
(2)wincgi
    标准cgi采用标准输入/输出进行数据通信,但许多windows环境的编程工具(如visualbasic和borlanddelphi等)不支持标准输入/输出方式,因此就无法用这些工具来开发基于标准cgi的应用程序。
    wincgi也称为间接cgi或缓冲cgi。这种方法在(不支持标准输入/输出的)cgi程序和cgi接口之间插入一个缓冲程序,该缓冲程序与cgi接口之间用标准输入/输出进行通信;cgi程序则采用临时文件(缓冲区),而不是标准输入/输出进行数据通信。
    当web服务器接收到浏览器的请求时,先创建一个子进程启动缓冲程序,该缓冲子进程与web服务器进行通信,它通过标准输入/输出、环境变量和命令行参数获得有关数据,并将这些数据保存在一个输入缓冲区中;然后,缓冲子进程再创建一个子进程启动cgi程序,cgi程序读取输入缓冲区中的内容,处理浏览器的请求,并将要输出的内容存入输出缓冲区;缓冲程序通过环境变量或命令行参数等方式传递输入缓冲区和输出缓冲区的地址(或临时文件名)到cgi子进程。
    在整个处理过程中,缓冲子进程与cgi子进程之间应保持同步,以监测cgi程序执行的状态。当缓冲子进程得到cgi子进程的输出时,设置有关环境变量并终止该cgi子进程,然后采用标准输出与web服务器通信,并通过web服务器将cgi程序的输出结果返回给浏览器。web服务器进程与缓冲进程也应保持同步,以监测缓冲程序执行的状态。
    wincgi最主要的特点是:web服务器与cgi程序之间的数据交换是通过缓冲区,而不是通过标准输入/输出进行的。
    显而易见,cgi程序是作为独立的外部应用程序来执行的,它与web服务器上的其他进程竞争处理器资源,因此导致运行速度缓慢。此外,用cgi开发web应用是相当困难的,程序员不仅要掌握html语言,还要精通低级编程语言。在数据库访问过程中,连接状态的管理是很重要的,假如没有状态管理,则来自浏览器的每一次请求都需要一个对连接的建立和释放过程,这样效率肯定很低。遗憾的是cgi不提供状态管理功能。再者,每个cgi程序必须用某个特定数据库服务器专用的sql语言来手工编写数据库接口程序,故可移植性较差。
2webapi技术
    webapi通常以动态链接库(dll)的形式提供,是驻留在web服务器上的程序,它的作用与cgi相似,也是为了扩展web服务器的功能。
    目前最著名的webapi有netscape的nsapi、microsoft的isapi和o’reilly的wsapi。各种api均与其相应的web服务器紧密联系在一起。
     用nsapi、isapi或wsapi开发的程序,性能大大优于cgi程序,这些api应用程序是与web服务器软件处于同一地址空间的dll,因此所有的http服务器进程能够直接利用各种资源,这显然比调用不在同一地址空间的cgi程序所占用的系统时间要短。程序员可以利用api分别开发web服务器与数据库服务器的接口程序。
    webapi的出现解决了cgi的低效问题,但用api编程比开发cgi程序更加困难。开发api程序需要多线程、进程同步、直接协议编程等知识。
    为了解决复杂与高效之间的矛盾,netscape与microsoft均为各自的web服务器提供了基于api的高级编程接口。netscape提供的是livewire,microsoft提供的是idc(internetdatabaseconnector)。
(1)netscape的livewire
    livewire是一个通用的web开发环境,而不仅仅是数据库访问接口。livewire的编程语言是javascript,它提供了一个database对象,该对象的方法可用来操作关系数据库。当一个应用程序要连接数据库服务器时,livewire就建立一个database对象。每个应用程序只能有一个数据库对象。
    用database对象的connect方法可连接数据库服务器,例如:
database.connect(″oracle″,″orasvr″,″system″,″manager″,″mydb″)
   可连接到oracle数据库服务器orasvr上system/manager用户的mydb数据库实例上。
    livewire提供了几种显示数据库查询结果的方法。其中,最简单而且最快的是用database对象的sqltable方法。sqltable方法以html表的形式返回sql语句的查询结果。
    sqltable自动控制查询结果的输出格式,这是最简单的方法。如果你希望自己定制输出格式,可用数据库光标建立自己的显示函数。
     每个数据库查询都将返回一个光标,光标可以看成数据库查询结果构成的虚表或视图,每个光标都支持当前行(currentrow)的概念,它是指向结果表中记录的指针。
    一旦应用程序与数据库连接成功,你就可以用database对象的cursor方法来为指定的sql查询语句建立光标。
cursorname=database.cursor(″select语句″,updatable)
     其中cursorname是为光标对象所取的名字;?select语句?是数据库服务器支持的sql查询语句;updatable是一个布尔参数,它表示该光标是否允许修改。
     可修改光标(updatablecursor)允许借助光标的当前行来更新数据库中的表。但这时的光标只能限定为单表的查询结果。
应用程序可以用disconnect方法关闭数据库连接:
database.disconnect()
    一旦关闭了数据库连接,应用程序便无法建立光标或使用其他database方法。
    事务是一组数据库操作的集合,这些操作要么一起成功,要么一起失败。操作的提交或回退是一同生效的。事务处理的概念对维护数据的完整性和一致性是十分重要的。尽管各种数据库服务器事务处理的实现方法有所不同,liveware提供了统一的事务处理接口。
    主要是数据库更新语句(insert,update和delete)要在事务控制之下完成。database对象的begintransaction、committransaction和rollbacktransaction方法分别用来启动、提交和回退事务。
    多媒体数据(图像、声音、文本、动画等)可以二进制大对象(blob)的形式存入数据库。livewire有两种处理二进制数据的方法,第一种是把文件名存入数据库,而文件实体放在数据库外;第二种是直接用blob类型的字段存储多媒体数据,再通过livewire提供的blob方法来访问这些数据。
     livewire仅仅支持netscapeenterprise/fasttrackserver,而不支持其他的web服务器。
(2)microsoft的idc
     idc是microsoftweb服务器iis(internetinformationserver)的一个动态链接库,它通过odbc接口访问各种数据库。idc包含两种类型的文件:idc脚本文件(*.idc)和html模板文件(*.htx)。
     idc脚本文件(*.idc)用来控制数据库访问,其中包括数据库名、用户名、口令和sql语句等数据库连接参数,以及与此idc文件对应的html模板文件(*.htx)的存储路径。
    html模板文件(*.htx)是实际html文档的模板,它以直观的方法说明怎样将查询到的数据插入web页面。模板中可以有静态文字、图形/图像或其他html页面元素。
    对数据库服务器的每一次查询都需要一个idc脚本文件(*.idc)和一个html模板文件(*.htx)。脚本文件必须存储在web服务器上,而模板文件则可以存储在web服务器能够访问到的任何地方。
    idc的处理流程大致如下:web服务器iis对浏览器传来的url字符串进行分析,如果当前url以?idc?结束,就说明这是一个idc请求,于是将其传给idc接口模块,idc将依次读取脚本文件并与数据库服务器进行通信;idc模块从数据库服务器得到查询结果后,通过指定的模板文件而得到一个实际的html文档;然后将该文档交给web服务器iis,由iis将html文档返回web浏览器。
    idc不仅可以从数据库中查询数据,也可以向数据库中存储数据。与livewire类似,idc仅仅支持microsoft的iis,而不支持其他的web服务器。
3rad技术
    rad是快速应用开发(rapidapplicationdevelopment)的缩写。传统的rad工具,如powerbuilder、delphi、uniface、newera、oracle/developer2000等早已为人们熟知。近两年来,随着web数据库应用需求的不断升温,市场上已经出现了一批web数据库rad工具,例如,powersoft公司为powerbuilder增加了一个internetdevelopmentkit,powerbuilder6.0更加突出了intranet/web技术;borland公司在推出intrabuilder之后,又把intranet/web技术真正融入最新的delphi3.0中;oracle公司的新版designer2000和developer2000也能够直接生成web数据库应用;uniface公司通过其webenabler产品将代码直接转化为web数据库应用。
    rad工具的主要特点是具有图形开发界面和可视计算技术的支持,程序员只需通过简单的鼠标点击和键盘交互操作,即可快速生成应用程序代码。这里,我们简单介绍几种有代表性的rad工具。
(1)intrabuilder
    在使用borlandintrabuilder之前,必须首先在web服务器上安装intrabuilderserver,并在开发平台上安装intrabuilderdesigner集成设计工具。
     intrabuilder是一个基于javascript语言的可视开发工具,它能够快速生成和发布intranet/web数据库应用;用户通过web浏览器访问intrabuilder应用程序。intrabuilderserver具有连接数据库与web服务器的能力。
intrabuilder包括三个主要组成部分:
①intrabuilderdesigner是一个集成开发环境,可以完成所有web应用开发工作,它包括图形用户界面、程序自动生成工具experts和可视化rad设计工具。
②intrabuilderserver运行在web服务器上,用来处理客户机的请求,目前intrabuilderserver只能安装在windowsnt或windows95上。
③内置intranet应用程序。这些程序的所有模块均可重用(reuse),程序员可以利用现成的格式(form)、表(table)、报表(report),以及javascript代码来生成新的应用程序。
     一个intrabuilder应用程序通常包含表(table)、格式(form)、报表(report)和页面(homepage)等构件。我们可以用两种方法来实现intrabuilder应用程序。一是在intrabuilderexperts工具的指导下,通过人-机交互,自动生成表、格式、报表和页面等元素;二是利用intrabuilderdesigner可视化设计工具分别建立应用程序的各元素。
(2)uniface
      uniface是compuware公司推出的基于组件的可视化开发环境。uniface组件包括格式(form)、服务程序(service)和报表(report)等。所有程序模块中的定义都是可重用的(reusable),程序员可以利用继承方法重用已经完成的程序模块,从而提高软件生产效率和软件可靠性。
     uniface的webenabler产品使得程序员能够像开发client/server应用程序那样定义应用模型和用户界面,我们只需选择生成html的选项,并将应用程序安装在服务器上,就可完成web应用开发。此时,用户既可在client/server模式下通过uniface运行环境执行应用程序,也可在web浏览器上通过可交互的动态html访问与client/server模式下功能和界面完全一致的应用。
    webenabler和web服务器必须安装在同一台机器上,这与intrabuilderserver需要与web服务器安装在一台机器上的要求十分相似。每当web服务器接收到用户请求,便通过webenabler启动unifaceweb应用。
    webenabler产品同时包含了cgi、nsapi和isapi接口,因此可以对microsoftiis、netscapeenterprise/fasttrackserver等不同商家的web服务器提供透明的支持。
(3)oracle/designer2000与oracle/developer2000
     oracle公司利用具有internet连接能力的中介产品实现oracle7数据库服务器与web服务器的结合;oraclewebserver通过oracle7和web技术的全面集成提供了一个internet/intranet开发平台。oraclewebserver允许web客户直接通过浏览器访问oracle7数据库中存储的数据,并能够调用存储过程生成动态web页面,而无需依赖cgi。
    oracle公司提供了两个工具?designer2000和developer2000,可用于完成web应用程序的开发,它们的编程语言是扩充的pl/sql,而程序员无需手工编码即可生成pl/sql程序。
    designer2000是一个完整的case工具,它为应用系统分析人员和设计人员提供了图形方式的分析和建模、应用程序结构设计、数据库结构设计和应用程序生成等功能。此外,它还能实现client/server应用向intranet/web应用的升级。
    如果在进行client/server应用开发时已经采用designer2000作为设计开发工具,那么现在只需选用新版designer2000,进一步操作就可完成转换,即在模块结构层次图中选中某一模块,然后选择webserver生成工具进行web应用生成即可。无需重新设计和编码,无需修改任何内容,最大程度地保护了软件投资。
    如果在进行client/server应用开发时没有采用designer2000,而是用developer2000完成的,此时首先要用designer2000的反向设计功能,对用developer2000开发的应用程序进行分析,把其中涉及到的数据库信息和应用程序结构的分析结果形成数据定义信息和模块定义信息,同时把这两类信息记录到共享分析库中。然后,依据模块定义信息,通过使用webserver生成工具即可生成相应的web应用程序。web应用可以生成动态的html页面,通过html页面,用户能够完成各种数据库访问,包括查询、插入、修改和删除等,只需把这些pl/sql程序包安装到web服务器上,就可通过浏览器使用了。
    developer2000也能生成web应用,在保持原有功能的同时,developer2000中的report工具可以让用户通过鼠标点击方式生成html格式的报表,构成web应用,其操作方式同client/server结构的报表工具一样简单。
4、java/jdbc技术
    jdbc技术是javadatabaseconnectivity的缩写,它是javasoft公司设计的java语言的数据库访问api。
    最初的java语言并没有数据库访问能力。jdbc是第一个支持java语言的标准的数据库api,其目的在于使java程序与数据库服务器的连接更加方便。在功能方面jdbc与odbc相同,它给程序员提供了统一的数据库访问接口。
    jdbc访问数据库的过程是这样的:用户通过浏览器从web服务器上下载含有javaapplet的html页面。如果其中的javaapplet调用了jdbc,则浏览器运行的javaapplet直接与指定的数据库建立连接。
    jdbc是一个与数据库系统独立的api,它包含两部分:jdbcapi和jdbcdriverapi。jdbcapi提供了应用程序到jdbcdrivermanager的通信功能;jdbcdriverapi支持jdbcdrivermanager与数据库驱动程序的通信。
    jdbcdrivermanager类似于odbcdrivermanager,用来管理各数据库软件商提供的jdbc驱动程序。javasoft公司提供了一个通用的jdbcdrivermanager,而各数据库公司只需提供一个与odbc类似的jdbc驱动程序,开发人员就可以用java语言访问数据库。
    此外,javasoft公司还提供了一个特殊的驱动程序,jdbc-odbc桥,该软件支持jdbc通过现有的odbc驱动程序访问数据库服务器。javasoft公司认为,通过jdbc-odbc桥访问数据库不会造成明显的性能下降。
jdbcapi提供了一系列java类接口,其中:
    java.sql.drivermanager负责处理jdbc数据库驱动程序的加载和卸载。drivermanager类作为jdbc的管理层,负责寻找并装载与url指定的数据库相符的jdbc驱动程序,该驱动程序与远程数据库相连,返回一个java.sql.connection对象。
java.sql.connection负责建立与数据库服务器的连接。
java.sql.statement可以通过connection对象执行一条sql语句。
java.sql.resultset表示从数据库服务器返回的结果集。通过操作该结果集可实现对数据库的访问。
    要访问数据库,必须首先建立一个java.sql.connection对象,可以通过调用drivermanager.get.connection得到此对象。该方法的参数是一个url,它唯一指定了要访问的数据库。
    通过使用java.io.input对象,jdbc允许访问数据库中存放的图像和视/音频信息。
jdbc也支持数据库事务处理。在缺省情况下,jdbc处于自动提交?模式,也就是说,把每一次请求都当作一个事务来处理。但是,也可以显式地把多个请求作为一个事务来处理。当所有的请求完成后,使用connection.commit方法提交当前事务,或者使用connection.rollback退回当前事务。
    jdbc也支持光标(cursor)操作。光标用来定位一个特定的记录。当光标被激活时,可以在光标指定的记录上完成数据操作。
     目前jdbc已经得到许多软件商的支持,包括oracle、sybase、borland和ibm等。大多数流行的数据库系统都已推出了自己的jdbc驱动程序。
四、结束语
    本文所述的四种技术都能实现www与数据库的连接,但它们的工作原理不尽相同。
    cgi和api技术是将web服务器与某一进程或api相连,该进程或api再将得到的结果转化为html文档,并返回web服务器,然后由web服务器把得到的html文档传给浏览器。就是说,与数据库服务器的通信是由web服务器完成的。虽然api技术比cgi技术提高了效率,但仍然没有克服编程复杂的困难。
     为了解决高效与复杂之间的矛盾,netscape和microsoft等公司分别推出了livewire和idc等基于api的高级编程接口,从而大大降低了程序实现的难度。
    rad技术可以看成是基于api编程接口的进一步提高,它借助可视化计算技术快速生成应用程序,大幅度减少了手工编程的工作量,增强了软件的可靠性。
    jdbc技术与上述几种技术有很大不同,这里,由(java兼容的)web浏览器将嵌入html文档中的javaapplet直接下载到客户机上运行。也就是说,与数据库服务器的通信是由web浏览器直接完成的。
    我们必须清醒地认识到,www技术是90年代初才问世的,web数据库更是近两三年才发展起来的新技术,目前的国际标准化程度很低,各软件商推出的产品和技术大多互不兼容。cgi是得到普遍遵守的规范,但cgi程序实现难度大且运行效率低下,因此缺乏生命力,它必然要被新的标准所取代。webapi技术提高了程序运行效率,但用api编程比用cgi更困难。另外,由于各种不同的api互不兼容,用某种api编写的程序只能在特定的web服务器上运行,使用范围受到极大限制。rad(包括各种基于api的高级编程接口)工具,虽然解决了直接用api编程带来的困难,提高了软件开发效率,但仍具有和api相同的问题:与特定的web服务器捆得太紧,缺乏通用性。值得关注的是jdbc技术,它借鉴了odbc成功的经验,并且可以直接利用现有的odbc驱动程序访问数据库。javasoft公司推出jdbc之后,得到绝大多数数据库商家的支持,随着java语言在www中发挥的作用日益显著,相信jdbc会取代cgi而成为新的标准。

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » WWW数据库开发-数据库专栏,其他相关
分享到: 更多 (0)