有关asp.net的Application对象的学习

Application对象是个应用程序级的对象,用来在所有用户间共享信息,并可以在Web应用程序运行期间持久地保持数据。
Application的属性:
  方法如下:
  Application对象没有内置的属性,但是我们可以自行创建其属性。
  <% Application("属性名")=值 %>
  其实大部分Application变量都 存放在Contents集合中,当你创建一个新的Application变量时,其实就是在Contents集合中添加了一项。下面两个脚本是等效的:
  <% Application("greeting")="hello!" %> 或 <% Application.contents("greeting")="hello!"由于Application变量存在集合里,所以如果想要全部显示,其方法我们已经多次使用,例如For Each循环。  
<%
For Each item IN Application.Contents
   Response.write("
"&item&Application.Contents(item))
next
%>
Application的方法:
  Application的方法只有两个方法:一个是Lock,另一个是Unlock。其中Lock方法用于保证同一时刻只能一个用户对Application操作。Unlock则用于取消Lock方法的限制。如:
<%
Application.Lock
Application("visitor_num")=Application("visitor_num")+1
Application.Unlock
%>
Application的事件:
1、Application_OnStart()
  当事件应用程序启动时触发。
2、Application_OnEnd()
  此事件应用程序结束时触发。
  这两个事件过程都是必须定义在Global.asp文件中,一般把连接数据的函数定义在这两个事件,然后放在Global.asp中。例如:
Sub Application_OnStart
    Application("tt18_ConnectionString") = "driver={SQL       
                     Server};server=jeff;uid=sa;pwd=;database=test"
End Sub
  一个数组能够被定义成Application对象,不过这个数组只能作为一个对象保存,而不能用Application(0)取出其值。可以定义一个临时数组实现这种功能。如:
<%
dim Array()
Array=Application("array")
for i = 0 to ubound(array)
  Response.write Array(i)
next i
%>
  同样要修改这个Application对象也可以定义一个临时数组,把Application对象赋给数组,然后修改这个数组的元素,最后把数组赋回Application对象。

 

 

、Application对象可以实现应用程序的状态管理
 (1)Application的应用:

      ◆可以统计目前上站的人数

      ◆可以用于网站上不同用户之间的通信

      ◆可以记录广告条被点击的次数

      ◆可以在每个主页上显示动态信息

      ◆可以从数据库提取数据供多个网页使用

(2)创建Application变量的语法

      Application(“变量名称”)如:Application("Welcome")="欢迎光临我的主页!"

(3)Application变量不会自己消亡,在使用中应注意:
Application变量会始终占据内存,创建过多的变量会降低响应速度
Application变量在三种情况下被中止:服务被中止、Global.asa被改变或者该Application被卸载

(4)使用Application对象的语法
Application. 属性│方法

(5)Application对象的方法

Application的方法都是用于处理多个用户对存储在Application中的数据进行写入的问题。共有两个:Lock方法:防止其他客户端更改Application对象的值。(仅当前客户可修改和存取);Unlock方法:与Lock方法相反,允许其他客户端更改Application对象的值。
   具体用法:

      Application.Lock-锁定Application对象所有变量

      Application.Unlock-解锁Application对象所有变量
如;
       Application.Lock;

       Application("NumCount")=Application("NumCount")+1;NumCount是在Application_OnStart事件设置的变量

       Application.Unlock;

 (6)Application对象的事件
      Application有两个事件:

      Application_OnEnd       Application_OnStart

      Application_OnStart:当每个Application对象开始时会激活该事件

      Application_OnEnd:当每个Application对象结束时会激活该事件
上述两个事件必须放在Global.asax文件
(7)Application对象的集合
Application的集合有两个:
1Contents数据集合

      Contents允许程序取得用户能使用的所有的Application对象

      注:不包括用<OBJECT>标记与CreateObject方法建立的对象

      语法结构:

      Application.Contents(Application 对象名称)
2、StaticObjects数据集合可以取得以<OBJECT>标记建立的Application对象

      Application.StaticObjects(对象变量名称)

 

      利用<OBJECT>标记创建对象的语法:

  <OBJECT RunAt=Server SCOPE=对象 ID=实例对象名>

Application对象重要的方法调用:

·Add方法,加入一个对象到Application对象的Stat集合中
例如:
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
nameStr=Application.GetKey(0)
表示取得Application对象中Stat集合的第一个对象的标识名

·Lock方法,锁住其他线程对Application对象中stat集合的访问权限。这个方法主要是用来防止对Application的变量操作过程中,其他并发程序可能造成的影响。比如在记数过程中,如果不进行上锁操作,就有可能发生脏读脏写。例如,开始从变量中取得记数值1,
如果在记数并写回到变量之间,另一页面对它发生了一次记数,并先行写回变量,那么最终写回到变量中的值为2,而并不是实际的3。如果采用了上锁机制,在页面读出变量到记数并写回变量的过程中,即使发生了另一次记数,由于变量被锁住,它也不可能在变量被写回以前取得成功,只有等待变量释放,从而形成两者对变量操作的串行性,避免了数据的脏读和脏写。

·Unlock方法,对Application对象Stat集合锁定的解锁操作,释放资源以供其他页面使用。

下面我们就上边学到的方法做一个例子,为了强调lock方法和unlock方法,我们将单独举一个例子。例子是这样的,开始我们创建6个Application变量,赋以数值序号,页面有3个按钮,分别是加1,减1和清除。当点击“加1“按钮后,我们会看到变量的值都会增加1,当点击”减1“按钮后,变量值都减1,当按下清除后,变量都消失了。在清除功能中,我们为了同时演示remove和clear方法,采用最后三个用clear清除,其他的逐一用remove清除。

1. 源程序

<!-- 文件名:Application\FormApplication01.aspx -->

<html>

<script language="vb" runat=server>

Sub Page_Load(o as object,e as eventargs)
dim i as integer

If Not IsPostBack
for i=1 to 6
application.add("item"&i,i)
next
End If

response.clear
for i=0 to application.count-1
response.write(application.GetKey(i) & "=" & application.Get(i) & "<br>")
next

End Sub

Sub AddOne(s as object,e as eventargs)
'变量值加1
dim i as integer
dim j as integer
dim t as string

for i=0 to Application.count-1
j=Application.Get(i)+1
t=Application.GetKey(i)
Application.Set(t,j)
next

Page_Load(s,e)
'刷新画面
End Sub

Sub SubOne(s as object,e as eventargs)
'变量减1
dim i as integer
dim j as integer
dim t as string

for i=0 to Application.count-1
j=Application.Get(i)-1
t=Application.GetKey(i)
Application.Set(t,j)
next

Page_Load(s,e)
'刷新画面
End Sub

Sub Gone(s as object,e as eventargs)
'清空所有变量
dim i as integer

for i=0 to Application.count-3
Application.Remove(i)
next
'演示remove方法
Application.clear
'演示clear方法
Page_Load(s,e)
'刷新画面
End Sub
</script>
<head>
<title>
Application方法试验
</title>
</head>
<body bgcolor=#ccccff>
<center>
<h2>Application方法试验</h2>
<hr>
<form runat=server>
<asp:button type="submit" text="+1" OnClick="AddOne" runat=server />
<asp:button type="submit" text="-1" OnClick="SubOne" runat=server />
<asp:button type="submit" text="清空" OnClick="Gone" runat=server />
</form>
</center>
</body>
</html>

2.开始时,输出画面:

3.当两次点击+1后,输出的变量值:


4.当点击”-1”后,变量的值为:


5.当点击清空后,输出的画面

接下来,我们看一个使用lock和unlock方法制作计数器的例子:Application对象对不同的连接者是共用的,因此适合制作计数器。

程序代码如下:省略
--------------------------
asp.net改善application对象加快存储速度
在传统的asp中,我们要用application对象去存储应用于整个application的变量。这当然会带来内存消耗的代价。在.net中,我们可以用static变量来改善它,采用static 变量在大多数时候存储的速度会比application对象快。
 
  做法: 

  创建一个webapplication,假设名称为webapplication1,在global.aspx中的global类中增加一个静态的成员sgreeting.

 
  public class global : system.web.httpapplication 
  { 
  public static string sgreeting = "china is great!"; 
  …… 
  }

  在webform1中增加一个label,名称为label1.
 
  在page_load()中为label1的text属性赋值。

  private void page_load(object sender, system.eventargs e)
  { 
  label1.text = webapplication1.global.sgreeting;
  }

  运行程序后将会看到china is great!

 

Application对象
Application对象是HttpApplicationState类的一个实例,定义ASP.NET应用程序中的所有应用程序对象通用的方法、属性和事件。HttpApplicationState类是由用户在global.asax文件中定义的应用程序的基类。此类的实例Application对象是在ASP.NET基础结构中创建的,而不是由用户直接创建的。一个实例在其生存期内被用于处理多个请求,但它一次只能处理一个请求。这样,成员变量才可用于存储针对每个请求的数据。
Application的原理是在服务器端建立一个状态变量,来存储所需的信息。要注意的是,首先,这个状态变量是建立在内存中的,其次是这个状态变量是可以被网站的所有页面访问的。
1、Application对象的属性

Application对象的方法如表所示:
2、Application对象的方法

在网站“PageObject”中添加“Application.aspx”页面,在Application.aspx.cs中为Page_Load事件添加如下代码:
3、Application对象的示例
protected void Page_Load(object sender, EventArgs e)
{
/***************声明三个Application对象变量并赋值****************/
Application["App1"] = "Value1";
Application["App2"] = "Value2";
Application["App3"] = "Value3";
/***************声明三个Application对象变量并赋值***************/
/********************读取变量及其值*********************/
int N;
for (N = 0; N < Application.Count; N++)
{
Response.Write("变量名:" + Application.GetKey(N));
Response.Write("变量值:" + Application.Get(N) + "<br>");
}
/********************读取变量值*********************/
/****************修改变量值*********************************/
Application.Lock(); //由于Application是多用户共享
//,防止不同用户同时修改变量值,因此需要先锁定Application对象
Application["App1"] = "zhang";
Application["App2"] = "wang";
Application["App3"] = "li";
Application.UnLock();
/****************修改变量值*********************************/
/********************读取变量及其值*********************/
Response.Write("修改后的变量值" + "<br>");
for (N = 0; N < Application.Count; N++)
{
Response.Write("变量名:" + Application.GetKey(N));
Response.Write("变量值:" + Application.Get(N) + "<br>");
}
/********************读取变量值*********************/
Application.Clear(); //清楚所有变量
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值