第9章服务器端开发技术9.1B/S体系结构中数据库接口技术9.2ASP技术9.3数据库访问组件ADO9.4习题9.1B/S体系结构中数据库接口技术9.1.1CGI(CommonGatewayInterface)–CGI即通用网关接口,是早期建立应用程序与Web服务器之间接口的标准,其工作方式是:用户通过浏览器用HTTP以Form(表单)向Web服务器发出请求;Web服务器接收用户的请求,用一个子进程启动CGI,将用户的请求传给CGI;CGI向数据库服务器发出请求,数据库服务器执行相应的查询操作;数据库服务器将服务请求返回给CGI;CGI将查询结果转换成网页形式返回给Web服务器,Web服务器再通过HTTP将网页传给用户的浏览器显示出来,其工作示意图如图9-1所示:9.1B/S体系结构中数据库接口技术9.1.1CGI(CommonGatewayInterface)图9-19.1B/S体系结构中数据库接口技术9.1.1CGI(CommonGatewayInterface)–CGI的功能是在超文本文件与Web服务器应用程序之间传递信息。–CGI程序可用VisualBasic、C、C++、和Perl等语言来编写。–CGI的跨平台性能极佳,几乎可以不加任何修改即可移植到绝大多数操作系统上。但其缺点是运行速度慢。–CGI交互性差,因为HTTP协议无状态限制,CGI不能保持当前状态,所以缺少交互性。–最后由于只要来访就可执行CGI,所以安全性差。9.1B/S体系结构中数据库接口技术9.1.2服务器API–目前最流行的两种API分别是Microsoft的ISAPI(InternetServerApplicationProgramInterface)和Netscape的NSAPI(NetscapeServerApplicationProgramInterface)。这两种接口可让程序设计人员以标准方式编写Web服务器交互的应用程序。目前Netscape宣布其NSAPI也支持ISAPI标准,则意味着只有一种WebAPI标准了。–ISAPI由两类组件组成:提供纵向功能层的ISAPI应用程序和提供横向功能层的ISAPI过滤器。9.1B/S体系结构中数据库接口技术9.1.2服务器API–用ISAPI编制的程序以动态连接库(DLL)的形式存在,可实现CGI所能提供的全部功能,二者的工作原理大体相同,都是通过交互式主页取得用户输入信息,然后交给服务器后台处理。–二者的区别在于:在ISAPI下建立的应用程序都是以DLL形式存在,而CGI的应用程序一般为可执行文件。在ISAPI调用方式中,被用户激活的DLL和Web服务处于同一进程中,在处理完某用户的请求后不会马上消失,而是和Web服务器一起继续驻留在内存中,等待其他用户的HTTP请求,直到过了指定的时间仍—直无用户输入为止。由于ISAPI的所有进程都可获得HTTPServer上的任何资源,而且当它调用外部CGIScript时需要的开销也较单纯的CGI少,所以ISAPI的运行效率显著高于CGI程序。服务器API的工作示意图如图9-2所示:9.1B/S体系结构中数据库接口技术9.1.2服务器API图9-29.1B/S体系结构中数据库接口技术9.1.3ASP–由于服务器API开发的难度大,于是微软推出ASP(ActiveServicePages,即动态服务器网页技术),用以取代CGI技术。–ASP是开放式Web服务器应用程序开发技术,它既不是一种编程语言,也不是一种开发工具,而是一种服务器端的脚本运行环境。–ASP的主要功能是生成动态、交互式的高效Web服务器应用程序。它能够把脚本、HTML、组件和数据库访问功能结合在一起,形成一个在服务器端运行的应用程序,并按用户请求,把结果转换成标准的HTML页面返回客户端。ASP通过ADO访问数据库。ASP使用脚本语言进行ASP程序的开发,自身提供VBScript和JavaScript两种脚本引擎,缺省为VBScript。ASP工作示意图如图9-3所示。9.1B/S体系结构中数据库接口技术9.1.3ASP图9-39.2ASP技术9.2.1ASP的运行环境–ASP的运行需要服务器来解释。微软推出的服务器是MicrosoftInternetInformationServerversion3.0/4.0/5.0onWindowsNT/2000Server(即IIS3.0/4.0/5.0)。MicrosoftPersonalWebServeronWindows95/98(即PWS)。9.2ASP技术9.2.2ASP的工作流程–ASP程序是以.asp为扩展名的文本文件,其控制部分是用VBScript或JavaScript等脚本语言来编写的。一个ASP文件相当于一个可执行文件,因此必须放在Web服务器上有可执行权限的目录下。–ASP程序只能在Web服务器端执行,当浏览器向Web服务器请求调用ASP文件时,就启动了ASP。Web服务器响应该HTTP请求,调用ASP引擎,解释被申请的文件。当遇到与ActiveXScript兼容的脚本(VBScript,JavaScript)时,ASP引擎调用相应的脚本引擎进行解释处理。若脚本指令中涉及到对数据库的访问,就调用ADO组件与后台数据库进行连接,并将执行结果动态生成一个HTML页面返回Web服务器端,然后与页面中非脚本的HTML合并成一个完整的HTML页面送至客户端浏览器。ASP的工作流程如图9-4所示:9.2ASP技术9.2.2ASP的工作流程数据库Web服务器ADOJavaScriptVBScript(ActiveX脚本引擎)浏览器HTTP响应HTTP请求ASP文件图9-49.2ASP技术9.2.3ASP文件的结构–任何可以放在HTML中的东西——Javaapplets、VBScript或者JavaScript等脚本语言、ActiveX控件等都可以放入ASP中;ASP还提供了内置对象,可以使用许多附加的组件,这大大扩展了ASP的功能。–VBScript是ASP的默认脚本程序引擎,除了VBScript,ASP也允许网页编写者使用其他熟悉的语言。–ASP的脚本语言代码可以放在程序的任何位置,只需用%和%标记将其括起来即可,且不须事先说明。9.2ASP技术9.2.3ASP文件的结构–一般一个ASP文件可以包含以下四个部分:普通HTML文件,普通Web页面的编程。客户端脚本程序代码,通常用Script和/Script定界符括起来。服务器端ASP脚本程序代码,用“%”和“%”定界符括起来。Server_SideInclude语句,使用#INCLUDE语句在Web页面中嵌入其他Web页面,其中“%”和“%”是标准的ASP定界符,而Script和/Script是客户端脚本或服务器端脚本的定界符。9.2ASP技术9.2.3ASP文件的结构一【例9-1】ASP程序实例chap9-1.asp:以不同的字体输出“Welcome!”。HtmlHeadTitleASP程序实例/Title/HeadBody%Fori=5To8%FontSize=%=i%Br%Response.WriteWelcome!%/Font%Next%/Body/Html9.2ASP技术9.2.3ASP文件的结构–以上程序可以用文本编辑器(Notepad)或专用开发工具(VisualInterDev6.0)来输入,并将其放在Web服务器的虚拟目录下,然后在浏览器的地址栏中输入,运行结果如图9-5所示:图9-59.2ASP技术9.2.4ASP的内置对象和应用组件–ASP的内置对象如表9-1所示:内置对象功能Request从浏览器(用户端)发送到服务器端的所有信息Response将HTML和各种其他信息返回到用户端浏览器Server为ASP的应用程序提供服务器的功能Session在此对象中维护每个用户的信息Application对给定应用程序的所有用户共享信息ObjectContext提供分布式事务处理ASPError获取发生在ASP页面中的错误信息9.2ASP技术9.2.4ASP的内置对象和应用组件–ASP的内置组件如表9-2所示:内置对象功能Request从浏览器(用户端)发送到服务器端的所有信息Response将HTML和各种其他信息返回到用户端浏览器Server为ASP的应用程序提供服务器的功能Session在此对象中维护每个用户的信息Application对给定应用程序的所有用户共享信息ObjectContext提供分布式事务处理ASPError获取发生在ASP页面中的错误信息9.2ASP技术9.2.4ASP的内置对象和应用组件1.Request对象-Request对象用于访问用HTTP请求传递的信息,也就是客户在请求页面或提交表单时提供的所有信息。-通常来说,Request对象所得到的信息是从浏览器传递给服务器的,传递的方式有两种:Get和PostRequest对象包括五个数据集合、一个属性和一个方法。Request对象的语法格式为:Request[.数据集合|属性|方法](变量)Request拥有以下五个数据集合,分别是:–Form:取得客户端表格元素中所填入的信息。–QueryString:取回URL请求字符串。–Cookies:取得客户端浏览器的Cookies值。–ServerVariable:取得服务器端环境变量的值。–ClientCertificate:从客户端取得身份验证的信息。9.2ASP技术9.2.4ASP的内置对象和应用组件(1)Form数据集合-在ASPWeb页面上,可以使用Request对象的Form集合收集来自客户端的以表单形式发往服务器的信息。-语法格式为:Request.Form(String参数)[(索引.计数)]其中,String参数是用来指定集合要检索的表格元素名称(如:Text,Radio等)。索引是一个可选的参数,可以取得Form下名称相同的表格元素,它的值是由0~Request.Form(String参数).Count之间的任意整数。Request.Form(String参数).Count属性值代表所有名称相同的表格元素的数目,如果不存在名称相同的表格元素其返回值为1,若该表格元素不存在则返回值为0。需要注意的是Form集合对应的方法为Post,而QueryString集合对应的方法为Get。9.2ASP技术9.2.4ASP的内置对象和应用组件【例9-2】Form数据集合应用实例,从客户端获取表单信息。客户端脚本程序chap9-2.html代码如下,运行结果如图9-6所示:HtmlHeadTitleForm数据集合演示实例客户端程序/Title/HeadBodyFormName=form2Method=PostAction=chap9-3.aspH1Align=“Center”FontFace=“华文隶书”系统登录/Font/H1CenterP用户名称InputType=TextName=txtusernameSize=10/PP登录密码InputType=PasswordName=txtuserpwdId=txtuserpwd1Size=10InputName=“login”Type=“Submit”Id=“submit1”Value=“登录”InputName=“clear”Type=“Reset”Id=“submit2”Value=“清除”/P/Body/Html9.2ASP技术9.2.4ASP的内置对象和应用组件图9-69.2ASP技术9.2.4ASP的内置对象和应用组件–当单击“登录”按钮以后,由chap9-3.asp程序读取表单中的数据。