文章教程

6.1ASP.NET内置对象介绍

8/31/2020 9:56:04 PM 人评论 次浏览

图片 1 知识点讲解:光盘:视频\PPT讲解(知识点)\第6章\ASP.NET内置对象介绍.mp4

在ASP中有5个常用内置对象,它们能够满足Web中动态功能的数据交互需求。ASP.NET的内置对象和ASP内置对象的功能完全一样,甚至很多名字都完全一样,如图6-1所示。

6-1

图6-1 ASP和ASP.NET的内置对象对比

ASP.NET的常用内置对象如下。

  • Request:从浏览器获取信息。
  • Response:向浏览器输出信息。
  • Application:为所有用户提供共享信息的手段。
  • Cookies:保留客户端信息,保留在客户端。
  • Session:保留客户端信息,保留在服务器端。
  • Server:获取服务器端信息。
  • Trace:提供在HTTP页输出自定义跟踪和信息。

Response对象是HttpResponse类的一个实例。该类主要是封装来自ASP.NET操作的HTTP响应信息。Response对象实际上是System.Web命名空间中的HttpResponse类,因为习惯原因,所以简称其为Response对象。

1.Response对象属性

Response对象的属性信息如表6-1所示。

表6-1 Response对象的属性信息

属  性

属 性 值

描  述

BufferOutput

包含有关当前响应的缓存策略信息的HttpCachePolicy对象

如果在客户端输出缓冲区,其值为True;否则为False。默认为True

Cache

包含有关当前响应的缓存策略信息的HttpCachePolicy对象

获取Web页的缓存策略(过期时间、保密性、变化子句)

Charset

输出流的HTTP字符集

获取或设置输出流的HTTP字符集

IsClientConnected

如果客户端当前仍在连接,其值为True;否则为False

获取一个值,通过该值指示客户端是否仍连接在服务器上

例如:

<%
Response.Write("清除缓存了" + "<Br>");
%>
<Script Language="C#|" Runat="Server">
void Page_Load(Object sender, EventArgs e){
Response.Write("缓存没有清除" + "<Br>");
Response.Clear();
}
</Script>

在上述代码中,首先在“Page_Load”事件中送出“缓存没有清除”文本,此时的数据存在缓存中。接着使用Response对象的Clear方法将缓存的数据清除,所以刚刚送出的字符串已经被清除。然后IIS开始读取HTML组件的部分,并将结果送至客户端的浏览器。由执行结果只出现“清除缓存了”文本可知,使用Clear方法之前的数据并没有出现在浏览器中,所以程序开始时是存在缓冲区内的。如果在相同的程序中加代码“Response.BufferOutput=false”,这样执行后将先清除缓存,清除的数据不会出现在浏览器上,具体如下。

<%
Response.Write("清除缓存了<Br>");
%>
<Script Language="C#|" Runat="Server">
void Page_Load(Object sender, EventArgs e){
Response.BufferOutput=false;
Response.Write("清除缓冲区前的信息" + "<Br>");
Response.Clear();
}
</Script>

2.Response对象的方法

Response对象可以输出信息到客户端,包括直接发送信息给浏览器、重定向浏览器到另一个URL或设置Cookie的值。Response对象的常用方法信息如表6-2所示。

表6-2 Response对象的方法信息

方  法

描  述

Write

将指定的字符串或表达式的结果写到当前的HTTP输出

End

停止页面的执行并得到相应结果

Clear

在不将缓存中的内容输出的前提下,清空当前页的缓存。仅当使用了缓存输出时,才可以利用Clear方法

Flush

将缓存中的内容立即显示出来。该方法有一点和Clear方法一样,它在脚本前面没有将Buffer属性设置为True时会出错。和End方法不同的是,该方法调用后,该页面可继续执行

Redirect

使浏览器立即重定向到程序指定的URL

ASP.NET中引用对象方法的语法格式如下。

对象名.方法名

其中,“方法”是嵌入到对象定义中的程序代码,它定义对象怎样去处理信息。使用嵌入的方法,对象便知道如何去执行任务,而不用提供额外的指令。

实例013 输出系统的当前时间

源码路径 光盘\daima\6\Write.aspx  视频路径 光盘\视频\实例\第6章\013

本实例使用Response对象的Write方法实现,实例文件Write.aspx的主要实现代码如下。

<script runat="server">
  void Page_Load(object sender, EventArgs e)
  {
    Response.Write("当前时间" + DateTime.Now); 
  }
</script>
范例025:使用URL传递参数
源码路径:光盘\演练范例\025视频路径:光盘\演练范例\025范例026:Session对象跨页面传值
源码路径:光盘\演练范例\026视频路径:光盘\演练范例\026\

在上述代码中,用Response对象的Write方法输出系统的当前时间。实例执行后的效果如图6-2所示。

图片 1

图6-2 输出当前时间

Request对象是HttpRequest类的一个实例。它能够读取客户端在Web请求期间发送的HTTP值。

1.Request对象的属性

Request对象的属性信息如表6-3所示。

表6-3 Request对象的属性信息

属  性

描  述

QueryString

获取HTTP查询字符串变量集合

Path

获取当前请求的虚拟路径

UserHostAddress

获取远程客户端的 IP 主机地址

Browser

获取有关正在请求的客户端的浏览器功能的信息

Form

获取窗体变量的集合

Url

获取当前请求的URL信息

实例014 通过QueryString属性获取页面的传递参数

源码路径 光盘\daima\6\QueryString.aspx  视频路径 光盘\视频\实例\第6章\014

本实例的实现文件为QueryString.aspx,主要实现代码如下。

<%@ Page Language="C#|" %>
……
<script runat="server">
  void Page_Load(object sender, EventArgs e)
  {
    //定义参数为m,并获取参数值
if (Request.QueryString["m"] != null && Request.QueryString["m"].ToString() != "")
    {
      RequestString.Text = Request.QueryString["m"].ToString();
    }
    else
    {
      //如果参数m为空,则输出提示
      RequestString.Text = "参数错误"; 
    }
  }
</script>
……
  <form id="form1" runat="server">
  <div>
    <asp:Label ID="RequestString" runat="server"></asp:Label>
  </div>
  </form>
范例027:统计在线人数
源码路径:光盘\演练范例\027视频路径:光盘\演练范例\027范例028:登录日志
源码路径:光盘\演练范例\028视频路径:光盘\演练范例\028\

在上述代码中,通过Request对象的属性QueryString获取了页面中HTTP的参数。代码执行后,如果获取的参数m的值为空,则输出“参数错误”提示,如图6-3所示;如果在HTTP地址后设置m参数的值,则在页面中显示对应的参数值。例如,如果输入参数“m=iii”,则会在页面中输出“iii”,如图6-4所示。

图片 53

图6-3 参数为空输出的提示

图片 54

图6-4 输出对应的参数值

2.Request对象的方法

Request对象中的常用方法信息如表6-4所示。

表6-4 Request的常用方法信息

方  法

描  述

BinaryRead

执行对当前输入流进行指定字节数的二进制读取

MapPath

为当前请求将请求的URL中的虚拟路径映射到服务器上的物理路径

例如,在现实应用中,可以通过如下代码来获取“文件名”的物理路径。

Request.MapPath("文件名");

Application对象是HttpApplicationState类的一个实例。当在客户端第一次从某个特定的ASP.NET应用程序虚拟目录中请求任何URL资源时,将创建HttpApplicationState类的某个实例。对于Web服务器上的每个ASP.NET应用程序来说,都需要创建一个单独的实例,然后通过内部Application对象公开对每个实例进行引用。

Application对象有如下特点。

  • 数据可以在Application对象内部共享,因此一个Application对象可以覆盖多个用户。
  • 一个Application对象包含的事件,可以触发某些Applicatin对象脚本。
  • 个别Application对象可以用Internet Service Manager来设置而获得不同属性。
  • 单独的Application对象在内存中独立运行。也就是说,即使一个人的Application遭到破坏,也不会影响其他人。
  • 可以停止一个Application对象(将其所有组件从内存中驱除)而不会影响到其他应用程序。

一个网站可以有不止一个Application对象。在典型情况下,可以针对个别任务的一些文件创建个别的Application对象。例如,可以建立一个Application对象来适用于全部公用用户,而再创建另外一个只适用于网络管理员的Application对象。

Application对象使给定应用程序的所有用户之间共享信息,并且在服务器运行期间持久地保存数据。因为多个用户可以共享一个Application对象,所以必须要有Lock和Unlock方法,以确保多个用户无法同时改变某一属性。Application对象成员的生命周期止于关闭IIS或使用Clear方法清除。

1.Application对象的属性

Application对象的属性信息如表6-5所示。

表6-5 Application对象的属性信息

属  性

属 性 值

描  述

AllKeys

HttpApplicationState对象名的字符串数组

获取HttpApplicationState集合中的访问键

Count

集合中的Item对象数,默认值为0

获取HttpApplicationState集合中的对象数

2.Application对象的方法

Application对象的常用方法信息如表6-6所示。

表6-6 Application对象的方法信息

方  法

描  述

Add

新增一个新的Application对象变量

Clear

清除全部的Application对象变量

Get

使用索引关键字或变数名称得到变量值

GetKey

使用索引关键字获取变量名称

Lock

锁定全部的Application变量

Remove

使用变量名称删除一个Application对象

RemoveAll

删除全部的Application对象变量

Set

使用变量名更新一个Application对象变量的內容

UnLock

解除锁定的Application变量

实例015 通过Application对象实现页面的在线统计

源码路径 光盘\daima\6\Application.aspx  视频路径 光盘\视频\实例\第6章\015

本实例的实现过程如下。

(1)编写初始化页面代码文件Application.aspx,其主要实现代码如下。

<%@ Page Language="C#|" %>
……
<script runat="server">
  void Page_Load(object sender, EventArgs e)
  {
    try {
      Application["user_count"] = 1;
      //初始变量赋值
      Response.Write("赋值全局变量user_count"); 
    }
    catch(Exception ex) {
      Response.Write(ex.Message); //输出提示信息
    }
  }
</script>
……
范例029:综合统计用户在线时间
源码路径:光盘\演练范例\029视频路径:光盘\演练范例\029范例030:获取网站访问人数
源码路径:光盘\演练范例\030视频路径:光盘\演练范例\030\

(2)编写文件tongji.aspx代码,其功能是显示当前页面的访问人数。文件tongji.aspx的主要实现代码如下。

<%@ Page Language="C#|" %>
……
<script runat="server">
  void Page_Load(object sender, EventArgs e)
  {
    try
    {
Response.Write("统计在线人数:" + Application["user_count"]);        //统计处理
Application["user_count"] = Convert.ToInt32(Application["user_count"]) + 1;   //在线人数加1
    }
    catch (Exception ex)
    {
      Response.Write(ex.Message);                   //获取异常信息
    }
  }
</script>
……

在上述实例代码中,首先通过文件Application.aspx对全局变量进行赋值,赋值为1。Application.aspx执行后会显示对应的赋值提示信息,如图6-5所示。这样如果运行统计文件tongji.aspx,则会从1开始,逐一统计当前页面的在线人数,如图6-6所示。

图片 55

图6-5 变量初始化赋值

图片 56

图6-6 显示在线统计人数

Session对象是HttpSessionState类的一个实例。该类为当前用户会话提供信息,还提供对可用于存储信息的会话范围的缓存的访问,以及控制如何管理会话的方法。

可以使用Session对象存储特定用户会话所需的信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的Web页时,如果该用户还没有会话,则Web服务器将自动创建一个Session对象。当会话过期或被放弃后,服务器将终止该会话。

当用户第一次请求给定的应用程序中的.aspx文件时,ASP.NET将生成一个SessionID。SessionID是由一个复杂算法生成的号码,它唯一标识每个用户会话。在新会话开始时,服务器将Session ID作为一个Cookie存储在用户的Web浏览器中。

Session对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,另外,其还经常被用在鉴别客户身份的程序中。此时可以使用Session将上述用户的“喜好”存储起来。每当用户登录后,将只展现给用户“喜欢”的内容。要注意的是,会话状态仅在支持Cookie的浏览器中保留,如果客户关闭了Cookies选项,则Session也就不能发挥作用了。例如,若要在一个用户的Session中存储信息,只需直接调用Session对象即可,实现代码如下。

Session("Myname")=Response.form("Username");
Session("Mycompany")=Response.form("Usercompany");

应注意的是,Session对象是与特定用户相联系的。针对某一个用户赋值的Session对象是和其他用户的Session对象完全独立的,不会相互影响。换句话说,每一个用户保存的信息是每一个用户自己独享的,不会产生共享情况。

1.Session对象的属性

Session对象的常用属性信息如表6-7所示。

表6-7 Session对象的常用属性信息

属  性

属 性 值

描  述

Count

Session对象的个数

获取会话状态集合中Session对象的个数

TimeOut

超时期限(以分钟为单位)

获取并设置在会话状态提供程序终止会话之前各请求之间所允许的超时期限

SessionID

会话ID

获取用于标识会话的唯一会话ID

当一个客户端连接服务器后,服务器端都要建立一个独立的Session,并且需要分配额外的资源来管理这个Session。如果客户端因某些原因而没有关闭浏览器,那么在这种情况下,服务器端依然会消耗一定的资源来管理Session,这就造成了对服务器资源的浪费,降低了服务器的效率。所以,可以通过设置Session生存期来减少这种对服务器资源的浪费。

若要更改Session的有效期限,只需设置TimeOut属性即可。TimeOut属性的默认值是20分钟。

2.Session对象的方法

Session对象的常用方法信息如表6-8所示。

表6-8 Session对象的方法信息

方  法

描  述

Add

新增一个Session对象

Clear

清除会话状态中的所有值

Remove

删除会话状态集合中的项

RemoveAll

清除所有会话状态值

实例016 演示创建和使用Session的流程

源码路径 光盘\daima\6\SessionSet.aspx 视频路径 光盘\视频\实例\第6章\016

本实例的实现过程如下。

(1)编写文件SessionSet.aspx,其功能是创建一个名为“MyName”的Session对象。该文件的主要实现代码如下。

<%@ Page Language="C#|" %>
……
<script runat="server">
  void Page_Load(object sender, EventArgs e)
  {
    try
    {
     //给Session赋值
      Session["MyName"] = "mmmmm"; 
      //输出提示
      Response.Write("Session“MyName”已赋值"); 
    }
    catch (Exception ex)
    {
      Response.Write(ex.Message);               //异常处理
    }
  }
</script>
……
范例031:获取单日访问人数
源码路径:光盘\演练范例\031视频路径:光盘\演练范例\031范例032:发布公告信息
源码路径:光盘\演练范例\032视频路径:光盘\演练范例\032\

在上述代码中,定义了一个Session对象“MyName”,并赋值为“mmmmm”。代码执行后将输出显示Session对象MyName的值,如图6-7所示。

图片 57

图6-7 输出显示Session对象值

(2)编写文件SessionGet.aspx,其功能是获取并显示文件SessionSet.aspx中创建的MyName值。该文件的主要实现代码如下。

<%@ Page Language="C#|" %>
……
<script runat="server">
  void Page_Load(object sender, EventArgs e)
  {
    try
    {
      Response.Write("MyName=" + Session["MyName"].ToString());//获取MyName值
    }
    catch (Exception ex)
    {
      Response.Write(ex.Message);                 //异常处理
    }
  }
</script>
………

上述代码执行后,将获取文件SessionSet.aspx中创建的MyName值,并将获取的值输出显示,如图6-8所示。

图片 58

图6-8 输出获取的Session对象值

实例017 通过TimeOut属性设置页面中Session的有效期限是1分钟

源码路径 光盘\daima\6\timeout.aspx  视频路径 光盘\视频\实例\第6章\017

实例文件timeout.aspx的主要实现代码如下。

<Script Language="c#|" Runat="Server">
void Page_Load(object sender, System.EventArgs e) {
  if(!Page.IsPostBack)
  {
    Session["Session1"]="Value1";  //设置第一个Session
    Session["Session2"]="Value2";  //设置第二个Session
    Session.Timeout=1;           //设置Session期限
    DateTime now=DateTime.Now;       //获取当前时间
    string format="HH:mm:ss"; 
    Label1.Text=now.ToString(format);       //显示当前时间
    Label2.Text=Session["Session1"].ToString();
    Label3.Text=Session["Session2"].ToString();
  }
}
void Button1_Click(object sender, System.EventArgs e) {
  DateTime now=DateTime.Now;
  string format="HH:mm:ss"; 
  Label1.Text=now.ToString(format); 
  Label2.Text=Session["Session1"].ToString();
  Label3.Text=Session["Session2"].ToString();
}
</Script>
……
<Form Runat="Server" ID="Form1">
目前时间:<Asp:Label Id="Label1" Runat="Server" />
<P>
第一个Session:<Asp:Label Id="Label2" Runat="Server" /><Br>
第二个Session:<Asp:Label Id="Label3" Runat="Server" /><Br>
<Asp:Button Id="Button1" Text="刷新" OnClick="Button1_Click" Runat="Server" />
</Form>
范例033:实现私聊功能
源码路径:光盘\演练范例\033视频路径:光盘\演练范例\033范例034:保持用户登录状态
源码路径:光盘\演练范例\034视频路径:光盘\演练范例\034\

在上述代码中,通过TimeOut属性设置页面中Session的有效期限是1分钟。代码执行后,将在页面中输出两个Session的值,如图6-9所示;如果一分钟后单击【刷新】按钮,因为Session已经超时,所以Session值将会失效。

图片 59

图6-9 实例执行效果

Server对象是HttpServerUtility类的一个实例,能够提供对服务器上对方法和属性的访问。

1.Server对象的属性

Server对象的常用属性信息如表6-9所示。

表6-9 Server对象的属性信息

属  性

属 性 值

描  述

MachineName

本地计算机的名称

获取服务器的计算机名称

ScriptTimeout

请求的超时设置(以秒计)

获取和设置请求超时

2.Server对象的方法

Server对象的常用方法信息如表6-10所示。

表6-10 Server对象的方法信息

方  法

描  述

CreateObject

创建COM对象的一个服务器实例

CreateObjectFromClsid

创建COM对象的服务器实例,该对象由对象的类标识符(CLSID)标识

Execute

使用另一页执行当前请求

Transfer

终止当前页的执行,并为当前请求开始执行新页

HtmlDecode

对已被编码以消除无效HTML字符的字符串进行解码

HtmlEncode

对要在浏览器中显示的字符串进行编码

MapPath

返回与Web服务器上指定的虚拟路径相对应的物理文件路径

UrlDecode

对字符串进行解码,该字符串为了进行HTTP传输而进行编码并在URL中发送到服务器

UrlEncode

编码字符串,以便通过URL从Web服务器到客户端进行可靠的HTTP传输

实例018  通过Server对象获取页面所在服务器的基本信息

源码路径 光盘\daima\6\Server.aspx  视频路径 光盘\视频\实例\第6章\018

本实例的实现文件为Server.aspx,其主要实现代码如下。

……
<script runat="server"> 
  void Page_Load(object sender, EventArgs e)
  {
    //开始逐一获取服务器信息
Response.Write("机器名:" + Server.MachineName);
    Response.Write("<br><br>");
    Response.Write("物理路径:" + Server.MapPath("Server.aspx"));
    Response.Write("<br><br>");
    Response.Write("不使用HtmlEncode显示代码:<html>");
    Response.Write("<br><br>");
    Response.Write("使用HtmlEncode显示代码:" + Server.HtmlEncode("<html>"));
    Response.Write("<br><br>");
    Response.Write("使用UrlEncode显示URL:" + Server.UrlEncode("http://www.sina.com.cn"));
    Response.Write("<br><br>");
    Server.Execute("ApplicationSet.aspx");
  }
</script>
……
范例035:检测客户端浏览器类型
源码路径:光盘\演练范例\035视频路径:光盘\演练范例\035范例036:投票保护
源码路径:光盘\演练范例\036视频路径:光盘\演练范例\036\

上述代码执行后,将显示当前页面所在服务器的基本信息,如图6-10所示。

图片 60

图6-10 实例执行效果

Cookie 是一小段文本信息,伴随着用户请求和页面在Web服务器和浏览器之间传递。用户每次访问站点时,Web应用程序都可以读取Cookie包含的信息。

Cookie和Session、Application对象类似,也是用来保存相关信息的。但是三者最大不同是,Cookie将信息保存在客户端,而Session和Application是将信息保存在服务器端。也就是说,无论何时用户连接到服务器,Web站点都可以访问cookie信息。

ASP.NET包含两个内部Cookie集合,具体说明如下。

  • 通过HttpRequest的Cookies集合访问的集合包含通过Cookie标头从客户端传送到服务器的Cookie。
  • 通过HttpResponse的Cookies集合访问的集合包含一些新Cookie,这些Cookie在服务器上创建并以Set-Cookie标头的形式传输到客户端。

Cookie不是Page类的子类,所以在使用方法上跟Seesion和Application不同。

项目中使用Cookie的好处如下。

  • 可以灵活配置到期规则。Cookie 可以在浏览器会话结束时到期,或者可以在客户端计算机上无限期存在,这取决于客户端的到期规则。
  • 不占用任何服务器资源。
  • 使用简单。
  • 数据持久性。虽然客户端计算机上Cookie的持续时间取决于客户端上的Cookie过期处理和用户干预,但是Cookie通常是客户端上持续时间最长的数据保留形式。

使用Cookie的好处显而易见,但其也存在如下缺点。

  • 大小受到限制。大多数浏览器对Cookie的大小有限制,一般不超过4096个字节。
  • 用户通常配置为禁用。有些用户禁用了浏览器或客户端设备接收Cookie的能力,因此限制了这一功能。
  • 潜在的安全风险。Cookie可能会被篡改。用户可能会操纵其计算机上的Cookie,这意味着会对安全性造成潜在风险,或者导致依赖于Cookie的应用程序失败。

1.Cookie对象的属性

Cookie对象的常用属性信息如表6-11所示。

2.Cookie对象的方法

Cookie对象的常用方法信息如表6-12所示。

表6-11 Cookie对象的属性信息

属  性

属 性 值

描  述

Name

Cookie的名称

获取或设置Cookie的名称

Value

Cookie的Value

获取或设置Cookie的Value

Expires

作为DateTime实例的Cookie过期日期和时间

获取或设置Cookie的过期日期和时间

Version

此Cookie符合的HTTP状态维护版本

获取或设置此Cookie符合的HTTP状态维护版本

表6-12 Cookie对象的方法信息

方  法

描  述

Add

新增一个Cookie变量

Clear

清除Cookie集合内的变量

Get

通过变量名或索引得到Cookie的变量值

GetKey

以索引值来获取Cookie的变量名称

Remove

通过Cookie变量名来删除Cookie变量

和Session对象一样,Cookie对象常被用于项目中的用户登录系统中。

实例019 演示Cookie对象的基本使用方法

源码路径 光盘\daima\6\CookieSet.aspx  视频路径 光盘\视频\实例\第6章\019

本实例的实现流程如下。

(1)编写文件CookieSet.aspx,其功能是创建一个Cookie对象“MyName”,实现代码如下。

<script runat="server"> 
  void Page_Load(object sender, EventArgs e)
  {
//创建Cookie对象
    HttpCookie MyCookie = new HttpCookie("Name");  
//设置对象值  
    MyCookie["MyName"] = "mmmmmm";
//设定Cookie有效期是365天  
    MyCookie.Expires = DateTime.Today.AddDays(365d);
//添加Cookie
    Response.Cookies.Add(MyCookie); 
    Response.Write("设定Cookie值");
  }
</script>
范例037:获取客户端操作系统等信息
源码路径:光盘\演练范例\037视频路径:光盘\演练范例\037范例038:获取购物车中的商品
源码路径:光盘\演练范例\038视频路径:光盘\演练范例\038\

在上述代码中,定义了一个Cookie对象“MyName”,并赋值为“mmmmm”。代码执行后将输出显示Cookie对象MyName的值,如图6-11所示。

图片 61

图6-11 输出显示Cookie对象值

(2)编写文件CookieGet.aspx,其功能是获取并显示文件CookieSet.aspx中创建的MyName值,实现代码如下。

<script runat="server">
  void Page_Load(object sender, EventArgs e)
  {
    try
    {
    Response.Write("MyName=" + Session["MyName"].ToString());  //获取MyName值
    }
    catch (Exception ex)
    {
      Response.Write(ex.Message);             //异常处理
    }
  }
</script>

上述代码执行后,将获取文件CookieSet.aspx中创建的MyName值并输出显示,效果如图6-12所示。

图片 62

图6-12 输出获取的Cookie对象值

每个应用程序在使用类时,都需要创建该类的一个实例,并且只要对应的应用程序域保持活动,该实例便保持有效。有关此类实例的信息通过HttpContext对象的Cache属性,或Page对象的Cache属性来提供。

1.Cache对象的属性

Cache对象的常用属性信息如表6-13所示。

表6-13 Cache对象的属性信息

属  性

属 性 值

描  述

Count

存储在缓存中的项数

获取存储在缓存中的项数

Item

表示缓存项的键的String对象

获取或设置指定键处的缓存项

2.Cache对象的方法

Cache对象的常用方法信息如表6-14所示。

表6-14 Cache对象的方法信息

方  法

描  述

Add

将指定项添加到Cache对象,该对象具有依赖项、过期和优先级策略,以及一个委托(可用于在从Cache移除插入项时通知应用程序)

Get

从Cache对象检索指定项

Remove

从应用程序的Cache对象移除指定项

Insert

向Cache对象插入项

Get方法可以从Cache对象检索指定项,其唯一的参数key表示要检索的缓存项的标识符。该方法返回检索到的缓存项,未找到该键时为空引用。

Remove方法可以从应用程序的Cache对象移除指定项,其唯一的参数key表示要移除的缓存项的String标识符。该方法返回从Cache移除的项。如果未找到键参数中的值,则返回空引用。例如下面的一段代码。

public void RemoveItemFromCache(Object sender, EventArgs e)
{
  if(Cache["Key1"] != null)
   Cache.Remove("Key1");
}

在上述代码中,创建一个RemoveItemFromCache函数。当调用此函数时,它使用Item属性检查缓存中是否包含与Key1键值相关的对象。如果包含,则调用Remove方法来移除该对象。

开发人员还可以将逻辑和事件处理代码添加到他们的Web应用程序中,上述代码不处理界面的生成,并且不会因为响应个别页请求而被调用。相反,它负责处理更高级别的应用程序事件,如Application_Start、Application_End、Session_Start和Session_End等。开发人员使用位于特定Web应用程序虚拟目录树根处的Global.asax文件来创建此逻辑。第一次激活或请求应用程序命名空间内的任何资源或URL时,ASP.NET自动分析该文件并将其编译成动态.NET框架类(此类扩展了HttpApplication基类)。Global.asax文件被配置为自动拒绝任何直接URL请求,从而使外部用户不能下载或查看内部代码。

通过在Global.asax文件中创作符合命名模式“Application_EventName(Appropriate EventArgumentSignature)”的方法,开发人员可以为HttpApplication基类的事件定义处理程序。例如下面的代码。

<script language="C#|" runat="server">
void Application_Start(object sender, EventArgs e) {
}
</script>

如果事件处理代码需要导入附加的命名空间,可以在.aspx页面中使用@ import指令,语法格式如下。

<%@ Import Namespace="System.Text" %>

第一次打开页时,引发应用程序和会话的Start事件。

void Application_Start(object sender, EventArgs e) {
}
void Session_Start(object sender, EventArgs e) {
 Response.Write("Session is Starting...<br>");
 Session.Timeout = 1;
}

对每个请求都引起BeginRequest和EndRequest事件。刷新页面时,只显示来自Begin-Request、EndRequest和Page_Load方法的消息。

静态对象、.NET框架类和COM组件都可以使用对象标记在Global.asax文件中定义。范围可以是appinstance、session或application。appinstance范围表示对象特定于Http-Application的一个实例并且不共享。

图像说明文字

注意:Global.asax使用了微软公司的HTML拓展<Script>标记语法来限制脚本。这也就是说,必须用<Script>标记来引用这两个事件,而不能用“<%”和“%>”符号引用。在Global.asax中不能有任何输出语句,无论是HTML的语法,还是Response.Write方法,都是不行的,Global.asax是任何情况下也不能进行显示的。

教程类别