课题ASPNET应用程序与页面生命周期Word格式文档下载.docx
《课题ASPNET应用程序与页面生命周期Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《课题ASPNET应用程序与页面生命周期Word格式文档下载.docx(19页珍藏版)》请在冰豆网上搜索。
ASP.NET应用程序的生命周期以浏览器向Web服务器(对于ASP.NET应用程序,通常为IIS)发送请求为起点。
ASP.NET是Web服务器下的ISAPI扩展。
Web服务器接收到请求时,会对所请求的文件的文件扩展名进行检查,确定应由哪个ISAPI扩展处理该请求,然后将该请求传递给合适的ISAPI扩展。
ASP.NET处理已映射到其上的文件扩展名,如.aspx、.ascx、.ashx和.asmx。
步骤2:
ASP.NET接收对应用程序的第一个请求
当ASP.NET接收到对应用程序中任何资源的第一个请求时,名为
ApplicationManager
的类会创建一个应用程序域。
应用程序域为全局变量提供应用程序隔离,并允许单独卸载每个应用程序。
在应用程序域中,将为名为
HostingEnvironment
的类创建一个实例,该实例提供对有关应用程序的信息(如存储该应用程序的文件夹的名称)的访问。
步骤3:
为每个请求创建ASP.NET核心对象
创建了应用程序域并对
对象进行了实例化之后,ASP.NET将创建并初始化核心对象,如HttpContext、HttpRequest
和
HttpResponse。
HttpContext
类包含特定于当前应用程序请求的对象,如
HttpRequest
HttpResponse
对象。
对象包含有关当前请求的信息,包括Cookie和浏览器信息。
对象包含发送到客户端的响应,包括所有呈现的输出和Cookie。
步骤4:
将
HttpApplication
对象分配给请求初始化所有核心应用程序对象之后,将通过创建
类的实例启动应用程序。
如果应用程序具有Global.asax文件,则ASP.NET会创建Global.asax类(从
类派生)的一个实例,并使用该派生类表示应用程序。
注:
第一次在应用程序中请求ASP.NET页或进程时,将创建
的一个新实例。
不过,为了尽可能提高性能,可对多个请求重复使用
实例。
步骤5:
由
管线处理请求MHPM(Module,handler,pageandModuleevent)。
使用MHPM(Module,handler,pageandModuleevent)事件处理请求
一旦
HttpApplication对象创建,在处理该请求时将由
类执行。
我们来了解下HttpModule
HttpHandlers。
1、如果你想通过*.aspx,*.html文件来处理程序逻辑,那么你需要使用HttpHandler,换句话说,httphandler是一个扩展的处理器。
2、如果你想使用ASP.NET管道来处理程序逻辑,你需要使用HttpModule换句话说,httpmodule是一个事件处理器。
如何处理请求。
mhpm有4个重要的步骤:
步骤1(M:
HttpModule):
客户端开始请求处理。
在引擎和httpmodule中的事件可以用来处理用户自己定义的逻辑。
有6个重要的事件,你可以在你的页面对象被创建之前调用
BeginRequest,authenticaterequest,authorizerequest,resolverequestcache,acquirerequeststate与prerequesthandlerexecute。
步骤2(H:
‘HttpHandler’):
一旦上述6个事件被执行完,引擎调用processrequest事件,如果已实现httphandler在您的项目。
步骤3(P:
ASP.NETpage):
一旦httphandler执行,页面对象被创建。
而页面对象被创建,Page对象的事件将被调用,这可以帮助我们页面中定制自定义逻辑的处理。
有6个重要的事件,Init,
Load,
validate,
event,
render
unload简称
SILVER
S–Start(doesnotsignifyanythingassuchjustformstheword),I–(Init),L(Load),V(Validate),E(Event)andR(Render)。
步骤4(M:
一旦页面对象是执行和从内存中卸载,httpmodule提供网页执行事件可以用来注入自定义处理逻辑。
有4个重要的后处理事件postrequesthandlerexecute,releaserequeststate,updaterequestcache与endrequest。
事件详细介绍:
部分
Event事件
Description描述
HttpModule
BeginRequest
在ASP.NET响应请求时作为HTTP执行管线链中的第一个事件发生。
BeginRequest
事件发出信号表示创建任何给定的新请求。
此事件始终被引发,并且始终是请求处理期间发生的第一个事件。
AuthenticateRequest
当安全模块已建立用户标识时发生。
AuthenticateRequest
事件发出信号表示配置的身份验证机制已对当前请求进行了身份验证。
AuthorizeRequest
安全模块已验证用户授权时发生。
AuthorizeRequest
事件发出信号表示ASP.NET已对当前请求进行了授权。
ResolveRequestCache
在ASP.NET完成授权事件以使缓存模块从缓存中为请求提供服务后发生,从而绕过事件处理程序(例如某个页或XMLWebservices)的执行。
AcquireRequestState
当ASP.NET获取与当前请求关联的当前状态(如会话状态)时发生。
AcquireRequestState
事件在创建了事件处理程序之后引发。
PreRequestHandlerExecute
恰好在ASP.NET开始执行事件处理程序(例如,某页或某个XMLWebservices)前发生。
HttpHandler
ProcessRequest
Httphandler逻辑被执行。
在本节中,我们会写,需要将每页扩展执行的逻辑。
Page
Init
OnInit
方法执行创建
Page
实例所需的初始化和设置步骤。
在页生命周期的此阶段中,页中声明的服务器控件都已初始化为默认状态;
但每个控件的视图状态尚未填充。
在
Page_Init
阶段中,页中的控件不能访问该页的其他服务器控件,无论其他控件是子控件还是父控件。
不一定会创建其他服务器控件,也不一定能够访问它们
Load
ASP.NET控件完成加载,你写的UI操作逻辑或任何其他逻辑在这里。
Validate
如果你有你的页面上有验证逻辑,这里检查是否符合验证。
Render
将页面最终的输出发送到浏览器,如果你想做出一些最终的HTML的变化,这是输出到浏览器,你可以在这里输入你的HTML的逻辑。
Unload
页面对象从内存中卸载。
PostRequestHandlerExecute
在ASP.NET事件处理程序(例如,某页或某个XMLWebservice)执行完毕时发生。
ReleaserequestState
在ASP.NET执行完所有请求事件处理程序后发生。
该事件将使状态模块保存当前状态数据。
引发ReleaseRequestState
事件以后,应用程序以该请求结束,并发出ASP.NET信号以存储该请求状态。
UpdateRequestCache
Beforeyouend,ifyouwanttoupdateyourcache.结束之前,如果您想更新您的高速缓存。
EndRequest
当ASP.NET执行完事件处理程序以使缓存模块存储将用于从缓存为后续请求提供服务的响应时发生。
演示代码:
在这段代码中,我们创建HttpModule和Httphandler
添加所有请求响应的事件,下面用HttpModuleHttphandler
跟踪所有活动,并把它添加到一个全局性的集合变量中。
1publicclassclsHttpModule:
IHttpModule
2{
3privateHttpApplicationhttpApp;
4publicstaticArrayListobjArrayList=newArrayList();
5publicclsHttpModule()
6{
7
8}
9
10
11publicvoidDispose()
12{
13
14}
15
16publicvoidInit(HttpApplicationcontext)
17{
18this.httpApp=context;
19httpApp.Context.Response.Clear();
20objArrayList.Clear();
21objArrayList.Add("
httpModule:
Init"
);
22httpApp.AuthenticateRequest+=newEventHandler(OnAuthentication);
23httpApp.AuthorizeRequest+=newEventHandler(OnAuthorization);
24httpApp.BeginRequest+=newEventHandler(OnBeginrequest);
25httpApp.EndRequest+=