服务器端开发技术_第1页
服务器端开发技术_第2页
服务器端开发技术_第3页
服务器端开发技术_第4页
服务器端开发技术_第5页
已阅读5页,还剩97页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第9章

服务器端开发技术9.1B/S体系结构中数据库接口技术9.2ASP技术

9.3数据库访问组件ADO9.4习题第一页,共一百零二页。9.1B/S体系结构中数据库接口技术9.1.1

CGI(CommonGatewayInterface)CGI即通用网关接口,是早期建立应用程序与Web服务器之间接口的标准,其工作方式是:用户通过浏览器用HTTP以Form(表单)向Web服务器发出请求;Web服务器接收用户的请求,用一个子进程启动CGI,将用户的请求传给CGI;CGI向数据库服务器发出请求,数据库服务器执行相应的查询操作;数据库服务器将服务请求返回给CGI;CGI将查询结果转换成网页形式返回给Web服务器,Web服务器再通过HTTP将网页传给用户的浏览器显示出来,其工作示意图如图9-1所示:第二页,共一百零二页。9.1B/S体系结构中数据库接口技术9.1.1

CGI(CommonGatewayInterface)图9-1第三页,共一百零二页。9.1B/S体系结构中数据库接口技术9.1.1

CGI(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-2第七页,共一百零二页。9.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-3第九页,共一百零二页。9.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的工作流程图9-4第十二页,共一百零二页。9.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!”。<Html><Head><Title>ASP程序实例</Title></Head><Body><%Fori=5To8%><FontSize=<%=i%>><Br><%Response.Write"Welcome!"%></Font><%Next%></Body></Html>第十五页,共一百零二页。9.2ASP技术

9.2.3ASP文件的结构以上程序可以用文本编辑器(Notepad)或专用开发工具(VisualInterDev6.0)来输入,并将其放在Web服务器的虚拟目录下,然后在浏览器的地址栏中输入\chap9-1.asp,运行结果如图9-5所示:图9-5第十六页,共一百零二页。9.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所示:<Html><Head><Title>Form数据集合演示实例客户端程序

</Title></Head><Body><FormName="form2"Method="Post"Action="chap9-3.asp"><H1Align=“Center”><FontFace=“华文隶书”>系统登录</Font></H1><Center><P>用户名称<InputType="Text"Name="txtusername"Size="10"></P><P>登录密码<InputType="Password"Name="txtuserpwd"Id="txtuserpwd1"Size="10"><InputName=“login”Type=“Submit”Id=“submit1”Value=“登录”><InputName=“clear”Type=“Reset”Id=“submit2”Value=“清除”></P></Body></Html>第二十一页,共一百零二页。9.2ASP技术

9.2.4ASP的内置对象和应用组件图9-6第二十二页,共一百零二页。9.2ASP技术

9.2.4ASP的内置对象和应用组件当单击“登录”按钮以后,由chap9-3.asp程序读取表单中的数据。服务器端脚本程序chap9-3.asp代码如下,运行结果如图9-7所示:<Html><Head><Title>Form数据集合演示实例服务器端程序</Title></Head><Body><Center><H2><P>用户名称:<%=Request.Form("txtusername")%></P><P>用户密码:<%=Request.Form("txtuserpwd")%></P><%IfRequest(“txtusername”)=“sa”AndRequest(“txtuserPwd”)=“123”ThenResponse.Write“输入正确!”ElseResponse.Write“用户名称或用户密码有误,请重新输入!”EndIf%></H2></Center></Body></Html>第二十三页,共一百零二页。9.2ASP技术

9.2.4ASP的内置对象和应用组件图9-7第二十四页,共一百零二页。9.2ASP技术

9.2.4ASP的内置对象和应用组件(2)QueryString数据集合QueryString集合的功能就是从查询字符串中读取用户提交的数据。一般来讲,查询字符串变量直接定义在超级链接的URL中,即接在“?”字符之后。例如:语法格式为:Request.QueryString(变量名称)[(索引.计数)]其中,索引是一个任选的参数,可以取得“?”字符后名称相同的变量名,而且在“?”字符之后还可以用符号“&”来连接两个不同的参数。例如:计数是一个整数,是从0~Request.QueryString(变量名称).Count的任意值。Request.QueryString(变量名称).Count表示所有名称相同的变量数,如果不存在名称相同的变量,其值为1,若该变量不存在,其值为0。第二十五页,共一百零二页。9.2ASP技术

9.2.4ASP的内置对象和应用组件【例9-3】QueryString数据集合应用实例chap9-4.asp,获取客户端信息。运行此程序时,注意在浏览器的地址栏中输入:欢迎登录本站点。运行结果如图9-8所示:

<Html><Head><Title>QueryString数据集合演示实例</Title></Head><Body><%ForEachItemInRequest.Querystring("QS")Response.WriteItem&"<Br>"Next%></Body>

</Html>第二十六页,共一百零二页。9.2ASP技术

9.2.4ASP的内置对象和应用组件图9-8第二十七页,共一百零二页。9.2ASP技术

9.2.4ASP的内置对象和应用组件(3)ServerVariables数据集合ServerVariables数据集合可用于提供有关随HTTP请求一起传递的HTTP头信息。语法格式为:Request.ServerVariables(服务器环境变量)服务器环境变量是只读变量,只能查阅,不能设置。服务器环境变量如教材中表9-3所示:第二十八页,共一百零二页。9.2ASP技术

9.2.4ASP的内置对象和应用组件【例9-4】ServerVariables数据集合应用实例chap9-5.asp,只有从http://localhost/index.asp连接过来的才被允许访问。运行结果如图9-9所示(此处省略图显示):

<Html><Head><Title>Servervariables数据集合演示实例</Title></Head><Body><%From=Request.Servervariables("HTTP_REFERER")IfFrom=""ThenResponse.Write(“欢迎进入本站点!”)ElseResponse.Write(“请先登录!”)EndIf%>

</Body>

第二十九页,共一百零二页。9.2ASP技术

9.2.4ASP的内置对象和应用组件(4)ClientCertificate数据集合ClientCertificate数据集合从浏览器发出的请求中获取认证字段。一般情况下,IIS和PWS都默认为不向客户端要求身份验证的命令。语法格式为:Request.ClientCertificate(Key[SubField])Key:指定要获取的验证字段名称。第三十页,共一百零二页。9.2ASP技术

9.2.4ASP的内置对象和应用组件涉及到的关键字如表9-4所示:关键字含义描述Subject包含了使用证书的客户信息Issuers包含可信任的第三方的有关信息ValidFrom证书有效的起始时间ValidUntil证书有效的终止时间SerialNumber一个包含认证的串行数字的字符串,由四组十六进制ASCII码表示Certificate一个包含整个认证信息的二进制流的字符串Flags提供其他额外的身份验证信息的标识第三十一页,共一百零二页。9.2ASP技术

9.2.4ASP的内置对象和应用组件Subfield:可选参数,用于按Subject或Issuers关键字检索单独的字段。附属参数如表9-5所示:子参数意义C指定国家的名称O指定公司或组织的名称OU指定组织部门的名称

CN指定客户端的一般名称L指定客户端的位置S指定州名或省名T指定个人的职位头衔GN指定姓名的名I指定姓名的姓第三十二页,共一百零二页。9.2ASP技术

9.2.4ASP的内置对象和应用组件(5)Cookies数据集合Cookies数据集合是用来记录客户端信息的,当访问一个需要惟一标识地址的Web站点时,它会在硬盘上留下一个标记,下一次当访问同一个站点时,站点的页面会查找这个标记。每个Web站点都有自己的标记,标记的内容可以随时读取,但只能由该站点的页面完成。语法格式:Request.Cookies(String)[(Key)|.Attribute]其中,参数String指要检索其值的Cookie。Key为可选参数,用于从Cookies字典中检索子关键字的值。Attribute属性指定Cookies自身的有关信息。第三十三页,共一百零二页。9.2ASP技术

9.2.4ASP的内置对象和应用组件Attribute参数见表9-6所示:属性说

明Domain

只写,若被指定,则Cookie将被发送到对该域的请求中去Expires只写,指定Cookie的过期日期。为了在会话结束后将Cookie存储在客户的磁盘上,必须设置该日期。若此项属性的设置未超过当前日期,则在任务结束后Cookie将到期HasKeys只读,确定Cookie是否包含多个关键字。若包含多个,则HasKeys返回True,否则为FalsePath只写,若被指定,则Cookie将只发送到对该路径的请求中。若未设置该属性,则使用应用程序的路径Secure只写。设置该Cookie的安全性第三十四页,共一百零二页。9.2ASP技术

9.2.4ASP的内置对象和应用组件【例9-5】假设建立了一个名为BookCookies的Cookies字典,代码如下:

Response.Cookies(“BookCookies”)(“SF”)=“数学分析”Response.Cookies(“BookCookies”)(“XD”)=“线性代数”Response.Cookies("BookCookies")("GS")="高等数学"第三十五页,共一百零二页。9.2ASP技术

9.2.4ASP的内置对象和应用组件应用实例chap9-6.asp:使用Cookies数据集合读取BookCookies字典的值,代码如下:

<Html><Body><%ForEachCookieInRequest.CookiesIfNotRequest.Cookies(Cookie).HaskeysThenResponse.Write"<Br>"&Cookie&"="&Request.Cookies(Cookie)ElseResponse.Write“<Br>”&Cookie&“包含以下键值:”ForEachKeyInRequest.Cookies(Cookie)Response.Write"<Br>"&Key&"="&Request.Cookies(Cookie)(Key)NextEndIfNext%></Body></Html>第三十六页,共一百零二页。9.2ASP技术

9.2.4ASP的内置对象和应用组件(6)Request对象的属性Request对象只有一个属性:TotalBytes属性。该属性是一个只读属性,可取回客户端响应数据的字节数。语法格式为:counter=Request.TotalBytes其中counter变量会取回客户端送回的数据字节大小,本属性一般与BinaryRead方法配合使用。(7)Request对象的方法Request对象只有一个方法:BinaryRead方法,语法格式为:Variant=Request.BinaryRead(counter)其中,counter变量是利用TotalBytes属性取回客户端送回的数据字节大小。注意:该方法与Request.Form方法合用可能会造成执行上的错误。第三十七页,共一百零二页。9.2ASP技术

9.2.4ASP的内置对象和应用组件2.Response对象

Response对象的功能与Request对象的功能正好相反,用于向客户端浏览器发送信息,从而通过脚本代码中的HTTP变量识别服务器及其容量、发送到客户端的有关信息及该范围内将要保存到客户端浏览器中的一些新的Cookie。该对象与Request对象相互配合,可以实现服务器端和浏览器端的数据传输,这是网页实现动态功能的基础。Response对象的语法格式为:Response.数据集合|属性|方法第三十八页,共一百零二页。9.2ASP技术

9.2.4ASP的内置对象和应用组件(1)Response对象的数据集合Cookies是Response对象中唯一的数据集合。使用Cookies可以设置客户端浏览器内的Cookie值。Cookie的语法格式为:Response.Cookies(Var)[(Key)|.Attribute]=Cookie值这里,Var代表Cookie的名称。如果指定了Key,则该Cookie就是一个字典。Attribute指定Cookie自身的有关信息。可取Domain,Expires,Path,HasKeys值,意义同前。【例9-6】建立名为user的Cookie字典,其中,关键字分别为name、password<%Response.Cookies("user")("name")="zhaohuiqin“Response.Cookies("user")("password")="123"%>

第三十九页,共一百零二页。9.2ASP技术

9.2.4ASP的内置对象和应用组件(2)Response对象的的属性①Buffer属性:Buffer属性用来设置是否把Web页面输出到缓冲区。Buffer属性语法格式为:Response.Buffer=BooleanValue(布尔值)

注意:当Buffer属性设置为True时,如果调用了End方法,缓冲区的内容也会发送给客户。当Buffer属性值为False时,Web服务器在处理每一句脚本时都向客户发送信息,而不是一直等到所有的脚本处理完才发送。第四十页,共一百零二页。9.2ASP技术

9.2.4ASP的内置对象和应用组件②Expires属性:控制页面在缓冲区中的有效时间。Expires属性语法格式为:Response.Expires=Intnum其中,参数Intnum是用来设置保留的时间长度,单位是min(分钟)③ExpiresAbsolute属性:用来指定缓存于浏览器中的页面的确切到期日期和时间。语法格式为:Response.ExpiresAbsolute[=[日期][时间]]其中,日期的值用标准的月/日/年格式表示注意:Expires属性采用相对时间来实现(即再过多长时间该页面失效),而ExpiresAbsolute属性采用绝对时间来实现(即在某一特定时间该页面失效)。

第四十一页,共一百零二页。9.2ASP技术

9.2.4ASP的内置对象和应用组件(3)Response对象的方法①Write方法:可以把信息从服务器端直接送到客户端。语法格式为:Response.Write.String

其中,参数String为变量或字符串,变量可以是所使用的脚本语言中的任意数据类型。【例9-7】Write方法应用实例chap9-7.asp,运行结果如图9-10所示。

<Html><Head><Title>Write方法演示实例</Title></Head><Body><%Fori=1To4%><%Response.Write"欢迎"%><Br><%Next%></Body><Html>

第四十二页,共一百零二页。9.2ASP技术9.2.4ASP的内置对象和应用组件图9-10第四十三页,共一百零二页。9.2ASP技术

9.2.4ASP的内置对象和应用组件②Redirect方法:引导客户端的浏览器立即重定向到程序指定的URL位置,也就是进入另一个Web页面,类似于HTML中的超链接。语法格式为:Response.RedirectString

其中,参数String为网址变量或URL字符串Write【例9-8】Redirect方法应用实例:根据客户的不同身份,为不同的客户指定不同的页面。客户端脚本程序chap9-8.html代码如下,运行结果如图9-11所示。<Html><Head><Title>Write方法演示实例</Title></Head><Body><%Fori=1To4%><%Response.Write"欢迎"%><Br><%Next%></Body><Html>

第四十四页,共一百零二页。9.2ASP技术9.2.4ASP的内置对象和应用组件图9-11第四十五页,共一百零二页。9.2ASP技术

9.2.4ASP的内置对象和应用组件当用户在文本框内输入待查找的关键字,并选择相应的搜索引擎后,单击“搜索”按钮,将执行程序chap9-9.asp,代码如下,运行结果如图9-12所示(此处省略图显示)。

<Head><Title>Redirect方法服务器端脚本演示实例</Title></Head><Body><%Response.Buffer=True%><%Dimstr,urltostr=Trim(Request.QueryString("searchstring"))If(Len(str))Then

str=Server.UrlEncode(str)IfRequest.QueryString("engines")="Yahoo"Thenurlto=Elseurlto=EndIfurlto=urlto&"?p="&strResponse.RedirecturltoEndIf%></Body></Html>第四十六页,共一百零二页。9.2ASP技术

9.2.4ASP的内置对象和应用组件③Clear方法:清除WebServer缓冲区中的内容,但不能清除HTTP首部。其语法格式为:Response.Clear注意:在使用这一方法时,Response对象的Buffer属性必须设置为True,否则,将会导致程序执行时的错误。④End方法:使Web服务器立即停止处理ASP程序,在调用End方法之后出现的所有代码都不会被执行,包括纯HTML代码的显示。语法格式为:Response.End⑤Flush方法:立即将缓存在服务器端的Response输出信息发送到客户端显示。语法格式为:Response.Flush

第四十七页,共一百零二页。9.2ASP技术

9.2.4ASP的内置对象和应用组件3.Session对象使用Session对象可以存储特定的用户会话所需的信息。当用户在应用程序的不同页面之间切换时,存储在Session对象中的变量不被清除,始终存在。可以使用Session方法显式地结束一个会话和设置空闲会话的超时时间。Session数据存储在服务器端,Cookie数据存储在客户端,因此不能通过查看Cookie来得到用户Session里的内容。如果浏览器不支持使用Cookie,或者浏览器设置为拒绝接受Cookie,则不能使用Session。Session对象的语法格式为:Session.属性|方法|事件第四十八页,共一百零二页。9.2ASP技术

9.2.4ASP的内置对象和应用组件(1)Session对象的属性①SessionID属性:当用户第一次在一个应用程序中申请一个ASP页面时,ASP将使用一个复杂的算法赋予Session一个值,然后将这个值以Cookie的形式保存在用户的计算机上。随后,每当用户向Web服务器请求一个页面,该Cookie就被放在HTTP请求的首部中发送到服务器上,这样服务器就能够根据SessionID识别用户。创建和检查这些Cookie需要一定的系统开销,可以使用<%@EnableSessionState=False%>标记来禁用Web服务器或特定页面的Cookie。SessionID属性就是用来访问这一值的,它以长整型数据类型返回。其语法格式为:Session.SessionID第四十九页,共一百零二页。9.2ASP技术

9.2.4ASP的内置对象和应用组件【例9-9】SessionID属性应用实例chap9-10.asp,运行结果如图9-13所示。

<Head><Title>SessionID属性演示实例</Title></Head><Body>当前的SessionID为:

<%=Session.SessionID%><Br>

创建一个Session(“Counters”)变量,并且将内容设置为2<%Session("Counters")=2%></Body></Html>第五十页,共一百零二页。9.2ASP技术

9.2.4ASP的内置对象和应用组件图9-13第五十一页,共一百零二页。9.2ASP技术9.2.4ASP的内置对象和应用组件②Timeout属性:如果用户在指定时间内没有请求或刷新应用程序中的任何页,会话将自动结束。这段时间的默认值是20min。对于一个特定的会话,如果想设置一个与默认的超时值不同的值,可以设置Session对象的Timeout属性。Timeout属性以min为单位,为该应用程序中的Session对象指定超时时限,其语法格式为:Session.Timeout[=IntNum]第五十二页,共一百零二页。9.2ASP技术9.2.4ASP的内置对象和应用组件(2)Session对象的方法Session对象只有一个方法,就是Abandon方法。该方法用于释放Web服务器用于保存某个用户会话信息的存储空间。语法格式为:Session.Abandon(3)Session对象的事件①Session_OnStart事件:在服务器创建新会话时发生,服务器在执行请求的页之前先处理该脚本。Session对象的OnStar事件中的代码(如果有的话)保存在global.asa文件中。语法格式为:<ScriptLanguag="VBScript"RUNAT=Server>SubSession_OnStart…EndSub

</Script>第五十三页,共一百零二页。9.2ASP技术9.2.4ASP的内置对象和应用组件②Session_OnEnd事件Session_OnEnd事件在用户会话结束时或脚本中调用了Session对象的Abandon方法时被触发。Session_OnEnd事件过程同样保存在global.asa文件里。语法格式为:

<ScriptLanguage="VBScript"RUNAT=Server>SubSession_OnEndt

EndSub

</Script>第五十四页,共一百零二页。9.2ASP技术9.2.4ASP的内置对象和应用组件4.Application对象可以使用Application对象在给定的应用程序的所有用户之间共享信息,并在服务器运行期间持久地保存数据。当一个缺省的Web站点应用程序或虚拟目录应用程序的—个页面接收到第一个请求时,则产生—个Application对象,紧接着会为该用户产生一个Session对象,并开始该用户的会话。当更多会话开始时,单个的Application对象仍会保持在作用域内。只有当Web服务器停止工作,或这个应用程序真正从服务器上卸载时,该应用程序才会关闭,Application对象也就被销毁Application对象的语法格式为:Application.属性|方法|事件第五十五页,共一百零二页。9.2ASP技术9.2.4ASP的内置对象和应用组件(1)Application对象的属性Application对象没有内置的属性,但用户可以创建自己的属性,又称为Application变量。语法格式为:Application(“属性|集合名称”)=属性值由于存储在Application对象中的数据可以被所有用户读取,所以Application对象的属性特别适合在应用程序的用户之间传递信息。第五十六页,共一百零二页。9.2ASP技术9.2.4ASP的内置对象和应用组件(2)Application对象的方法①Lock()方法:用于锁定对象,禁止其他用户修改Application中的属性。这样在同一时刻只有一个用户对Application对象进行操作,以保证数据的一致性和完整性。直到调用Application对象的Unlock方法,才允许下一个用户修改Application的属性。如果用户没有明确地调用Unlock方法,则服务器将在ASP文件结束或超时后解除对Application对象的锁定。语法格式为:Application.Lock②Unlock方法:用于解除对Application对象的锁定,允许其他用户修改Application对象的属性。语法格式为:Application.UnLock第五十七页,共一百零二页。9.2ASP技术9.2.4ASP的内置对象和应用组件(3)Application对象的事件①Application_OnStart事件:仅在第一个用户请求时发生,并且只被每个应用触发一次。如果随后还有第二、第三用户访问该站点,Application_OnStart事件都不会再发生,因为应用已处于运行状态。语法格式为:

<ScriptLanguage="VBScript"RUNAT=Server>SubApplication_OnStart

EndSub

</Script>第五十八页,共一百零二页。9.2ASP技术9.2.4ASP的内置对象和应用组件②Application_OnEnd事件:在退出应用时或Web服务器被关闭时,于Session_OnEnd事件之后发生。同样对每个应用来说,Application_OnEnd事件也仅被触发一次。语法格式为:

<ScriptLanguag="VBScript"RUNAT=Server>SubApplication_OnEnd

EndSub

</Script>第五十九页,共一百零二页。9.2ASP技术9.2.4ASP的内置对象和应用组件【例9-10】Application应用实例chap9-11.asp,运行结果如图9-14所示:<Head><Title>Application演示实例</Title></Head><Body><%IfisEmpty(Application("Counters"))ThenApplication.LockApplication(“Counters”)=0‘到访人数初始化Application.UnlockEndIfApplication.Lock‘进入网页的次数加一Application("Counters")=Application("Counters")+1Application.Unlock%>

来访人数共计:<%=Application("Counters")%><Br></Body></Html>第六十页,共一百零二页。9.2ASP技术9.2.4ASP的内置对象和应用组件图9-14第六十一页,共一百零二页。9.2ASP技术9.2.4ASP的内置对象和应用组件(4)Session与Application的比较两者都允许用户自定义属性,对象中的变量都可以进行存取,都有生命周期和作用域,但它们的生命周期和作用范围却是完全不同的。Session对象是每位连接者自己所拥有的,每有一个连接就为它单独产生一个Session对象,有多少个连接就有多少个对象,结束一个连接就终止一个Session对象。而Application对象是所有该网页连接者共有的一个对象。它是当有第一个连接时产生,直至所有连接都断开或Web服务器被关闭而终止。Session对象通常被用来记录单个用户的信息,如:身份密码、个人喜好等。Application对象则被用来记录所有用户的公共信息,如:主页访问记数器、公共讨论区的信息等。

第六十二页,共一百零二页。9.2ASP技术9.2.4ASP的内置对象和应用组件5.Server对象Server对象提供对服务器访问的基本方法,主要包括创建ActiveX组件实例对象、映射目录和编码解码。语法格式为:Server.属性|方法(1)Server对象的属性Server对象的属性只有一个,即ScriptTimeOut。该属性的主要功能就是用于设置一个脚本文件执行的最长时间。语法格式为:Server.ScriptTimeOut=n其中,参数n为指定的延时时间长度,单位是s而不是min。系统的默认值为90s。用户可以通过设置参数n的值来改变某个脚本文件执行的最长时间,但不能低于90s,否则仍以默认值作为脚本文件执行的最长时间。第六十三页,共一百零二页。9.2ASP技术9.2.4ASP的内置对象和应用组件(2)Server对象的方法①HTMLEncode方法:允许对特定的字符串进行HTML编码。如果想显示某个HTML页面中涉及到的实际HTML代码或ASP脚本,必须使用Server对象的HTMLEncode方法。这样,当在浏览器中显示HTML字符串时,就不会把它解释为文本格式的指令。语法格式为:Server.HTMLEncode(String)。其中,参数String是指欲编码的字符串,它的功能是将字符串编码为ASCII形式的HTML文件。第六十四页,共一百零二页。9.2ASP技术9.2.4ASP的内置对象和应用组件②URLEncode方法:类似于HTMLEncode方法,但它将URL编码规则应用到指定的字符串中。当字符串数据以URL的形式传递到服务器时,在字符串中不允许出现空格,也不允许出现特殊字符。如果有空白字符,在结果中会使用“+”字符来代替,特殊字符则用%、数值与字符的方式表示。URLEncode方法的语法格式为:Server.URLEncode(String)其中,参数String是指URL字符串。第六十五页,共一百零二页。9.2ASP技术9.2.4ASP的内置对象和应用组件③MapPath方法:是将指定的虚拟路径(当前服务器上的绝对路径或相对于当前页面的路径)映射到物理路径上去。MapPath方法的语法格式为:Server.MapPath(String)其中,参数String是指虚拟路径字符串。语句<%=Server.Mappath(“/”)%>中String以一个正斜杠(/)或反斜杠(\)开始,则MapPath方法将返回服务器端的宿主目录。该方法通常被用来打开一个数据库文件或文本文件。第六十六页,共一百零二页。9.2ASP技术9.2.4ASP的内置对象和应用组件④CreateObject方法:可以用来创建已经注册到服务器上的ActiveX组件实例。CreateObject方法的语法格式为:Server.CreateObjec("ProgID")这里,ProgID指定了组件标识。组件可以是各种形式的可执行程序(DLL、EXE等),不必考虑它的位置,只要在WindowsNT(或98)中登记注册了这些程序,COM就会在系统注册表(Registry)里维护这些资料,让程序员调用。注意:CreateObiect方法仅能用来创建外置对象实例,不能用来创建系统的内置对象实例。CreateObiect方法建立的对象实例仅在创建它的页面中有效。第六十七页,共一百零二页。9.2ASP技术9.2.4ASP的内置对象和应用组件⑤Transfer方法:将请求从正在执行的ASP文件发送到另一个文件中。在传输过程中,原来请求的ASP文件立即终止执行,但并不清除输出缓冲区。请求信息然后在目标文件中变得可用并开始执行。执行过程中,该文件与原来请求的文件访问同一组内部对象。Transfer方法的语法格式为:Server.Transfer(String)其中,参数String是指包含了新文件URL的字符串。【例9-11】Transfer方法应用实例:假若有两个.asp文件,chap9-12.asp和chap9-13.asp,运行结果如图9-15所示(此处省略图显示):

第六十八页,共一百零二页。9.2ASP技术9.2.4ASP的内置对象和应用组件Chap9-12.asp代码如下:<Html><Head><Title>Transfer方法演示实例</Title></Head><Body><%Response.Write"欢迎进入chap9-12.asp文件<BR>"Response.WriteSession.SessionIDResponse.Write("<BR>")Response.Write"正准备进入chap9-13.asp文件<BR>“Server.Transfer("chap9-13.asp")%></Body></Html>Chap9-13.asp代码如下:<Html><Head><Title>Transfer方法演示实例</Title></Head><Body><%Response.WriteSession.SessionIDResponse.Write("<BR>")Response.Write"欢迎进入chap9-13.asp文件<BR>“%></Body></Html>第六十九页,共一百零二页。9.2ASP技术9.2.4ASP的内置对象和应用组件⑥Execute方法:用于停止当前文件的运行,并将控制权交给作为一个参数传递过来的另一个文件,执行其内容,然后再将控制权交给原始的文件。该方法类似于许多编程语言的过程调用,只不过过程调用是执行一个过程,而Execute方法是执行一个完整的ASP文件。语法格式为:Server.Execute(String)其中,参数String是指控制权变换文件的相对URL。第七十页,共一百零二页。9.2ASP技术9.2.4ASP的内置对象和应用组件【例9-12】Execute方法应用实例:假若有两个.asp文件,chap9-14.asp和chap9-15.asp,运行结果如图9-16所示(此处省略图显示):Chap9-14.asp代码如下:<Html><Head><Title>Execute方法演示实例</Title></Head><Body><%Response.Write"正在执行chap9-14.asp文件<BR>"Response.Write"正准备进入chap9-15.asp文件<BR>“Server.Execute("chap9-15.asp")Response.Write"退出chap9-15.asp文件,返回chap9-14.asp文件<BR>"%></Body></Html>chap9-15.asp代码如下:<Html><Head><Title>Transfer方法演示实例</Title></Head><Body><%Response.Write"欢迎进入chap9-15.asp文件<BR>“%></Body></Html>第七十一页,共一百零二页。9.2ASP技术9.2.4ASP的内置对象和应用组件⑦GetLastError方法:用于发现执行文件的ASP程序过程中最后产生的错误信息。返回一个ASPError对象的参考实例,包括产生错误的文件、错误行号及错误代码等。语法格式为:Server.GetLastError()

第七十二页,共一百零二页。9.2ASP技术9.2.4ASP的内置对象和应用组件6.ObjectContext对象使用ObjectContext对象可以提交或放弃一项由MTS(MicrosoftTransactionServer)管理的事务。ASP给出了“<%@TRANSACTION%>”标识,用来标识事务处理要求,运行时如果遇到“<%@TRANSACTION=Required%>”就知道这个Web页面要使用分布式事务处理来运行。这时数据的传输必须在每一个数据传输点都成功,否则,所有的数据更新都将无效。@TRANSACTION标识可以声明该Web页面以MTS分布式处理事务,其语法格式为:<%@TRANCTION=Required|Supported|Not_Supported%>其中的功能参数说明见表9-7所示:第七十三页,共一百零二页。9.2ASP技术9.2.4ASP的内置对象和应用组件@TRANCTION标识使用的参数见表9-7所示:参数名功能简述Required将Web页面初始化为分布式事务处理型SupportedWeb页面需要分布式事务Not_SupportedWeb页面并不需要分布式事务第七十四页,共一百零二页。9.2ASP技术9.2.4ASP的内置对象和应用组件(1)ObjectContext对象的方法①SetComplete方法:立即终止该Web页面所进行的事务处理,如果事务中的所有组件都调用SetComplete方法,事务将完成,所有处理的数据都有效。SetComplete方法忽略脚本中以前调用过的任何SetAbort方法。该方法的语法格式为:ObjectContext.SetComplete②SetAbort方法:立即终止该Web页面所进行的事务处理,但该次事务处理被声明为失败,所有处理的数据都无效,必须被还原。该方法的语法格式为:ObjectContext.SetAbort()第七十五页,共一百零二页。9.2ASP技术9.2.4ASP的内置对象和应用组件(2)ObjectContext对象的事件①OnTransactionCommit事件:在一个脚本事务成功提交后发生,当该事件发生时,如果脚本中有OnTransactionCommit子例程,服务器将处理该子例程。②OnTransacfionAbort事件:当事务处理失败时,该事件将发生。如果脚本中有OnTransactionAbort子例程,当该事件发生时,Web服务器将执行它。在ObjectContext实现的两种方法中,SetAbort方法完全终止事务。这样,MTS不更新在第一阶段所进行的操作。事务终止时,将处理脚本的OnTransactionAbort事件。第七十六页,共一百零二页。9.2ASP技术9.2.4ASP的内置对象和应用组件7.ASPError对象ASPError对象是ASP3.0中的新对象,用来获取发生在ASP页面中最后的错误细节,这些错误信息通过Server.GetLastError方法返回。(1)ASPError对象的属性①ASPCode属性:该属性返回一个包含了由ASP或IIS产生的错误号的字符串,主要用于显示一些引用外部组件的错误。其语法格式为:String=ASPError.ASPCode②ASPDescription属性:该属性的值由ASP预处理器产生,将返回包含了错误信息的字符串,对大部分的脚本错误该值为空。其语法格式为:String=ASPError.ASPDescription第七十七页,共一百零二页。9.2ASP技术9.2.4ASP的内置对象和应用组件③Category属性:该属性是表示错误根源的字符串,该错误可能由ASP、脚本语言或外部对象产生。其语法格式为:String=ASPError.Category④Column属性:该属性返回页面中产生错误的字符位置。其语法格式为:Long=ASPError.Column⑤Description属性:当错误出现时,该属性总有一个值,该值是一个对错误进行描述的短字符串。其语法格式为:String=ASPError.Description⑥File属性:该属性在产生错误时返回正在处理页面的名字。其语法格式为:String=ASPError.File⑦Line属性:该属性在产生错误时返回页面中错误检测位置的行号。其语法格式为:Long=ASPError.Line第七十八页,共一百零二页。9.2ASP技术9.2.4ASP的内置对象和应用组件⑧Number属性:对于发生的错误,Number属性返回标准的COM错误代码。其语法格式为:Long=ASPError.Number⑨Source属性:该属性在产生错误时返回出现错误行的实际源代码。其语法格式为:String=ASPError.Source第七十九页,共一百零二页。9.2ASP技术9.2.4ASP的内置对象和应用组件(2)配置定制的错误页当ASP页面出现错误并且该页无法发送到浏览器上时,IIS将发送一个包含错误信息的页面来代替该页面,该页面可以是一般的HTML页面,也可以是ASP页面。IIS安装了许多缺省的处理错误的页面,这些页面通常保存在winnt\help\iishelp\common目录下,它们像其他页面一样,可以在浏览器中打开,也可以在文本编辑器中分析它们的源代码。除了这些缺省的错误处理页面,可以指示IIS装载其他的页面来代替这些页面,这些错误页面通常称为定制的错误页面。第八十页,共一百零二页。9.3数据库访问组件ADO9.3.1ADO对象模型

ADO是Web数据库应用的最佳选择,目前许多基于Web的应用系统都使用ADO技术来实现对Web数据库的访问。ADO是一个ASP内置的服务器组件,是一座连接Web应用程序和OLEDB的桥梁,运用它结合ASP技术可以在网页中执行SQL命令,达到数据库访问的目的。ADO技术是通过ADO对象的属性、方法来完成相应的数据库访问。ADO共有以下七种独立的对象,如教材表9-8所示。第八十一页,共一百零二页。9.3数据库访问组件ADO9.3.1ADO对象模型

ADO的对象模型如图9-17所示:图9-17第八十二页,共一百零二页。9.3数据库访问组件ADO9.3.2用Connection对象连接数据库Connection对象用于建立和管理应用程序与数据源间的连接,也可用它来执行一个命令。Connection对象的属性和方法可用来打开和关闭数据库连接,并发布对更新信息的查询。1.创建Connection对象在使用Connection对象之前必须创建该对象,语法格式为:<%Setconn=Server.CreateObject("ADODB.Connection")%>字符串“ADODB.Connection”是用来创建Connection对象的ProgID。conn是创建的Connection对象。也可以使用<Object>标记来创建对象,语法格式为:<ObjectRUNAT="Server"ID="Conn"

ProgID="ADODB.Connection"></Object>Connection对象的属性见教材表9-9所示,方法见教材表9-10所示:第八十三页,共一百零二页。9.3数据库访问组件ADO9.3.2用Connection对象连接数据库2.连接数据源:①使用DSN连接数据源先用“ODBC数据源管理器”创建系统DSN,才能确保所有的Web用户可以使用相应的数据库。例如:假设已经为books_management数据库创建系统DSN,名称为books,登录账户为sa,密码为123。方法为:<%conn.Open"books","sa","123"%>也可以先设置Connection.String属性,再调用Open方法。<%conn.ConnectionString="DSN=books;UID=sa;PWD=123“conn.Open%>或者直接将连接串作为参数来调用:<%conn.Open"DSN=books;UID=sa;PWD=123"%>第八十四页,共一百零二页。9.3数据库访问组件ADO9.3.2用Connection对象连接数据库②使用连接字符串:通过一个包含数据提供者连接数据源所需的信息的字符串实现与数据源的连接。这些信息包括两部分:数据提供者的名字和数据源的位置。例如:使用该方法来实现与MicrosoftSQLServer中Server服务器上的books_management数据库的连接。<%Setconn=Server.CreateObject("ADODB.Connection")conn.Open"Provider=SQLOLEDB;DataSource=server;UID=sa;PWD=123;_Database=books_management"%>其中,Provider指出数据提供者。Database指出在SQLServer上的待访问的数据库。DataSource指出SQLServer的计算机名或IP地址。第八十五页,共一百零二页。9.3数据库访问组件ADO9.3.2用Connection对象连接数据库3.执行SQL查询:Connection对象的Execute方法用来执行。Execute方法的语法格式是:conn.Execute(CommandText,[RecordAffected],[Options])其中,CommandText是包含表名、SQL语句或存储过程等的字符串。RecordAffected是可选参数,返回本次操作所影响到的记录数。Options是可选参数,用来指定CommandText参数的类型。系统提供如下常量参数:AdCMDTable:被执行的字符串是一个表的名字。AdCMDText:被执行的字符串是一个命令文本。AdCMDStoredProc:被执行的字符串是一个存储过程名。AdCMDUnknown:不指定字符串的内容(默认值)。第八十六页,共一百零二页。9.3数据库访问组件ADO9.3.2用Connection对象连接数据库【例9-13】从数据库books_management中的数据表reader中查询所有记录。代码如下:

<%'定义DSN字符串

strdsn="DSN=books;UID=sa;PWD=123"Setconn=Server.CreateObject("ADODB.Connection")'创建Connection对象

conn.Openstrdsnstrsql="Select*Fromreader"Setrs=conn.Execute(strsql)rs.Closeconn.Close%>第八十七页,共一百零二页。9.3数据库访问组件ADO9.3.2用Connection对象连接数据库【例9-14】从数据库books_management中的数据表reader中删除姓名为“余华”这一读者。代码如下:

<%strdsn="DSN=books;UID=sa;PWD=123“Setconn=Server.CreateObject("ADODB.Connection")conn.Openstrdsnstrsql=“DeleteFromreaderWhere姓名=‘余华’”Setrs=conn.Execute(strsql)rs.Closeconn.Close%>第八十八页,共一百零二页。9.3数据库访问组件ADO9.3.3

用RecordSet对象控制数据Recordset对象是一个记录的集合,是按字段(或列)和记录(或行)的形式构成的二维表。每个Recordset对象表示表中的记录或运行一次查询所得到的结果。可以在非显式打开Connection对象的情况下,打开一个Rec

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论