ASP.NET 中的Application详解

一、全局应用程序类

从Application这个单词上大致可以看出Application状态是整个应用程序全局的。在ASP时代我们通常会在Application中存储一些公共数据,而ASP.NET中Application的基本意义没有变:在服务器内存中存储数量较少又独立于用户请求的数据。由于它的访问速度非常快而且只要应用程序不停止,数据一直存在,我们通常在Application_Start的时候去初始化一些数据,在以后的访问中可以迅速访问和检索。

Global.asax 是一个用来处理应用程序全局的事件。打开文件,系统已经为我们定义了一些事件的处理方法。

代码如下:

void Application_Start(object sender, EventArgs e)
{
    // 在应用程序启动时运行的代码
}  
 
void Application_End(object sender, EventArgs e)
{
    //  在应用程序关闭时运行的代码
}      
 
void Application_Error(object sender, EventArgs e)
{
    // 在出现未处理的错误时运行的代码
}
 
void Session_Start(object sender, EventArgs e)
{
    // 在新会话启动时运行的代码
}
 
void Session_End(object sender, EventArgs e)
{
    // 在会话结束时运行的代码
 
    // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为InProc 时,才会引发 Session_End 事件
 
    // 如果会话模式设置为 StateServer 或 SQLServer,则不会引发该事件
}

通过这些注释我们可以看到,这些事件是整个应用程序的事件,和某一个页面没有关系。

二、Application对象的应用

1.使用Application对象保存信息

(1)、使用Application对象保存信息

Application(“键名”) = 值
或 Application(“键名”,值)

(2)、获取Application对象信息

变量名 = Application(“键名”)
或:变量名 = Application.Item(“键名”)
或:变量名 = Application.Get(“键名”)

(3)、更新Application对象的值

Application.Set(“键名”, 值)

(4)、删除一个键

Application.Remove(“键名”, 值)

(5)、删除所有键

Application.RemoveAll()
或Application.Clear()

2.有可能存在多个用户同时存取同一个Application对象的情况

这样就有可能出现多个用户修改同一个Application命名对象,造成数据不一致的问题。
HttpApplicationState类提供两种方法Lock和Unlock,以解决对Application对象的访问同步问题,一次只允许一个线程访问应用程序状态变量。

关于锁定与解锁

锁定:Application.Lock()
访问:Application(“键名”) = 值
解锁:Application.Unlock()
注意:Lock方法和UnLock方法应该成对使用。
可用于网站访问人数,聊天室等设备

3. 使用Application事件

在ASP.NET应用程序中可以包含一个特殊的可选文件—Global.asax文件,也称作ASP.NET应用程序文件,它包含用于响应ASP.NET或HTTP模块引发的应用程序级别事件的代码。

三、使用Application统计网站访问

假设我们希望使用Application统计网站的访问情况。

·页面单击数。页面被单击一次+1,不管是否是同一个用户多次单击页面。

·用户访问数。来了一个用户+1,一个用户打开多个页面不会影响这个数字。

我们首先需要在Application_Start中去初始化两个变量。

代码如下:

void Application_Start(object sender, EventArgs e)
{
    // 在应用程序启动时运行的代码
    Application["PageClick"]=0;
    Application["UserVisit"]=0;
}

用户访问数根据Session来判断,因此可以在Session_Start的时候去增加这个变量:

代码如下:

void Session_Start(object sender, EventArgs e)
{
    Application.Lock();
    Application["UserVisit"]=(int)Application["UserVisit"]+1;
    Application.UnLock();
}

我们看到,Application的使用方法和Session差不多。唯一要注意的是,Application的作用范围是整个应用程序,可能有很多用户在同一个时间访问Application造成并发混乱,因此在修改Application的时候需要先锁定Application,修改完成后再解锁。

页面单击数则在页面Page_Load的时候去修改。

代码如下:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        Application.Lock();
        Application["PageClick"] = (int)Application["PageClick"] + 1;
        Application.UnLock();
        Response.Write(string.Format("页面单击数:{0}<br/>", Application["PageClick"]));
        Response.Write(string.Format("用户访问数:{0}<br/>", Application["UserVisit"]));
    }
}

四、Application总结

在ASP.NET 2.0中,Application已经变得不是非常重要了。因为Application的自我管理功能非常薄弱,它没有类似Session的超时机制。也就是说,Application中的数据只有通过手动删除或者修改才能释放内存,只要应用程序不停止,Application中的内容就不会消失。在下一节中,我们会看到,可以使用Cache实现类似Application的功能,同时Cache又有丰富而强大的自我管理机制。

让我们来总结一下Application的特性。

·存储的物理位置。服务器内存。

·存储的类型限制。任意类型。

·状态使用的范围。整个应用程序。

·存储的大小限制。任意大小。

·生命周期。应用程序开始的时候创建(准确来说是用户第一次请求某URL的时候创建),应用程序结束的时候销毁。

·安全与性能。数据总是存储在服务端,安全性比较高,但不易存储过多数据。

·优缺点与注意事项。检索数据速度快,但缺乏自我管理机制,数据不会自动释放。

(0)

相关推荐

  • ASP.NET内置对象之Application对象

    新建一个网站,包括两个网页,代码如下: 1.Index.aspx代码:  复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Index.aspx.cs" Inherits="Index" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&

  • ASP.NET 使用application与session对象写的简单聊天室程序

    ASP.Net中有两个重要的对象,一个是application对象,一个是session对象. Application:记录应用程序参数的对象,该对象用于共享应用程序级信息. Session:记录浏览器端的变量对象,用来存储跨网页程序程序的变量或者对象. 说实话,写了快一年的asp.net,application对象还真没怎么用过.看了看书,根据这两个对象的特性写了一个简单的聊天室程序.真的是非常的简陋. 我的思路是,有两个页面Default页和ChatRoom页,页面布局如图: Default

  • ASP.NET中Application全局对象用法实例浅析

    本文实例讲述了ASP.NET中Application全局对象用法.分享给大家供大家参考.具体如下: Application是应用全局对象,被全体共享.无论通过哪个页面操作Application,另一个页面都可以读取Application信息. 由于Application是共享的,操作之前先Lock,操作完成后UnLock. 在一个页面设置数据: Application.Lock(); Application.Set("address", "上海"); Applica

  • ASP.NET C#中Application的用法教程

    Application对象 Application对象生存期和Web应用程序生存期一样长,生存期从Web应用程序网页被访问开始,HttpApplication类对象Application被自动创建,直到没有一个网页被访问时结束,Application对象被自动撤销.因此Application对象中的变量也有相同生存期,并且变量可以被Web应用程序中的所有网页访问.因此,可以在Application对象中建立一些全局的公用变量,由于存储在Application对象中的数值可以被应用程序的所有网页读

  • ASP.NET中application对象的使用介绍

    Application对象的应用 1.使用Application对象保存信息 (1).使用Application对象保存信息 Application("键名") = 值 或 Application("键名",值) (2).获取Application对象信息 变量名 = Application("键名") 或:变量名 = Application.Item("键名") 或:变量名 = Application.Get("键

  • 用c#获得当前用户的Application Data文件夹位置

    用   Environment   类: string   path   =   Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);      MessageBox.Show(path);

  • ASP.NET中使用Application对象实现简单在线人数统计功能

    注:最近在复习ASP.NET,为了加深印象,会制作一些小的demo程序,分享给大家. 1 新建ASP.NET网站,编辑Global.asax文件,修改后的文件内容如下所示. <%@ Application Language="C#" %> <script runat="server"> void Application_Start(object sender, EventArgs e) { // 在应用程序启动时运行的代码 Applicati

  • ASP.Net的Application介绍

    在ASP.Net中Application用法与ASP是一样的,几乎是没有什么说的,但是它多了两个特别有用的事件,Application_OnBeginRequest和Application_OnEndRequest.他们的和原来的Application_OnStart和Application_OnEnd一样是放在global文件中的(注意这个文件在ASP中名字是global.asa,在ASP.Net中是global.asax). Application_OnStart是在整个ASP.Net应用首

  • ASP.NET 中的Application详解

    一.全局应用程序类 从Application这个单词上大致可以看出Application状态是整个应用程序全局的.在ASP时代我们通常会在Application中存储一些公共数据,而ASP.NET中Application的基本意义没有变:在服务器内存中存储数量较少又独立于用户请求的数据.由于它的访问速度非常快而且只要应用程序不停止,数据一直存在,我们通常在Application_Start的时候去初始化一些数据,在以后的访问中可以迅速访问和检索. Global.asax 是一个用来处理应用程序全

  • asp 内置对象 Application 详解

    asp内置对象 Application 详解  在 ASP 的内建对象中除了用于发送.接收和处理数据的对象外,还有一些非常实用的代表 Active Server 应用程序和单个用户信息的对象.  让我们先来看看 Application 对象.在同一虚拟目录及其子目录下的所有 .asp 文件构成了 ASP 应用程序.我们非但可以使用 Application 对象,在给定的应用程序的所有用户之间共享信息,并在服务器运行期间持久的保存数据.而且,Application 对象还有控制访问应用层数据的方法

  • asp.net中使用log4net详解

    说明:本程序演示如何利用log4net记录程序日志信息.log4net是一个功能著名的开源日志记录组件.利用log4net可以方便地将日志信息记录到文件.控制台.Windows事件日志和数据库(包括MS SQL Server, Access, Oracle9i,Oracle8i,DB2,SQLite)中.并且我们还可以记载控制要记载的日志级别,可以记载的日志类别包括:FATAL(致命错误).ERROR(一般错误).WARN(警告).INFO(一般信息).DEBUG(调试信息).要想获取最新版本的

  • Asp.Net中MVC缓存详解

    本文通过介绍了Asp.Net中MVC缓存的种类,以及他们之间的区别等内容,让学习者能够深入的了解MVC缓存的原理机制,以下是具体内容: 缓存是一种保存资源副本并在下次请求时直接使用该副本的技术.当 web 缓存发现请求的资源已经被存储,它会拦截请求,返回该资源的拷贝. Web应用缓存技术大体上可以分为两类:服务端缓存和客户端缓存.两种目标都是减少重复性内容的生成和网络传输工作,因为缓存数据存储的位置不同,而分为服务端缓存和客户端缓存. 服务端缓存 服务端缓存技术关注于服务端数据查询,生成或者操作

  • ASP.NET中IsPostBack用法详解

    本文针对ASP.NET中IsPostBack的用法进行了详细的说明,有助于读者更准确的掌握ASP.NET中IsPostBack的用法. 一.IsPostBack介绍: Page.IsPostBack是一个标志:当前请求是否第一次打开.调用方法为:Page.IsPostBack或者IsPostBack或者this.IsPostBack或者this.Page.IsPostBack,它们都等价. 1)当通过IE的地址栏等方式打开一个URL时是第一次打开, 当通过页面的提交按钮或能引起提交的按钮以POS

  • ASP 中 DateDiff 函数详解 主要实现两日期加减操作

    ASP 中 DateDiff 函数详解DateDiff 函数 描述  返回两个日期之间的时间间隔.  语法  DateDiff(interval, date1, date2 [,firstdayofweek][, firstweekofyear]])  DateDiff 函数的语法有以下参数: 参数 描述  interval 必选.字符串表达式,表示用于计算 date1 和 date2 之间的时间间隔.有关数值,请参阅"设置"部分.  date1, date2 必选.日期表达式.用于计

  • ASP.NET Core中的配置详解

    ASP.NET Core 提供了一个灵活可扩展,基于键值的配置系统. 但是配置系统独立于ASP.NET Core是Microsoft.Extensions 类库的部分. 它可以用于任何类型的应用程序 1.以键-值对的形式读取配置 appsettings.json 文件: { "Position": { "Title": "编辑器", "Name": "Joe Smith" }, "MyKey&qu

  • Dubbo在Spring和Spring Boot中的使用详解

    一.在Spring中使用Dubbo 1.Maven依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.3.6</version> <exclusions> <exclusion> <groupId>log4j</groupId> <artif

  • scrapy爬虫:scrapy.FormRequest中formdata参数详解

    1. 背景 在网页爬取的时候,有时候会使用scrapy.FormRequest向目标网站提交数据(表单提交).参照scrapy官方文档的标准写法是: # header信息 unicornHeader = { 'Host': 'www.example.com', 'Referer': 'http://www.example.com/', } # 表单需要提交的数据 myFormData = {'name': 'John Doe', 'age': '27'} # 自定义信息,向下层响应(respon

  • Spring IoC学习之ApplicationContext中refresh过程详解

    refresh() 该方法是 Spring Bean 加载的核心,它是 ClassPathXmlApplicationContext 的父类 AbstractApplicationContext 的一个方法 , 顾名思义,用于刷新整个Spring 上下文信息,定义了整个 Spring 上下文加载的流程. public void refresh() throws BeansException, IllegalStateException { synchronized(this.startupShu

随机推荐