
Application1.aspx
[点击这里运行例程]
| [查看源代码]
页面首次打开时,将激活application和session的Onstart事件。关于这些事件触发程序,请看下面使用VB、C#以及JScript三种语言编写的代码: C#
void Application_Start() {
Response.Write("Application is Starting...");
}
void Session_Start() {
Response.Write("Session is Starting...");
Session.Timeout = 1;
}
VB
Sub Application_Start()
Response.Write("Application is Starting...")
End Sub
Sub Session_Start()
Response.Write("Session is Starting...")
Session.Timeout = 1
End Sub
JScript
function Application_Start() : void {
Response.Write("Application is Starting...");
}
function Session_Start() : void {
Response.Write("Session is Starting...");
Session.Timeout = 1;
}
每次请求发生时,都会激活BeginRequest 和EndRequest 事件。比如,当页面被刷新时,来自BeginRequest、EndRequest
和Page_Load 方法的信息将显现出来。注意,当放弃当前的session时(点击"End this session"按钮),将产生一个新session,接着再次触发Session_OnStart事件。
Application 或 Session作用范围内的对象
在Global.asax文件中,我们可以通过object标记定义静态对象,这些对象可以是.NET框架类,也可以是经典的COM组件。其作用范围可以是appinstance、session或者application中的任一种。 如果一个对象的作用范围是Appinstance,就表示这个对象明确属于HttpApplication的一个实例,并且不被共享。
请看下面定义对象作用范围的例子:
<object id="id" runat="server" class=".NET
Framework class Name" scope="appinstance">
<object id="id" runat="server" progid="Classic
COM ProgID" scope="session"/>
<object id="id" runat="server" classid="Classic
COM ClassID" scope="application"/>
什么是HttpHandlers 和 factories(Http处理器和工厂)
ASP.NET提供了一套低级别的请求/响应API,利用它们我们就可以使用.NET框架类服务于输入的HTTP求,它们就是HTTPHandlers
和Factories。HTTPHandlers 和Factories可以说是ASP.NET框架的中枢。Factories(工厂)将每个请求分配给一个handler(处理器),由这个处理器再负责处理请求。具体实现步骤就是创建支持System.Web.IHTTPHandler接口的类,并执行ProcessRequest()方法。当不要求高级别页面框架提取的服务处理HTTP请求时,处理器经常很有用途。处理器的一般用途包括过滤器和仿CGI应用,特别是那些返回二进制数据的应用。
ASP.NET接收的每一个HTTP输入请求最终被一个特殊的类实例IHTTPHandler所处理,IhttpHandlerFactory提供了处理器到IHTTPHandler实例的基础下部组织。ASP.NET自带3个标准的IhttpHandlerFactory类:PageHandlerFactory,RestrictedResourceFactory和WebServiceHandlerFactory。我们还可以有选择的创建并注册附加factories(工厂)以支持更丰富的请求决定和激活场合。
配置HttpHandlers 和 Factories
HTTPHandlers 和factories 作为config.web文件的一部分进行配置。ASP.NET定义了一个"httphandlers"配置节,在这里可以添加和删除HTTPHandlers和factories。这些配置信息可以通过子目录而继承下来。
比如,下面这些代码位于config.web文件的头部,目的就是映射所有关于.aspx文件的请求到PageHandlerFactory类:
<httphandlers>
...
<add verb="*" path="*.aspx" type="System.Web.UI.PageHandlerFactory"
/>
...
</httphandlers>
创建自定义HttpHandler
要自定义一个handler,可以执行IhttpHandler,并在config.web文件的httphandlers一节中添加类信息。下面举例说明如何创建自定义一个HttpHandler,将所有的请求对应到"SimpleHandler.aspx"中:
SimpleHandler
[点击运行程序]
| [查看源代码]
自定义HttpHandler可以通过执行IhttpHandler接口来创建,这个接口只有两个方法。通过调用IsReusable,一个HTTP
factory就能够查询handler(处理器)以判断是否同一实例可以用于服务多个请求。ProcessRequest方法接受HttpContext实例作为参数。这里的例子中,请求数据被忽略,一个常量字符串作为响应发送到客户端。请看下面使用VB、C#以及JScript三种语言编写的代码:
C#
public class SimpleHandler : IHttpHandler {
public void ProcessRequest(HttpContext context) {
context.Response.Write("Hello World!");
}
public bool IsReusable() {
return true;
}
}
VB
Public Class SimpleHandler : Inherits IHttpHandler
Public Sub ProcessRequest(context As HttpContext)
context.Response.Write("Hello World!")
End Sub
Public Function IsReusable() As Boolean
Return(True)
End Function
End Class
JScript
public class SimpleHandler implements IHttpHandler {
public function ProcessRequest(context:HttpContext) : void {
context.Response.Write("Hello World!");
}
public function IsReusable() : Boolean {
return true;
}
}
将编译的处理器集合放置到application的/bin目录下面后,我们就可以指定处理器类到请求的目标上。在这里,所有对"SimpleHandler.aspx"的请求将被路由到SimpleHandler类的一个实例上,它生存于名字空间Acme.SimpleHandler中。
结 语
以上通过原理与实例讲述了.NET之ASP Web Application的概念及使用,我们看到了如何使用三种不同的编程语言达到目的。你会发现,我们正在慢慢地触及.NET的神奇思想,领会.NET的震撼力量。我们有理由相信,凭借如此强大的工具,开发人员将更具创造力!