610 likes | 761 Views
5.3 Server对象. Server 对象的主要作用是提供对服务器上方法和属性的访问。其中大多数方法和属性是作为实用程序的功能服务的。其语法规则如下: Server.property | method 其中: property 为 Server 对象的属性, method 为 Server 对象的方法 Server 对象的属性: ScriptTimeOut :规定脚本文件最长执行时间,超过时间就停止执行. 5.3 Server对象. Server 对象的方法 : CreatObject :用于创建已注册到服务器的 ActiveX 组件、应用程序或脚本对象的实例
E N D
5.3 Server对象 Server对象的主要作用是提供对服务器上方法和属性的访问。其中大多数方法和属性是作为实用程序的功能服务的。其语法规则如下: Server.property | method 其中: property为Server对象的属性, method为Server对象的方法 Server对象的属性: ScriptTimeOut:规定脚本文件最长执行时间,超过时间就停止执行
5.3 Server对象 • Server对象的方法 : • CreatObject:用于创建已注册到服务器的ActiveX组件、应用程序或脚本对象的实例 • Execute:转到新的网页执行,执行完毕后返回原网页,继续执行后面的语句 • Transfer:转到新的网页执行,执行完毕后不返回原网页,而是停止执行。 • MapPath:将虚拟路径转化为物理(绝对)路径 • HTMLEncode:将字符串转换成HTML编码格式 • URLEncode:将字符串转换成URL编码格式 • GetLastError:返回一个错误代码 2
5.3.1 ScriptTimeout属性 • ScriptTimeout是Server对象唯一一个属性。该属性作用是设置ASP程序所允许的最长时间,在脚本运行超过这一设置时间之后即作超时处理,单位为“秒”,系统的默认值为90秒。当系统运行达到该值后将自动停止页面的执行,如此,可以从内存中删除包含可能进入死循环的错误页面或者是那些需要长时间等待其他资源的网页。其语法规则如下: • Server.ScriptTimeout=NumSeconds(整数) • 其中,NumSeconds为指定的秒数 • 例如,指定服务器处理脚本在120秒后超时。 <% Server.ScriptTimeout=120 %> • 【例eg5_10.asp】用do while编写一段死循环代码,使得该死循环代码在执行了100秒后,自动退出循环 5_11timeout.asp 5_11timeout-1.asp
5.3.2 CreateObject方法 CreateObject这是Server对象最主要的方法,它用于创建组件、应用程序或脚本对象的实例,返回可以在代码中使用的一个引用,利用它就可以调用其它外部程序或组件的功能了其语法规则如下: Server.CreateObject( progID ) 其中progID表示组件、应用程序或脚本对象的对象类型。其格式为 [Vendor.]component[.Versi on]。 注意:默认情况下,由 Server.CreateObject 方法创建的对象的作用域为当前页。即当前页面处理完成之后,服务器将自动破坏刚才由Server.CreateObject 方法创建的对象。 例如,创建自动轮换广告组件MSWC.AdRotator的一个实例OneAd的代码为: <% Set OneAd = Server.CreateObject("MSWC.AdRotator") %> 比如下面的语句将创建一个数据库连接对象实例: <% Set conn=Server.CreateObject("ADODB.Connection") %>
5.3.3 Execute方法 Execute方法是 IIS5.0 新增的功能,其功能为调用指定的 ASP 程序,且执行完被调用的程序之后再返回原来的程序继续执行继续执行Execute方法后面的语句。有点类似于程序语言中的函数调用。其语法规则如下: Server.Execute(path) 其中,其中path表示要执行文件的相对路径或绝对路径。 【例eg5_11.asp】编写一段代码,要求在第一张网页中调用执行第二张网页,执行完后再返回本网页。 例:5_execute.asp 5_execute-1.asp
Eg5_11.ASP Eg5_11-1.ASP
5.3.4 Transfer方法 前面的Excute方法在调用了另一个ASP程序后,会继续执行当前页面的调用代码下面的代码,即Excute方法执行后,原始页面保留了控制权。Transfer方法的功能也是程序的转移执行,但与Excute不同的是,该方法执行转移代码后,不再返回原始页面,即原始页面失去了控制权。Transfer方法的语法规则如下: Server.Transfer(path) 其中,其中path也表示要执行文件的相对路径或绝对路径。 。 【例eg5_12.asp】编写一段代码,要求在第一张网页中调用执行第二张网页。注意例5-12执行结果的区别。
例:5_transfer.asp 5_execute-1.asp
Execute、Transfer和Redirect方法的区别 • 三者都是停止执行当前网页,转到新的网页执行。主要区别有: • 一是,Redirect 和Transfer跳转到新网页后,不会再返回原网页,而Execute则会在执行完新网页后,返回原网页继续执行Execute方法后面的语句。 • 二是,Redirect的重定向实际发生在客户端,而Execute和Transfer方法的重定向发生在服务器端,效率更高。 • 三是,Redirect语句不能把一些环境变量一起传递到新网页中,而Execute和Transfer可以。 • 四是,Redirect方法可以转向一个网页或其他网站,而Execute和Transfer方法一般只能转到同一个应用程序的其他文件。 9
5.3.5 MapPath方法 什么是相对路径、绝对路径? MapPath方法,可以将虚拟路径转化为物理路径 MapPath 方法将指定的相对或虚拟路径映射到服务器上相应的物理目录上。若指定的路径以一个正斜杠 (/) 或反斜杠 (\) 开始,则 MapPath方法返回路径时将该指定路径视为完整的虚拟路径。若该指定路径不是以斜杠开始,则 MapPath 方法返回同 .asp 文件中已有的路径相对的路径。其语法规则如下: Server.MapPath(Path虚拟路径字符串) 其中,Path为指定要映射物理目录的相对或虚拟路径。 注意:MapPath 方法不支持相对路径语法 (.) 或 (..)。而且MapPath 方法不检查返回的路径是否正确或在服务器上是否存在。 在何种情况下,需要将虚拟或相对路径转换成绝对路径呢? 在连接文件或数据库之前。 原因是ASP规定我们在连接文件或数据库时,必须指定文件(数据库)的实际路径,这时就必须调用Server.MapPath方法。 【例eg5_13.asp】编写一段代码,要求网页上显示一个不带正斜杠 (/)或反斜杠 (\)的文件的路径,下一行再显示一个带正斜杠 (/)或反斜杠 (\)的文件的路径。 5_12Mappath.asp
5.3.6 HTMLEncode方法 该方法功能是将特殊的符号进行编码,使得特殊符号可以正常显示于客户端的浏览器。(即用来输出为ASCII形式的HTML代码),语法: Server.HTMLEncode(“string | specialcharacter”) 语法如下: Server.HTMLEncode(string) 其中string是转换的字符串常量、变量或表达式。例如: <% strA=Server.HTMLEncode("<br>") '变量strA 返回值为<br> %> String和specialcharacter代表想显示在浏览器中的字符串或特殊符号 常使用该方法的地方是访客留言板和聊天室。若要在客户端写入特殊符号,如< > & 等符号或HTML标记,就可使用Server.HTMLEncode方法对特殊符号进行编码,当客户端的浏览器收到这种经过编码的特殊符号时,会对它们进行译码,然后把译码的结果显示出来。 13
HTMLEncode方法示例 <HTML><HEAD> <TITLE> server.HTMLEncode示例</TITLE></HEAD> <BODY> 这是一个Server示例,用于显示特殊符号,网站地址全名等<p> <% = "<a href=http://www.sina.com.cn> 新浪</a>" %><br> <% = server.htmlencode("<a href=http://www.sina.com.cn>新浪</a>")%><br> <%=server.htmlencode("显示HTML标记<h2></h2>")%><br> <%=server.htmlencode("显示特殊符号< > &") %> </BODY> </HTML> 5_server.asp 14 5_13htmlencode.asp
5.3.7 URLEncode方法 • 该方法也是用来转化字符串,不过它是按照URL规则对字符串进行转换的。按照该规则的规定,URL字符串中如果出现“空格、?、&”等特殊字符,则接收端有可能接收不到准确的字符,因此就需要进行相应的转换。 • 语法如下: • Server.URLEncode(string) • 其中string就是转换的字符串常量、变量或表达式。 : • 例如: • <%=Server.URLEncode(“<a href=’http://www.sohu.com’>搜狐</a>”)%> • 输出: • %3Ca+href%3D%27http%3A%2F%2Fwww%2Esohu%2Ecom%27%3E%CB%D1%BA%FC%3C%2Fa%3E 5_14URLencode.asp 15
5.4 Application对象 • Application对象是什么? • 在Web应用的所有页面中共享数据,Session是记载不同用户各自特定的信息; Application是记载所有客户的公共信息。 • 为什么要用Application对象? • 要了解Application对象的用途,必须先了解变量的生命周期。一般变量的生命周期从执行设定有该变量的ASP网页开始,至网页的执行结果时终止。总之,每次重新进入一个网页时,其中的所有变量的值都会恢复成Empty。若要在网页结束执行时,还能保留变量的内容,以备下一次执行时使用或传递给同一网站下的其它网页,那么就可借助Application对象来实现。 • 像一般变量一样,Application对象也是有生命周期的。 • Application对象的有效期? • 起始于PWS/IIS开始运行而且有人联机时,终止于PWS/IIS关闭。
---- Application对象开始 ------- 变量由此开始 网页 变量的生命期 ------- 变量由此结束 Application对象的生命期 ------- 变量由此开始 网页 变量的生命期 ------- 变量由此结束 …其他网页 ---- Application对象结束 关于变量和Application对象的生命周期的形象化描述
Application对象常用的集合、方法和事件分别如表Application对象常用的集合、方法和事件分别如表 表5-13 Application 对象的常用集合
5.4.1 用户间共享信息 • Application 对象可以在同一虚拟目录及其子目录下所有 .asp 文件构成的ASP 应用程序间的所有用户之间共享信息,并在服务器运行期间持久的保存该共享数据。直到关闭WEB服务器服务使得 Application 停止。 • Application的使用比较简单的,你可以把变量或字符串等信息很容易的保存在Application中,语法: Application(“Application的变量名”)=变量或字符串信息 • 获取Application中的信息也很容易 a=Application(“Application名字”) • 【例eg5_14.asp】编写一段代码,要求在第一张网页中建立一个Application对象并给其赋值,然后在第二张网页中显示该对象的值。Eg5_14-1.asp
5.4.2 Contents集合 • Contents集合是由所有通过脚本命令添加到应用程序的项目组成的集合。我们可以通过 Contents集合来获取给定的应用程序作用域的项目的列表或指定一个特殊项目为操作对象。Application.Contents 集合还支持 For...Each 和 For...Next 循环。其语法规则如下: • Application.Contents(Key) • 其中,参数Key为指定要获取的项目的名称。 • 例如:application.Contents("strName")="卓云" '保存applicatio信息 strName= applicatio.Contents("strName") '读取applicatio信息 • Contents数据集合的属性和方法 : • Count属性:返回数据集合中的变量的数目 • Remove方法:删除数据集合中一个Session变量 • RemoveAll方法:删除数据集合中全部Session变量
5.4.2 Contents集合 <% Application.Lock Application.Contents("strSchool")="北京大学" Application.Unlock Response.Write Application.Contents("strSchool") '输出Application信息 Response.Write Application.Contents.Count '输出Application变量数目 Application.Lock Application.Contents.Remove("strSchool") '删除指定名称的Application变量 Application.Contents.Remove(1) '删除指定索引的Application变量 Application.Contents.RemoveAll '删除所有Application变量 Application.UnLock %> • 【例eg5_15/-1.asp】编写一段代码,要求在第一张网页中建立四个Application对象并给其赋值,然后在第二张网页中利用For...Each 和 For...Next 循环显示该四个对象的值。 23
Eg5_15.asp <%application("bookname")="ASP动态网页设计与实现" application("teachName")="张三" application("studentName")="李四" application("schoolName")="上海师范大学" response.redirect("eg5_15-1.asp") %> Eg5_15-1.asp <HTML><HEAD> <TITLE>循环接收显示Application变量值</TITLE> </HEAD> <BODY> <% for each key in application.Contents response.write("<p>"&application.Contents(key)) next %> </BODY></HTML>
5.4.3 StaticObjects集合 • StaticObjects 集合包含所有的在 Application 对象范围中使用<OBJECT> 标记创立的对象。Application. StaticObjects 集合还支持 For...Each 和 For...Next 循环。其语法规则如下: • Application.StaticObjects(Key) • 其中,参数Key 为要检索的项目的值。 • 【例eg5_16.asp】使用HTML 的<object> 标签追加application对象,然后在网页中利用For...Each 和For...Next 循环显示该这些对象对象的值。 注意:此例配套建立的新文件global.asa必须存放在站点根文件夹中。
Application对象的主要方法、事件 • 由于Application对象多个用户共享的,所以必须要利用其Lock 和 Unlock 方法以确保多个用户无法同时改变某一属性。 • 方法、事件 • 方法有两个: 1.Lock 锁定 2. Unlock 解除锁定 • 事件 • Application_onStart—该Application对象开始前,便调用该程序 • Application _onEnd—该Application对象结束后,便调用该程序
5.4.4 Lock与Unlock方法 • Lock 方法功能是阻止其他客户修改存储在Application 对象中的变量,以保证同一时刻只能一个用户才可以修改该变量。 • Unlock方法的功能则使其他用户修改使用 Lock 方法锁住的Application 对象中的变量。如果用户没有明确调用 Unlock 方法,则服务器将在 .asp 文件结束或超时后即解除对 Application 对象的锁定。该两个方法的语法规则如下: • Application.Lock • Application.Unlock • 【例eg5_17.asp】编写一段代码,利用Application对象统计火车售票系统出售了重庆到北京的火车票的票数,且在页面上显示“现已售出北京-重庆的火车票数为:X张”注意顾客购买车票可能不是在同一售票点购买的。
Eg5_17.asp <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> <html ><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <TITLE>Application.Lock和Unlock方法</TITLE> </HEAD> <BODY> <% application.Lock() ifapplication("beijinChongQing")="" then Application("beijinChongQing")=0 else Application("beijinChongQing")= Application("beijinChongQing")+1 end if application.UnLock() response.write("现已出售北京到重庆的火车票数为: "& Application("beijinChongQing")&" 张") %> </BODY></HTML>
利用Application存储信息(在当前网页中显示留言)利用Application存储信息(在当前网页中显示留言) 5_15.asp <% Option Explicit %>‘表示所用变量必须先定义 <html> <head> <title> Application对象用法示例</title> </head> <body> <form action="" method="post" name="form1"> 请发言:<input type="text" name="pronunciation" size="30"> <input type="submit" VALUE=" 确 定 "> </form> <% Iftrim(request("pronunciation"))<>"" Then '如果有发言内容,就加到Application中 Application.Lock '先锁定 Application("show")= request("pronunciation") & "<br>" & Application("show") Application.Unlock '解除锁定 End if Response.Write Application("show") '显示聊天内容 %> </body> </html> Trim()去掉字符串前后空格
在另外页面中显示留言 5_16.asp <html><head> <title> Application对象示例</title> </head> <body> <form name="form1" method="post" action=""> 请发言:<input type="text" name="pronunciation" size="30"> <input type="submit" value=" 发送 "> </form> <% If trim(request("pronunciation"))<>"" Then '如果有发言内容,就加到Application中 Application.Lock '先锁定 Application("show")= Request("pronunciation") & "<br>" & Application("show") Application.Unlock '解除锁定 End if %> <a href=5_16_1.asp>查看留言</a> </body> </html> 备注
带有发言人昵称的留言板。如5_16kj.asp 5_16-2-2.asp 5_16-2.asp
说明: 语句: Application(“online_su”)=Application(“online_su”)+1的执行会分成三个步骤: (1)读取Application(“online_su”)变量的值 (2)将读到的值加1; (3)将加1之后的值写回Application("online_su") 使用这语句,每次有人浏览这网页,都会让Application(“online_su”)加1,可是若有多人同时浏览,计数就会发生问题。如:当两位联机者同时浏览该网页,并且同时执行以上的步骤(1),则他们读取的值相同(设等于3),接着虽然也都执行了步骤(2)和(3),把加1的值写回Application(“online_su”)得到4的结果,但实际却少加了一次,为解决此问题,在累加语句上下分别加了锁定和解锁语句 所以当某一程序执行了Application.lock方法,其它程序就暂不能使用该对象了,直到它被解锁,即调用了Unlock或结束执行为止。 利用Application制作简易的访问计数器(计算在线人数) 5_17.asp <html> <head> <title>Application对象计算在线人数</title></head> <body> <b><font color="#0000FF"> <% Application.lock Application("online_su")=Application("online_su")+1 application.unlock %> <center><h3>欢迎光临小站<hr></h3> 您是本站的第:<%=Application("online_su")%> 位访客! </body></html>
5.4.5利用Application存储数组信息 • 利用Application对象存储数组信息和Session对象类似,也必须把数组当成一个整体存入和读取,只是存储时别忘了Lock和Unlock就行了。语法如下: • Application(“Application数组”)=数组变量 • 获取Application信息的语法: a= Application(“Session数组”)
利用Application存储数组示例 5_18.asp • 存储示例: <% Dim strNames(1) '声明一个长度为2的数组 strNames(0)= "白芸" strNames(1)= "海霞" Application.Lock '锁定 Application("strNames")= strNames '给Application变量赋值 Application.Unlock '解除锁定 %> • 下面是读取示例: <% Dim strNames '声明一个普通变量 strNames= Application("strNames") '读取Application变量 Response.Write strNames(0) & "您好,欢迎您<br>" Response.Write strNames(1) & "您好,欢迎您<br>" %>
5.5 Session对象 • 为什么要用Session对象? • 因为要用Session对象记载特定客户信息,我总不能用querystring一页一页传递吧? • 已教方法: • URL?Id=…&name=…; Request.querystring • Cookies • Session对象是什么? • 可以用来记录不同客户端独立的数据变量,当上网者在应用程序的各个网页间跳转时,存储在session对象中的变量将不会丢失。 • 访问同一网站,不同客户使用的是不同的session对象记载。
5.5 Session对象 • Session对象的主要功能是提供某个用户在该Web应用的所有页面间共享数据。同时,如果有另外一个用户也同时在访问该Web应用,则该用户也同时拥有自己的Session变量,但这两个用户之间却无法通过Session变量共享信息,如果该两个用户要想共享信息,则必须用上节的Application对象才能实现。故外面可以这样理解: • Session对象是局部变量 • Application对象是全局变量。
5.5 Session对象 • Session的工作原理: 一个应用程序中,当客户端启动一个Session时,ASP会自动产生一个长整数SeesionID,并把它送给客户端浏览器,浏览器会把它存放在Cookies内。 • 提示:session对象的使用必须配合浏览器的Cookies功能。因此在调试使用了Session对象的ASP程序时,请先检查浏览器的Cookies功能是否为打开。若用户使用的浏览器是IE4.x(IE5.x是不允许上网者将Cookies关闭的),请选择“工具”菜单下的“Internet选项“,在出现的对话框中选择”高级“选项卡,选中”安全““Cookies”“总是接受Cookies”
Session对象的属性、方法和事件 表5-16 Session对象的常用集合
Session对象的属性、方法和事件 表5-17 Session对象的常用属性
Session对象的属性、方法和事件 表5-18 Session对象的常用方法
Session对象的属性、方法和事件 表5-19 Session对象的常用事件 • 不过这两个事件只能用在Global.asa文件中
5.5.1页面间共享信息 • Session对象可以使用于用户在同一虚拟目录及其子目录下所有 .asp 文件构成的ASP 应用程序间之间共享信息。可以把变量或字符串等信息很容易的保存在Session中 • 其语法规则如下: • Session ("name")=value • 其中,name为变量名。 OR Session(“Session名字”)=变量或字符串信息 • 【例eg5_18】编写一段代码,要求在第一张网页中建立一个Session对象并给其赋值,然后在第二张网页中显示该对象的值。 • 从Session中调用该信息的语法: a=session(“Session名字”)
利用Session存储信息 存读取Session信息 5_18session-1.asp 存入Session信息 5_18session.asp
5.5.2 Contents集合 • Contents集合是由所有通过脚本命令添加到应用程序的项目组成的集合。我们可以通过 Contents集合来获取给定的应用程序作用域的项目的列表或指定一个特殊项目为操作对象。Session.Contents 集合还支持 For...Each 和 For...Next 循环。其语法规则如下: • Session.Contents(Key) • 其中,参数Key为指定要获取的项目的名称。 • 【例eg5_19.asp】编写一段代码,要求在第一张网页中建立四个Session对象并给其赋值,然后在第二张网页中利用For...Each 和 For...Next 循环显示该四个对象的值。
5.5.3 StaticObjects集合 • StaticObjects 集合包含所有的在 Session对象范围中使用<OBJECT> 标记创立的对象。Session. StaticObjects 集合还支持 For...Each 和 For...Next 循环。其语法规则如下: • Session.StaticObjects(Key) • 其中,参数Key 为要检索的项目的值。 • 【例eg5_20】使用HTML 的<object> 标签追加Session对象,然后在网页中利用For...Each 和For...Next 循环显示该这些对象对象的值。
5.5.4 Session对象的属性 1.CodePage:整形可读写。定义用于在浏览器中显示页内容的代码页。代码页是字符集的数字值,不同的语言使用不同的代码页。例如简体中文的代码页为936。 <% Response.Write(Session.CodePage)%>
5.5.4 Session对象的属性 2.SessionID:长整形只读。返回这个会话的会话标识符,创建会话时,为每个用户返回一个唯一的 SessionID。 • 此 Sessionid 由服务器通过复杂运算产生的一组随机数值,与当前服务器内的其它会话Sessionid不会重复。 • 新会话开始时,服务器将产生的SessionID作为Cookie存储到用户的浏览器中作为会话标记,以后用户请求页面时,浏览器会发送SessionID给服务器,用来识别会话。 • 若要输出当前会话的标识符,则实现的语句是: <% Response.Write(Session. SessionID)%>
5.5.4 Session对象的属性 3、Timeout:整形可读写。以分钟为单位定义Session会话过期的时间期限。若用户在该时间内,没有刷新或请求页面,则结束当前会话。 • 会话超时的时限可在IIS服务器中设置,其默认值为20分钟。也可在页面中根据需要,利用该属性来设置。会话过期的时间设置太长,可能会导致打开的会话太多,从而增大服务器内存资源的开销,对于高访问率的站点,应设置较短的时间期限较好。 例如,若要设置会话超时的时间为5分钟,则设置语句为: <% Session.Timeout=5 %>
5.5.4 Session对象的属性 【例eg5_21.asp】编写一段代码,要求网页中显示默认时间,然后再将超时时间设置为30分钟,并将该超时时间显示出来。
5.5.5 Abandon方法 Session对象到期后会自动清除,但到期前可以用Abandon方法强行清除。 Abandon 方法的功能是删除所有存储在 Session 对象中的对象并释放这些对象的源。需要注意到的时,虽然我们有时并没有明确调用 Abandon 方法,但一旦会话超过了由Timeout设置的超时时间或者系统默认的超时时间,服务器将自动删除这些对象。但需要注意的时,Abandon 方法被调用后服务期是在当前页中所有脚本命令都处理完后才按序删除当前的 Session 对象,即在当前页中所有脚本命令都处理完后,Session 对象才会被真正删除Abandon 方法的语法规则如下: Session.Abandon 【例eg5_22.asp】编写一段代码,要求网页添加4个Session对象,然后显示这些Session对象,在用Abandon方法删除这些对象,删除后在当前页再显示这些对象,然后离开当前页,在另一页中再显示这些Session对象。