在介绍今天的主题之前,我们先来讨论一下Global.asax文件是什么:
Global.asax文件是ASP.NET的应用程序文件,提供了在某个位置响应应用程序级或模块级的事件方法,在该文件中可以实现应用程序的安全性。
Global.asax文件的添加:右键项目——添加——新建项
Global.asax文件继承自HttpApplication类,它维护一个HttpApplication对象池,并在需要时将对象池中的对象分配给应用程序,Global.asax文件自动包含若干个事件,下面以一些常用的事件为例介绍:
(1)Application_Start:第一个应用程序开始事件
(2)Application_End:第一个应用程序结束事件
(3)Session_Start:第一个会话开始事件
(4)Session_End:第一个会话结束事件
其中Application是一个应用程序的实例,在程序第一次被访问的时候就建立此对象,用来维护各个会话的共享数据,其存储方式是一个对象类型。
Session就表示一个会话,也即一次浏览器页面的加载,当然在不同的浏览器或者不同页面开启时表示不同的会话。Session存储用户信息,会话期满后销毁对象。
下面结合一个实例解释什么是一个应用程序Application和一个会话Session,以及Server对象的几个方法。
在Application_Start事件中编写代码,表示一个应用程序的开始,设置为0:Application.Add("count",0);
在Session_Start中编写代码,每开始一个会话,就是count的数量加1:Application["count"]=(int)Application["count"]+1;
在Page_Load事件中编写代码,输出应用程序的会话数量:
Response.Write(Application["count"].ToString());
运行程序:
打开一个浏览器:
当再次打开一个浏览器,同样访问这个应用程序:
表示此时的会话就变成了2个。
为了控制并发性的访问,我们通常在会话中对应用程序加锁,然后在解锁的机制:
protected void Session_Start(object sender, EventArgs e)
{
//为了控制并发访问,要先加锁,然后在解锁
Application.Lock();
Application["count"]=(int)Application["count"]+1;
Application.UnLock();
}
Server是context的一个属性,是HttpServerUtility类的一个对象,其中包含了几个常用的方法,Server.HtmlDecode()、Server.HtmlEncode() Server.UrlEncode()、Server.MapPath,
(前两个是用来处理HTML代码,进行转码的,第三个是用来处理超链接的,最后一个是返回Web服务器上指定的虚拟路径相对于的物理路径。)
简单的解释什么是Server的转码:
如果我们输入一个带有标记的字符,采用转码和不采用转码在客户端上输出的不一样:
一般情况下,我们在界面中打印文字:Response.Write("<h1>标题</h1>");
如果进行转码:Response.Write(Server.HtmlEncode("<h1>标题</h1>"));
此时输出的就是纯文本的形式,程序会把<h1>标题</h1>作为一个字符串使用,直接输出。
这篇博客再次介绍了几个常用的对象,以及对象使用方法,Application对象表示一个应用程序实例,Session表示一个会话,Server是一个获取当前请求的内部服务器对象。
记得之前在敲牛腩新闻发布系统的时候,牛老师就已经教我们用过这方面的知识了,当时不太明白,现在感觉又理解了不少,知识就是在这种反复中学会的!继续加油!