第四章 App licat ion和 Sess ion 44.1 Application对象 在讲述 ASPNET的 Application对象之前,我们先来回顾一下ASP的 Application对象。 我们知道由于变量的生命周期受限于网页,所以每当asp文件被解释执行完毕之后时,变量 就会被释放,它的内容将不存在。而在编程过程中,我们有时又需要在页面之间传递变量的 内容。例如,我们在一个登录页面中输入了用户的名字,为了使页面个性化,在后面的页面 显示中,我们希望知道前面输入的用户名,以便于更好的人机交互。这就要求有一种变量传 递的机制。人们最常用的保存变量的内容的方法是使用文件,但是毕竞对文件的的操作是比 较麻烦的事情,有没有更简单的方法呢?其中一种比较简单的方法就是使用 Application对 象来保存我们希望传递的变量。由于在整个应用程序生存周期中, Application对象都是有效 的,所以在不同的页面中都可以对它进行存取,就像使用全局变量一样方便。在asp.net环 境下, Application对象来自 Http applictIonstat类。它可以在多个请求、连接之间共享公用 信息,也可以在各个请求连接之间充当信息传递的管道。 4.4.1.1使用 Application对象 Application对象重要的属性: A|属性,返回应用中保存的所有的公用对象数组 例如 dim MyObjects( as object MyObjects=Application. All 表示用 myobjects取得了当前应用保存的所有对象 AllKeys属性,返回应用中保存的公用对象的名字数组(标识数组) 例如: dim My VarsO as String My Vars=Application AllKeys 即取得了所有保存的公用对象的标识名字到 myvars数组 Contents属性,返回this指针,主要是为了和asp兼容而保留 Count属性,返回当前应用中保存的公用对象的数 dim var Num as integer Var Num=Appliction.count Item属性,返回当前应用中保存的公用对象集合中的指定对象,这是最常用的属性 例如我们前面讨论的,记录变量内容的问题,就是通过item属性来保存的 Appliction Item(变量名)=要保存对象 但是通常我们都会省去item属性写成
第四章 Application 和 Session 4.4.1 Application 对象 在讲述 ASP.NET 的 Application 对象之前,我们先来回顾一下 ASP 的 Application 对象。 我们知道由于变量的生命周期受限于网页,所以每当.asp 文件被解释执行完毕之后时,变量 就会被释放,它的内容将不存在。而在编程过程中,我们有时又需要在页面之间传递变量的 内容。例如,我们在一个登录页面中输入了用户的名字,为了使页面个性化,在后面的页面 显示中,我们希望知道前面输入的用户名,以便于更好的人机交互。这就要求有一种变量传 递的机制。人们最常用的保存变量的内容的方法是使用文件,但是毕竟对文件的的操作是比 较麻烦的事情,有没有更简单的方法呢?其中一种比较简单的方法就是使用 Application 对 象来保存我们希望传递的变量。由于在整个应用程序生存周期中,Application 对象都是有效 的,所以在不同的页面中都可以对它进行存取,就像使用全局变量一样方便。在 asp.net 环 境下,Application 对象来自 HttpApplictionStat 类。它可以在多个请求、连接之间共享公用 信息,也可以在各个请求连接之间充当信息传递的管道。 4.4.1.1 使用 Application 对象 Application 对象重要的属性: ·All 属性,返回应用中保存的所有的公用对象数组 例如: dim MyObjects() as object MyObjects=Application.All 表示用 myobjects 取得了当前应用保存的所有对象 ·AllKeys 属性,返回应用中保存的公用对象的名字数组(标识数组) 例如: dim MyVars() as String MyVars=Application.AllKeys 即取得了所有保存的公用对象的标识名字到 myvars 数组 ·Contents 属性,返回 this 指针,主要是为了和 asp 兼容而保留 ·Count 属性,返回当前应用中保存的公用对象的数目 例如: dim VarNum as integer VarNum=Appliction.count ·Item 属性,返回当前应用中保存的公用对象集合中的指定对象,这是最常用的属性。 例如我们前面讨论的,记录变量内容的问题,就是通过 item 属性来保存的。 Appliction.Item(变量名)=要保存对象 但是通常我们都会省去 item 属性写成:
Application(变量名户=要保存对象 这里需要注意的是, Application保存的对象为应用程序所共享,而net平台又是一个多 用户多线程的环境,因而 Application保存的对象在使用时,要注意避免冲突。 例如 Application ("counter")=Application("counter")+1 它使开始用户保存的数值加1,我们可以利用它来统计页面浏览的次数。但是有一个问 题发生了,那就是如果另外一个页面也使用了上述语句,那么混乱就产生了。设想一下如下 情况,用户a对页面a访问,使 counter+1,然后用户b对页面b的访问, counter又增加了1, 实际上无论对页面a还是页面b,访问都只有一次, counter却增加了2次,由于记数变量的 相同使得我们统计页面的努力化为泡影。 StaticObjects属性,返回在应用程序文件中型如< object runat= erver></ object>定义的 对象的集合 下面,我们对上面学到的各种属性进行应用 例子 我们首先产生6个 Application变量,然后分别用tem属性和叫l属性去逐一取出各 个 Application变量的内容显示出来。注意为了避免其他公用 Application变量的干扰,我们 在页面加载时,调用了 removeall方法,清空应用的所有公用变量。 1.程序源代码 !-文件名: Application\ FormAppliction aspx-> <script language="vb"runat=server> Sub Page Load(o as object, e as eventargs) dim dim sstr as string dim str Array( as String dim objecto as Object dim Obcol as Http StaticobjectscoLlection If Not IsPostback Application. removeall 为防止其他变量干扰,使用前清掉所有的保存变量 保存六个变量 for i=1 to 6 tStr="变量名"& str="内容”& Application( tStr=sSt
Application(变量名)=要保存对象 这里需要注意的是,Application 保存的对象为应用程序所共享,而.net 平台又是一个多 用户多线程的环境,因而 Application 保存的对象在使用时,要注意避免冲突。 例如: Application(”counter”)= Application(”counter”)+1 它使开始用户保存的数值加 1,我们可以利用它来统计页面浏览的次数。但是有一个问 题发生了,那就是如果另外一个页面也使用了上述语句,那么混乱就产生了。设想一下如下 情况,用户 a 对页面 a 访问,使 counter+1,然后用户 b 对页面 b 的访问,counter 又增加了 1, 实际上无论对页面 a 还是页面 b,访问都只有一次,counter 却增加了 2 次,由于记数变量的 相同使得我们统计页面的努力化为泡影。 ·StaticObjects 属性,返回在应用程序文件中型如<object runat=server></object>定义的 对象的集合。 下面,我们对上面学到的各种属性进行应用。 例子: 我们首先产生 6 个 Application 变量,然后分别用 item 属性和 all 属性去逐一取出各 个 Application 变量的内容显示出来。注意为了避免其他公用 Application 变量的干扰,我们 在页面加载时,调用了 removeall 方法,清空应用的所有公用变量。 1. 程序源代码 <!-- 文件名:Application\FormAppliction.aspx --> <html> <script language="vb" runat=server> Sub Page_Load(o as object,e as eventargs) dim i as integer dim tStr as String dim sStr as String dim strArray() as String dim tObject() as Object dim ObCol as HttpStaticObjectsCollection If Not IsPostBack Application.removeall '为防止其他变量干扰,使用前清掉所有的保存变量 '保存六个变量 for i=1 to 6 tStr="变量名" & i sStr="内容" & i Application(tStr)=sStr
ext Else 采用tem属性遍历 response. write("< center><b>采用item属性显示<b></ center><br>") str Array=Application Allkeys for i=I to Application.count tStr= str Array(i-1)&"=& Application item(i-1)&"   ite( tStr) 采用Al属性遍历 response. write("<hr>< center><b>采用All属性显示<b>< center><br>") for i=l to Application.count tStr=tObject(i-1).ToString &"   显示有多少个 object定义 response. write("<hr>含有 object标识:"& ObCol count&"个 End lf Appliction对象试验 <h2> Appliction对象试验<h2> form runat=server> asp: button text="显示 Appliction内容" runat== -server i 2.开始时,页面的输出画面
next Else '采用 item 属性遍历 response.write("<center><b>采用 item 属性显示</b></center><br>") strArray=Application.Allkeys for i=1 to Application.count tStr= strArray(i-1) & "=" & Application.item(i-1)&" " response.write(tStr) next '采用 All 属性遍历 response.write("<hr><center><b>采用 All 属性显示</b></center><br>") tObject=Application.All for i=1 to Application.count tStr=tObject(i-1).ToString & " " response.write(tStr) next '显示有多少个 object 定义 ObCol=Application.StaticObjects response.write("<hr>含有 object 标识:" & ObCol.count & "个") End If End Sub </script> <head> <title> Appliction 对象试验 </title> </head> <body bgcolor=#ccccff> <center> <h2>Appliction 对象试验</h2> <hr> <form runat=server> <asp:button text="显示 Appliction 内容" runat=server /> </form> </center> </body> </html> 2.开始时,页面的输出画面
Al:et对象试是 文件)编辑)查看收藏④)工具()帮助QD 簣解鼎 Appliction对象试验 3.当按下显示按钮后,显示 appliction内容的画面: A1ton对象试验-群 crosoft Internet Explo 文件①)编辑)查看Q收藏④)工具①)帮助Q 后退 邮件打印编 采用tem属性显示 变量名1=内容1变量名2=内容2变量名3=内容3变量名4=内容4变量名5=内容5变量 名6=内容6 果用A属性显示 内容1内容2内容3内容4内容5内容6 含有 object标识:0个 Appliction对象试验 完成 「本地 Intranet Application对象重要的方法调用: Add方法,加入一个对象到 Application对象的Sat集合中
3.当按下显示按钮后,显示 appliction 内容的画面: Application 对象重要的方法调用: ·Add 方法,加入一个对象到 Application 对象的 Stat 集合中
例如 表示向 Application的stat集合中加入一个名为 stringl的值为est”的字符串,其实 它的效果和 Application(“ stringl”)="test 以及 Application item(“ string1”)="test”是一样的。 Remove方法,根据给出的标识从 Application对象的Stat集合中删去 例如 Application. Remove(stringI") 表示把标识为 stringl的共享对象 string1从 Application对象的stat集合中删去。使 用它可以清除用Add方法添加的对象 Removeall方法,把 Application对象St集合中的所有对象清除,在我们对属性的使 用举例中,我们已经见过了它的用法,但是值得小心,我们不提倡使用它,因为在编程中你 并不清楚,是否有其他页面要依赖于某个 Application的公用变量,一旦清除将造成不可预 知的错误 Cear方法,作用和 RemoveAl方法一样。 Get方法,允许使用名字标识或者是下标,来取得 Application对象stat集合中的对象 元素。 例如: dim tmp as object tmp=Application. Get("string l") 或者tmp= Application. Get(0) 表示从 Application对象的Stat集合中取得标识为 string或者下标为0的对象 它等价于 tmp= Application(“ string1”) 或者是 tmp=Application item("string 1") tmp=Application item(O) Set方法,修改 Application对象stat集合中指定标识所对应的对象的值。 例如 Application. Set( stringl”"try”) 就把我们开始为 stringl变量设置的值es改为”try”了,它和下边的形式也是一样 Application("stringl")=try GetKey方法,根据给定的下标取得 Application对象的sat集合中相应对象的标识名。 例如 String
例如: Application.Add(“string1”,”test”) 表示向 Application 的 stat 集合中加入一个名为 string1 的值为”test”的字符串,其实 它的效果和 Application(“string1”)=”test” 以及 Application.item(“string1”)=”test” 是一样的。 ·Remove 方法,根据给出的标识从 Application 对象的 Stat 集合中删去 例如: Application.Remove(“string1”) 表示把标识为 string1 的共享对象 string1 从 Application 对象的 Stat 集合中删去。使 用它可以清除用 Add 方法添加的对象。 ·RemoveAll 方法,把 Application 对象 Stat 集合中的所有对象清除,在我们对属性的使 用举例中,我们已经见过了它的用法,但是值得小心,我们不提倡使用它,因为在编程中你 并不清楚,是否有其他页面要依赖于某个 Application 的公用变量,一旦清除将造成不可预 知的错误。 ·Clear 方法,作用和 RemoveAll 方法一样。 ·Get 方法,允许使用名字标识或者是下标,来取得 Application 对象 stat 集合中的对象 元素。 例如: dim tmp as object tmp=Application.Get(“string1”) 或者 tmp=Application.Get(0) 表示从 Application 对象的 Stat 集合中取得标识为 string1 或者下标为 0 的对象 它等价于: tmp=Application(“string1”) tmp=Application(0) 或者是 tmp=Application.item(“string1”) tmp=Application.item(0) ·Set 方法,修改 Application 对象 stat 集合中指定标识所对应的对象的值。 例如: Application.Set(“string1”,”try”) 就把我们开始为 string1 变量设置的值”test”改为”try”了,它和下边的形式也是一样 的: Application(“string1”)=try ·GetKey 方法,根据给定的下标取得 Application 对象的 stat 集合中相应对象的标识名。 例如: dim nameStr as String