Global.asax文件的使用

Global.asax文件的使用
2008年03月30日 星期日 13:19
Global.asax文件是Web应用程序的系统文件,属于选项文件,可有可无。当需要使用Application和Session对象的事件处理程序时,就需要创建此文件。
11.2.1 Global.asax 文件的结构
ASP.NET的Global.asax文件是ANSI文本文件,使用Windows记事本或VWD都可以编辑Global.asax文件的内容。
1. 创建Global.asax文件
Visual Web Developer可以创建Global.asax文件。启动VWD打开Ch11网站后,执行“文件”|“新建文件”命令,打开“添加新项”对话框。
图11-2 “添加新项”对话框
选择“全局应用程式类”选项(如果网站已经建立就不会看到此项目),单击“打开”按钮就可以在Web网站中创建Global.asax文件。一个Web网站只能拥有一个Global.asax文件。
2. Global.asax文件结构
Global.asax文件主要是定义Web应用程序的Application_Start()、Application_End()、Session_Start()和 Session_End()等事件处理程序,文件结构如下所示。
<%@ Application Language="VB" %>
<script Runat="server">
Sub Application_Start(ByVal Sender As Object,_
                    ByVal E As EventArgs)
End Sub
Sub Application_End(ByVal Sender As Object,_
                   ByVal E As EventArgs)
End Sub
Sub Application_Error(ByVal Sender As Object,_
                    ByVal E As EventArgs)
End Sub
Sub Session_Start(ByVal sender As Object,_
                    ByVal e As EventArgs)
End Sub
Sub Session_End(ByVal sender As Object,_
                    ByVal e As EventArgs)
End Sub
</script>
上述第1行程序代码是使用Application命令的Language属性声明使用Visual Basic 2005语法,在<script>标记中是Application和Session对象的事件处理程序,其说明如表11-3所示。
表11-3 Application和Session对象的事件处理程序
事件处理程序
说    明
Application_Start()
当第 1 位用户进入 ASP.NET 程序时,Application_Start 事件就触发,在触发后,就算有成千上万位用户进入网站都不会重新触发,除非 Web 服务器关机。通常用来初始化 Application 变量,例如初始的访客计数
Application_End()
当 Web 服务器关机时,Application_End 事件就会触发
Application_Error()
当产生未能处理错误时,触发 Application_Error 事件
Session_Start()
当用户建立 Session 时间时,就触发 Session_Star 事件,如果有 50 位用户,就触发 50 次事件,每个事件是独立触发的,不会互相影响,通常用来初始化用户专用的 Session 变量
Session_End()
当用户在默认时间内没有进入其他ASP.NET 程序时,就会触发此事件,时间是由 TimeOut 属性设定,通常是善后用途的程序代码,例如将 Session 变量存入数据库或文本文件
当web.config文件(详见11-7节说明)的sessionstate模式设为InProc(此为默认值)才会触发Session_End事件,如果设为StateServer或SQLServer就不会触发此事件。
11.2.2 Global.asax文件的使用
在ASP.NET的Web应用程序中使用Global.asax文件时,注意,一个Web应用程序只能有唯一的Global.asax文件,其位置是Web应用程序的启动点目录。
1. Global.asax事件处理程序的执行顺序
当用户请求ASP.NET程序后,就会替每位用户建立Session时间和Application对象,接着检查ASP.NET应用程序是否含有Global.asax 文件。
如果有Global.asax文件,就将它编译成继承HttpApplication类的 .NET Framework 类,然后在执行 ASP.NET 文件的程序代码前触发 Application_Start 事件,执行 Global.asax 文件的 Application_Start()事件处理程序,并建立 Session对象,因为 Global.asax 文件存在,接着执行 Session_Start()事件处理程序。
当 Session 时间超过 TimeOut 属性的设定(默认20分钟)或执行 Abandon()方法,表示 Session 时间结束,就触发 Session_End事件执行 Session_End()事件处理程序,处理程序是在关闭 Session 对象前执行。
Web 服务器如果关机,在关闭 Application 对象前就会执行 Application_End()事件处理程序,当然也会结束所有用户的 Session 时间,执行所有用户的 Session_End()事件处理程序。
2. ASP.NET程序:Global.asax
在 Global.asax 文件的事件处理程序中建立程序代码(有需要才创建事件处理程序),以便显示事件处理程序的执行过程,如下所示。
01: <%@ Application Language="VB" %>
02: <script Runat="server">
03: Sub Application_Start(ByVal Sender As Object,_
04:                     ByVal E As EventArgs)
05:    Application("msg")= "Application开始...<br>"
06: End Sub
07: Sub Session_Start(ByVal Sender As Object,_
08:                     ByVal E As EventArgs)
09:    Dim output As String = Application("msg")
10:    Response.Write(output)
11:    Application("msg")= ""   ' 清除Application变量
12:    Response.Write("Session时间开始...<br>")
13: End Sub
14: Sub Session_End(ByVal Sender As Object, _
15:                     ByVal E As EventArgs)
16:    Application("msg")= "Session结束...<br>"
17: End Sub
18: Sub Application_BeginRequest(ByVal Sender As Object, _
19:                              ByVal E As EventArgs)
20:    Response.Write("请求开始...<br>")
21: End Sub
22: Sub Application_EndRequest(ByVal Sender As Object, _
23:                            ByVal E As EventArgs)
24:    Response.Write("请求结束...<br>")
25: End Sub
26: </script>
3. 程序说明
第3~6行是Application_Start()事件处理程序,第5行使用Application变量 msg 存储执行信息(Application 变量的说明请参阅第 11.3 节),因为执行此程序时尚未加载网页,所以只能使用 Application 变量来存储执行信息。文件没有 Application_End()事件处理程序,因为当执行此程序时,表示 Application 已经结束,并没有办法显示任何信息。
第 7~13 行是 Session_Start()事件处理程序,第 9~11 行显示 Application 变量值后,清除变量内容,第 12 行显示 Session 时间开始的信息。
第 14~17 行是 Session_End()事件处理程序,因为 Session 时间已经结束,所以第 16 行使用 Application 变量存储信息内容。最后第 18~25 行是 Application_BeginRequest()和 Application_EndRequest()两个事件处理程序,它们是在浏览程序中提出请求和结束请求时触发,在这两个事件间会触发 Page 对象的 Load 事件。
4. ASP.NET程序:Ch11-2-2.aspx
在 ASP.NET 程序中显示整个 Global.asax文件的事件处理程序的执行过程,包含网页请求事件的执行顺序,在 Web 窗体中含有两个按钮,可以更新网页和结束 Session 时间,如下所示。
01: <%@ Page Language="VB" %>
02: <script runat="Server">
03: Sub Page_Load(Sender As Object,E As EventArgs)
04:    Response.Write("载入网页...<br>")
05: End Sub
06: Sub SessionOver(Sender As Object,E As EventArgs)
07:    Session.Abandon() ' 结束Session时间
08:    ' 转址至自已
09:    Response.Redirect("Ch11-2-2.aspx")
10: End Sub
11: </script>
12: <html>
13: <head><title>Ch11-2-2.aspx</title></head>
14: <body>
15: 显示网页内容...(
16: <% If Session.IsNewSession = True Then
17:       Response.Write("新的Session时间")
18:    Else
19:       Response.Write("同一个Session时间")
20:    End If %>)
21: <form Runat="server">
22: <asp:Button Id="button0" Text="更新网页" Runat="server"/>
23: <asp:Button Id="button1" OnClick="SessionOver"
24:           Text="结束Session" Runat="server"/>
25: </form>
26: </body>
27: </html>
5. 程序说明
第3~5行是Page_Load()事件处理程序,第4行显示执行程序的信息。第6~10行是Button控件的Click事件处理程序,第7行使用Abandon()方法结束 Session时间,第11行转址重新加载自己。
第16~20行的If 条件使用IsNewSession属性检查是否为新建立的Session时间,第21~25行是两个按钮的Web窗体。
6. 网页预览
将Ch11/Ch11-2-2文件夹建立为虚拟目录后,启动浏览程序执行 Ch11-2-2.aspx 程序,可以看到执行过程的信息,如图11-3所示。
图11-3所述信息显示事件处理程序的执行顺序,首先执行 Application_Start事件,然后是 Application_BeginRequest 和 Session_Start 事件,因为 Application_Start 事件的信息是在 Session_Start 事件处理程序中显示的,所以顺序相反,Application_Start事件是在 Application_BeginRequest 事件前触发。
在新的 Session 时间开始后,触发 Page_Load 事件加载网页来显示网页内容,请求过程结束触发 Application_EndRequest 事件。
单击“结束 Session”按钮以Abandon()方法强迫结束Session时间,因为重新加载网页,可以看到Session结束后再次建立新的Session时间
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值