作者:心动吧明生KISS
想写一个在线统计的程序。所以这一节学application函数..发现他和session的区别仅仅是一个共用和私用的问题...其实非常简单的.........看下面的.......
示例图
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>application对像</title>
</head>
<body>
<%
xx=request.form("radiobutton")
if xx="setapplication" then
application(request.form("abcxd"))=request.form("abcxda")
response.write "建立成功,application变量名: " & request.form("abcxd")
'变量名 内容 可以同时建立多个application
end if '但并不建议这样使用。因为application是比较消耗服务器资源的
if xx="legapplication" then
response.write "内容值为: " & application(request.form("abcxd"))
'请取application所创建的内容.取值格式: application("application变量名")
end if
'| 标准写法应该是下面的
'| application.lock '应该先锁定,因为application如果同一时间多人请求的话。会造成堵塞从而无法准确判断.所以先锁定并执行让其他等待
'| application("abcxd")="心动吧"
'| application.unlock '最后将他解锁。并让别人可以访问。。
'|
'|---------你只需要用文本的替换'|就可以得到源文了
'|
'|
'| 写一个统计在线人数的小程序看看.用application的onstart事件来执行,首先我们要先建一个:global.asa文件.然后工始写代码
'| 而且必需放置在网站的根目录下.而且不能写入任何输出的代码..注意了。。
'| 在这里可以写二种语言.一种是vbscript 或 javascript 而我们学的是asp所以写vbscript
'| application.onstart 当第一个用户第一次访问网站时发生(任何页面)
'| application.onend 当网站关闭时发生的事件
'| session.onstart 当某个用户第一次访问页面时产生的。
'| session.onend 当用户关闭网站或者session过期时发生的事件
'| 开始写代码
'| <script language="vbscript" runat="server">
'| sub application_onstart '首访事件子程序
'| session.timeout=15 '设置session值只有15分钟
'| application.lock '锁定以免造成混乱
'| application("abcxd")=0 '初始化人数0
'| application.unlock '解锁让其他人可以执行
'| end sub 一个事件就写完了.再写个闭关时的事件
'|
'| sub application.onend '结束事件
'| '想做什么就在这里写代码.我暂时未想到
'| end sub '下面就继续session事件
'|
'| sub session.onstart '当某个人第一次浏览网页时发生的事件
'| application.lock '在线人数加1
'| application("abcxd")=application("abcxd")+1
'| application.unlocak
'| end sub
'|
'| sub session_onend '在线人数减一
'| application.lock
'| application("abcxd")=application("abcxd")-1
'| application.unlock
'| end sub
'| </script>
%>
<form id="form1" name="form1" method="post" action="">
<p>
<label>
变量名:
<input type="text" name="abcxd" />
内 名:
<input type="text" name="abcxda" />
</label>
<label>
<input type="submit" name="Submit" value="提交" />
</label>
</p>
<label>
<input type="radio" name="radiobutton" value="setapplication" />
建立application</label>
<label>
<input type="radio" name="radiobutton" value="legapplication" />
读取application</label>
</form>
</body>
</html>
一、application对象与session对象
| | session对象 | application对象 |
| 不同点 | session对象所保存的信息只能应用于单个用户,也就是说一个用户访问网页所建立的session变量,别人是看不到的。 sessionid它是每个session的代号,是由服务器所产生的,几个用户访问同一个session,它所建立的sessionid是不同的,使这些session保存的信息互不干扰。 | application对象所保存的信息是所有用户共享的,application变量对所有的用户都有效的。 |
| 相同点 | 两者都在服务器端保存的。 | |
二、application对象的使用方法:
| 建立 | application(“application变量名”)=值 | 例:application(“studio”)=“fif小组” |
| 读取 | 变量= application(“application变量名”) | 例:s= application(“studio”) |
例:
| 写入1.ASP | 读取2.ASP |
| <% Session(“studio”)=”fif”‘建立一个session变量并赋值 Application.lock‘锁定application对象 Application(“studio”)=”asp”‘建立一个application变量并赋值 Application.unlock‘解锁application对象 %> | <% Response.write(“session:” &session(“studio”)&”<br>”) Response.write(“application:” &application(“studio”)&”<br>”) |
| 解:因为所有用户共享application 对象,为了防止产生冲突,所以要锁定application对象,在操作完application变量以后再解锁。 | 解:分别读取session变量和application变量的值。 |
例:
<%
application(“pageshow”)=application(“pageshow”)+1
%>
解:它所在的页面,每次被访问时,变量pageshow的值就会自动加1.
代码缺陷:这段代码看起来,好象是没有什么缺陷,但是有一种情况,比如:有很多人同一时间访问这个网页,这条加1的语句就可能只生效一次,这是因为application对象是共享的,在同一时间不可能处理两个请求,这样产生的结果就不会准确。
解决方法:所以要先用application语句,先把application锁定(此时已锁定,只能有一个用户进行操作。)锁定以后,别的用户就不能对application对象进行操作了,而等待的application对象可以操作,使用完application对象变量以后,再用application.unlock 解锁以后,别的用户就可以操作了。
三、application对象和session对象的事件
事件是一种程序的运行机制,特点是当某种事情发生,就会执行一段代码,就是说当有特定的事件发生,会执行一段代码。这段代码一能放置到ASP方件里,他需要写到一个名叫global.asa文件里,这个文件必须放置到网站的根目录。
例:在站点的根目录下,新建一个文件,命名为:global.asa
<script language="VBScript" runat="server">
发生某件事情以后的内容
</script>
解:事件内容可以写VBScript语言,也可以写JAVAScript语言,现在我们所学的ASP就是VBScript语言,因此我们可以理解为这个文件里可以写asp语言,但是这个文件里所写的asp语言,不能用<% %>这个标记,它只能使用<script language="VBScript" runat="server"></script>。并且这个文件里不能放置任何输出内容。如html代码及response对象的输出。
常用的四个事件:
1、 application_onstart
这个事件是指,当第一个用户,第一次访问网沾的网页时发生的。
2、 application_onend
这个事件是指,当网站的WEB服务器关闭时发生的
3、 session_onstart
这个事件是指,当某个用户第一次访问网站的网页时发生的
4、 session_onend
这个事件是指,当某个用户SESSION超时或关闭时发生的。
例:统计在线人数的一个例子
global.asa文件
<script language="VBScript" runat="server">
sub application_onstart ‘SUB事件名称
session.timeout=15 ‘设置session的超时时间
application.lock ‘锁定
application("online_number")=0 ‘设置一个application对象变量,并同赋值为0
application.unlock ‘解锁
end sub ‘事件结束
sub qpplication_onend ‘当服务器关闭时所发生的事件
end sub ‘服务器关闭时什么也不想做,因此里面的代码为空
sub session_onstart
application.lock
application("online_number")=application("onlne_number")+1 ‘在线人数累加1
application.unlock
end sub
sub session_onend
application_lock
application("online_number")=application("online_number")-1 ‘在线人数减1
application.unlock
end sub
</script>
解运行过程:服务器启动,监视是否有第一个人第一次访问这个网站。如果等到了这个人,就执行这段代码,这种情况第一次,第一个人,在服务器进行期间,只能发生一次,也就是只能发生一次这样的事件。
注:事件并不同子程序,子程序是我们在代码中调用执行的,而事件是系统判断是否有某种事情发生而自动执行的,事件是根据是否发生某种事情来自动执行的。
操作程序:
1、 保存文件global.asa
2、 新建文件a.asp(暂不向这个文件添加任何代码)
3、 重启IIS(使服务器处于没有任何人访问过的状态。)
4、 用浏览器打开a.asp(结果显示空)
解:事件是根据某种情况发生而执行的,刚才重新启动IIS服务器,现在访问的a.asp这个页面就是第一个人第一次访问这个网站,对系统而言,就是发生了这个事件,发生了这个事件就会执行系统文件中代码。
第一段代码和第三段代码都发生了,所以执行了两个事件。
5、 再从另外一台计算机上打开a.asp文件
6、 再编辑一下a.asp文件
<%
Response.write(“当前在线人数为:”&application(“online_number”))
%> ‘输出application变量的值
7、 保存 浏览显示:当前在线人数为:2
解:自己访问这个页面时发生了一次session_onstart事件变量加1,用另外的电脑访问时又发生了一次session_onstart事件,所以application变量又加了1。这样就可以制作系统在线人数。
特别注意:对象变量是很消耗系统资源的,在以后的编程中十分的注意。
原创文章如转载,请注明:转载自心动吧黑客BLOG [ http://www.abcxd.com/abcxd/ ]
本文链接地址:http://www.abcxd.com/abcxd/abcxdArticle/asp/application.html