| 网站首页 | 硬件维修 | 应用学院 | 网络组建 | 网站制作 | 菜鸟黑客 | 编程之道 | 数码大全 | 娱乐休闲 | 软件下载 | 在线视频 | 请您留言 | 技术论坛 | 
专 题 栏 目
最 新 热 门
最 新 推 荐
相 关 文 章
  • ASP.NET中在线用户统计

  • 用ASP.NET开发Web服务的五则…

  • 带你走进ASP.NET(4)

  • 带你走进ASP.NET(3)

  • 带你走进ASP.NET(2)

  • 带你走进ASP.NET(1)

  • 在 ADO.NET 数据集中浏览多个…

  • 在 ADO.NET 数据集中浏览多个…

  • 在 ADO.NET 数据集中浏览多个…

  • 在 ADO.NET 数据集中浏览多个…

  • Q
    您现在的位置: 我是IT人 >> 编程之道 >> .NET >> 编程文章正文
    ASP.NET计数器         
    ASP.NET计数器
    作者:小秦 文章来源:转载 点击数: 更新时间:2005-3-13
    [ 字体:缩小 正常 放大 | 双击自动滚屏 ]
    请选择合适的字体颜色:
         前言
      主页计数器是用来记录页面曾经被访问次数的组件。它是一个比较简单的功能,但是实现起来却有许多实际问题要考虑。例如访问次数的记录如何存放?如果服务器关机,数据记录是否会丢失?等等问题都是需要我们考虑的。
      目前的计数器主要是使用ASP技术制作,方法非常简单。但是很少有使用ASP.NET技术制作的计数器,原因主要是ASP.NET技术还未正式发布,同时支持.NET的服务器还很少导致的。本文讲述了如何利用ASP.NET技术,制作主页计数器。
      
      设计构思
      计数器的核心工作就是想办法将访问的次数记录下来,并且能够方便的读出数据记录。在此应用中,拟建立四个文件,一个是webform1.aspx,主要是用于显示访问次数记录,一个counter.txt文件用于存储访问次数记录,还有global.asax和global.asax.cs,这两个文件是核心文件,主要是负责响应事件和读写文件。因此,程序必须具有打开文件,读文件,累加数值,写文件等功能。同时,还需注意:在进行数值累加时,不能象ASP中的那样写成
      application(“counter”)=application(“counter”)+1
      因为数值类型不能和对象做数学运算。
      经过以上的思考,我们基本就可以编写代码了,但是在完成编写之前,还应了解以下的相关知识。
      
      相关知识
      1. Global.asax文件
      Global.asax文件也称为ASP.NET应用程序文件,它一般被放在根目录下。此文件中的代码不产生用户界面,也不相应单个页面的请求。它主要是负责处理Application_Start,Application_End,Session_Start和Session_End事件的。
      2. Application对象及其事件
      Application 对象来自HttpApplictionStat 类。它可以在多个请求、连接之间共享公用信息,也可以在各个请求连接之间充当信息传递的管道。此对象的生命周期起于IIS开始运行并且有人开始连接时,终止于IIS关闭或者若干时间内无人连接(默认为20分钟)。当Application 对象的生命周期开始时,Application_Start 事件会被启动,当Application对象的生命周期结束时Application_End 事件会被启动。
      3. Session对象及其事件
      Session对象有着与Application类似的事件:Session_Start和Session_End事件。当有一个新用户访问应用程序时,就会立刻触发Session_Start事件。当某个用户停止了访问或者程序执行了Session.Abandon方法,就会触发Session_End事件。
      4. Application和Session对象比较
      Session对象与Application对象有些相似,但其作用域有更大的限制。Application对象是针对所有用户都生效,而Session对象则相反,每个用户都有自己的Session对象,它的生命周期起始于服务器产生对用户请求页面的相应,终止于用户断开与服务器的连接。Application对象不会象Session对象那样当一个新用户请求就触发事件,Application对象的事件只触发一次,就是在第一个用户的第一个请求时。一个Application_End事件肯定发生在Session_End事件之后,Application_End事件只有在服务器停止工作或Application_End事件卸载时才触发。
      
      程序部分
      首先建立一个文本文件counter.txt,打开文件输入一个大于0的整数作为访问记录的初始值。
      下面我们就可以正式的编写计数器的程序了。
      listing 1是webform1.aspx,主要是用于显示从文件中读出的访问次数的记录。由于在整个应用程序生命周期中,Application 对象都是有效的,所以在不同的页面中都可以对它进行存取,就像使用全局变量一样方便。
      在代码中,使用<%=Application["counter"]%>来表示访问次数记录。
      程序代码如下:
      listing1 -----webform1.aspx-----
      <%@ Page language="c#" Src="WebForm1.aspx.cs" Inherits="counter1.WebForm1" %>
      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
      <HTML>
       <HEAD>
       <meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
       <meta name="CODE_LANGUAGE" Content="C#">
       </HEAD>
       <body>
       <form id="Form1" method="post" runat="server">
       <FONT face="宋体">您是第<%=Application["counter"]%>位访问者!</FONT>
       </form>
       </body>
      </HTML>
      Listing 2和listing3是global.asax和global.asax.cs文件代码,当执行webform1.aspx文件之前会执行它们。在global.asax.cs文件中,定义了一些事件和其响应代码,主要是用于读写文件和数值累加。
      Listing 2 -----global.asax----
      <%@ Application Src="Global.asax.cs" Inherits="counter2.Global" %>
      listing 3 -----global.asax.cs-----
      using System;
      using System.Collections;
      using System.ComponentModel;
      using System.Web;
      using System.Web.SessionState;
      using System.IO ;
      namespace counter2
      {
       public class Global : System.Web.HttpApplication
       {
       protected void Application_Start(Object sender, EventArgs e)
       {
       uint count=0;
       StreamReader srd;
      //取得文件的实际路径
       string file_path=Server.MapPath ("counter.txt");
       //打开文件进行读取
       srd=File.OpenText (file_path);
       while(srd.Peek ()!=-1)
       {
       string str=srd.ReadLine ();
       count=UInt32.Parse (str);
       }
       object obj=count;
       Application["counter"]=obj;
       srd.Close ();
       }
      
       protected void Session_Start(Object sender, EventArgs e)
       {
       Application.Lock ();
       //数值累加,注意这里使用了装箱(boxing)
       uint jishu=0;
       jishu=(uint)Application["counter"];
       jishu=jishu+1;
       object obj=jishu;
       Application["counter"]=obj;
       //将数据记录写入文件
       string file_path=Server.MapPath ("counter.txt");
       StreamWriter fs=new StreamWriter(file_path,false);
       fs.WriteLine (jishu);
       fs.Close ();
       Application.UnLock ();
       }
       protected void Application_BeginRequest(Object sender, EventArgs e)
       {
       }
       protected void Application_EndRequest(Object sender, EventArgs e)
       {
       }
       protected void Session_End(Object sender, EventArgs e)
       {
       }
       protected void Application_End(Object sender, EventArgs e)
       {
       //装箱
       uint js=0;
       js=(uint)Application["counter"];
       //object obj=js;
       //Application["counter"]=js;
       //将数据记录写入文件
       string file_path=Server.MapPath ("counter.txt");
       StreamWriter fs=new StreamWriter(file_path,false);
       fs.WriteLine(js);
       fs.Close ();
       }
       }
      }
      
      小结
      经过以上的讨论,一个简单的主页计数器就完成了。其核心就是以文本模式进行文件读写。
    编程文章录入:小秦    责任编辑:小秦 
  • 上一篇编程文章:

  • 下一篇编程文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    | 设为首页 | 加入收藏 | 联系站长 | 关于我们 | 友情链接 | 版权申明 |