asp.net application

Application 对象用于存储和访问来自任何页面的变量,类似于 session 对象。不同之处在于,所有的用户分享一个 Application 对象,而 session 对象和用户的关系是一一对应的。Application 对象握有会被应用程序中的许多页面使用的信息(比如数据库连接信息)。这意味着可以从任何的页面访问这些信息。同时也意味着你可在一个地点改变这些信息,然后这些改变会自动反映在所有的页面上。

application的创建和获取和session一样:

application["keyName"]=...;或application.add("keyName",value)。赋值内容可以是任意类型的数据。通过application["keyName"]获取的值是一个object对象,需要显示转换类型。

由于application是在整个程序中的,是所有用户共用的,因此在进行修改的时候,为了避免另一个用户也在修改,需要对其加锁和解锁。

application.lock();

application["keyName"]=....

application.unlock();

同样的,清除application也需要加锁和解锁。application.remove("keyName")清除某一项,application.clear()清除所有。

application的这种特性可以用来记录网站的访问量。

protected void Button5_Click(object sender, EventArgs e)
    {
        if (Application["app_count"] != null)
        {
            Application.Lock();
            Application["app_count"] = (int)Application["app_count"] + 1;
            Application.UnLock();
        }
        else
        {
            Application.Lock();
            Application["app_count"] = 1;
            Application.UnLock();
        }
    }
    protected void Button7_Click(object sender, EventArgs e)
    {
        if (Application["app_count"] != null)
            Button7.Text = "点击查看当前计数:" + Application["app_count"].ToString();
        else
            Button7.Text = "没有计数的application";
    }
    protected void Button6_Click(object sender, EventArgs e)
    {
        Application.Lock();
        Application.Remove("app_count");
        Application.UnLock();
    }

运行后,在浏览器中用两个网页来打开这个页面,分别查看点击按钮之后,在另一个页面查看当前计数的变化。

一个简单的聊天室

首先是设计登陆页面:

登录按钮:

protected void Button1_Click(object sender, EventArgs e)
{
Session["uid"] = TextBox1.Text;
Server.Transfer("Default2.aspx");
}

然后设计聊天页面:

<meta http-equiv="refresh" content="5"/><!--这个用于页面自动刷新,每隔5秒刷新一次,添加到head标签中-->
<form id="form1" runat="server">
    <div>
        <asp:Panel ID="Panel1" runat="server" BorderColor="#FF9933" BorderStyle="Double" Height="369px" ScrollBars="Vertical" Width="536px"></asp:Panel>
        <asp:Panel ID="Panel2" runat="server">
            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
            <asp:Button ID="Button1" runat="server" Text="发送" OnClick="Button1_Click" />
            <asp:Button ID="Button2" runat="server" Text="退出聊天" OnClick="Button2_Click" />
        </asp:Panel>
    </div>
    </form>
public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["uid"] == null)//这个session是每个用户独自有一个
            Response.Redirect("Default.aspx");
        if (Application["chat"] == null)//application是所有用户共用一个
            Application["chat"] = new Panel();
        Panel1.Controls.Add((Panel)Application["chat"]);
    }

    protected void Button2_Click(object sender, EventArgs e)
    {//退出聊天
        Session.Remove("uid");
        Response.Redirect("Default.aspx");
    }
    protected void Button1_Click(object sender, EventArgs e)
    {//发送
        Label uid = new Label();
        uid.Text = Session["uid"].ToString();
        Label dt = new Label();
        dt.Text = DateTime.Now.ToLongTimeString()+":";
        Label word = new Label();
        word.Text = TextBox1.Text;
        Literal lbr = new Literal();
        lbr.Text = "<br/>";
        Application.Lock();
        ((Panel)Application["chat"]).Controls.AddAt(0, lbr);
        ((Panel)Application["chat"]).Controls.AddAt(0, word);
        ((Panel)Application["chat"]).Controls.AddAt(0, dt);
        ((Panel)Application["chat"]).Controls.AddAt(0, uid);
        Application.UnLock();
    }
}

运行:在登录界面登录张三和李四,

然后分别进入各自的聊天界面

这是李四的

这是张三的

每次在刷新的时候,发送按钮前面的文本框里的内容会被清除掉。这是因为这个刷新是整个页面的刷新,并不是局部刷新。这个刷新还有一个地方需要注意,那就是在第一个用户登录后,如果没有第一时间发送信息,那么在5秒后会自动跳回登录页面,似乎if (Session["uid"] == null)这个判断的结果是true,这点一直没弄明白。

要想实现局部刷新,可用AJAX,Jquery和iFrame。

利用iframe:

首先是新建一个页面default3

<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <meta  http-equiv="refresh" content="5"/>
</head>
<body>
    <form id="form1" runat="server">
    <div runat="server" id="holder">

    </div>
    </form>
</body>

后台代码:

protected void Page_Load(object sender, EventArgs e)
    {
        if (Application["chat"] == null)
            Application["chat"] = new Panel();
        holder.Controls.Add((Panel)Application["chat"]);
    }

对于之前的聊天页面default2做如下修改:

首先去掉自动刷新的标记:

然后将显示聊天记录的panel也去掉,同时添加iframe:

default2的后台代码

 protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["uid"] == null)
            Response.Redirect("Default.aspx");
        //if (Application["chat"] == null)
        //    Application["chat"] = new Panel();
        //Panel1.Controls.Add((Panel)Application["chat"]);
    //上面注释掉的这部分被移到default3中了
    }

然后运行:

登录两个用户后,可以看到,即使不发送任何信息,在5秒时间过后,自动刷新的话,也不会像之前那样跳回登录页面了,同时在发送了信息后,自动刷新也不会将文本框里面的内容给清除掉了。

时间: 2024-10-11 04:07:49

asp.net application的相关文章

ASP.NET Application Life Cycle

The table in this topic details the steps performed while an XAF ASP.NET application is running. Note Currently, only the steps that are performed until the main page is shown are detailed. Stage Description Ways to Interfere Application is requested

Debug your ASP.NET Application while Hosted on IIS

转摘:http://www.codeproject.com/Articles/37182/Debug-your-ASP-NET-Application-while-Hosted-on-IIS This article describes how to debug a web application which is hosted on IIS. It also describes how to select the correct process to attach to when multip

[转]ASP.net Application 生命周期事件

生命周期事件和 Global.asax 文件 在应用程序的生命周期期间,应用程序会引发可处理的事件并调用可重写的特定方法.若要处理应用程序事件或方法,可以在应用程序根目录中创建一个名为 Global.asax 的文件. 如果创建了 Global.asax 文件,ASP.NET 会将其编译为从 HttpApplication 类派生的类,然后使用该派生类表示应用程序. HttpApplication 进程的一个实例每次只处理一个请求.由于在访问应用程序类中的非静态成员时不需要将其锁定,这样可以简化

ASP.NET Application,Session,Cookie和ViewState等对象用法和区别 (转)

在ASP.NET中,有很多种保存信息的内置对象,如:Application,Session,Cookie,ViewState和Cache等.下面分别介绍它们的用法和区别. 方法 信息量大小 作用域和保存时间 应用范围 保存位置 Application 任意大小 整个应用程序的生命期 整个应用程序/所有用户 服务器端 Cache 任意大小 可以根据需要设定 整个应用程序/所有用户 服务器端 Session 小量,简单的数据 用户活动时间+一段延迟时间(一般为20分钟) 单个用户 服务器端 Cook

Capturing ASP.NET Application Startup Exceptions

It has become common practice to perform tasks during an ASP.NET applications start up process. These tasks may include registering routes, configuring filters, wiring up third party dependencies, and so much more. Here is the default ASP.NET MVC app

php仿照asp实现application缓存的代码分享

php 怎么没有asp 那样的application缓存呢?最近我找了很多,都只有自己写,下面我分享一段代码 class php_cache{ //相对或者绝对目录,末尾不要加 '/' var $cache_dir = './cache'; var $cache_extension = '.cache.php'; function set_cache($name, $value){ $pre = "< ?\n//Cache Created at: ".date('Y-m-d H:

ASP.NET——Application全局对象

Application是应用全局对象,被全体共享.无论通过哪个页面操作Application,另一个页面都可以读取Application信息. 由于Application是共享的,操作之前先Lock,操作完成后UnLock. 在一个页面设置数据: Application.Lock(); Application.Set("address", "上海"); Application.UnLock(); 在另一个页面取数据: string s = (string)Appli

ASP.net Application及Session 的start end 方法总结

经过几天的摸索,试验,今天终于可以将Application及Session对象的Start和End方法做下总结了. Application_start: 第一个访问网站的用户会触发该方法. 通常会在该方法里定义一些系统变量,如聊天室的在线总人数统计,历史访问人数统计的初始化等等均可在这里定义. Application_end:网站关闭,或重启时,会触发该方法. 没有进行过多试验. Session_start : 每个用户访问网站的第一个页面时触发; Session_end:使用了session.

asp.net Application、 Session、Cookie、ViewState、Cache、Hidden 的区别

这些对象都是用来保存信息的,包括用户信息,传递值的信息,全局信息等等.他们之间的区别: 1.Application对象 Application用于保存所有用户的公共的数据信息,如果使用Application对象,一个需要考虑的问题是任何写操作都要在Application_OnStart事件(global.asax)中完成.尽管使用Application.Lock和Applicaiton.Unlock方法来避免写操作的同步,但是它串行化了对Application对象的请求,当网站访问量大的时候会产