版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、ASP.NET应用程序与页面生命周期 在本文中,我们将了解不同的事件,ASP.NET 应用程序的生命周期以浏览器向 Web 服务器(对于 ASP.NET 应用程序,通常为 IIS)发送请求为起点,直至将请求结果返回至浏览器结束。在这个过程中,首先我们需要了解ASP.NET请求的2个大致的步骤。其次我们将详细了解 httphandler , httpmodule和 页面对象(Page)中不同的事件的执行顺序,逻辑。二个步骤的过程:请求处理,2步的过程如下所示,用户发送一个请求到IIS 服务器:1、创建一个运行时,可以处理请求。换句话说,它创建应用程序对
2、象,请求,响应和上下文对象处理请求。2、运行时一旦被创建,请求处理,通过一系列的事件处理模块,Handler处理和页面对象。简称MHPM (Module, handler, page and Module event)。ASP.NET 应用程序生命周期的各个阶段:步骤1:用户从 Web 服务器请求应用程序资源ASP.NET 应用程序的生命周期以浏览器向 Web 服务器(对于 ASP.NET 应用程序,通常为 IIS)发送请求为起点。ASP.NET 是 Web 服务器下的 ISAPI 扩展。Web 服务器接收到请求时,会对所请求的文件的文件扩展名进行检查,确定应由哪个 ISAPI 扩展处理该请求
3、,然后将该请求传递给合适的 ISAPI 扩展。ASP.NET 处理已映射到其上的文件扩展名,如 .aspx、.ascx、.ashx 和 .asmx。步骤2:ASP.NET 接收对应用程序的第一个请求当 ASP.NET 接收到对应用程序中任何资源的第一个请求时,名为ApplicationManager的类会创建一个应用程序域。应用程序域为全局变量提供应用程序隔离,并允许单独卸载每个应用程序。在应用程序域中,将为名为HostingEnvironment的类创建一个实例,该实例提供对有关应用程序的信息(如存储该应用程序的文件夹的名称)的访问。步骤3:为每个请求创建 ASP.NET 核心对象创建了应用
4、程序域并对HostingEnvironment对象进行了实例化之后,ASP.NET 将创建并初始化核心对象,如HttpContext、HttpRequest和HttpResponse。HttpContext类包含特定于当前应用程序请求的对象,如HttpRequest和HttpResponse对象。HttpRequest对象包含有关当前请求的信息,包括 Cookie 和浏览器信息。HttpResponse对象包含发送到客户端的响应,包括所有呈现的输出和 Cookie。步骤4:将HttpApplication对象分配给请求初始化所有核心应用程序对象之后,将通过创建HttpApplication类的
5、实例启动应用程序。如果应用程序具有 Global.asax 文件,则 ASP.NET 会创建 Global.asax 类(从HttpApplication类派生)的一个实例,并使用该派生类表示应用程序。注:第一次在应用程序中请求 ASP.NET 页或进程时,将创建HttpApplication的一个新实例。不过,为了尽可能提高性能,可对多个请求重复使用HttpApplication实例。步骤5:由HttpApplication管线处理请求 MHPM (Module, handler, page and Module event)。使用MHPM (Module, handler, page an
6、d Module event) 事件处理请求一旦HttpApplication对象创建,在处理该请求时将由HttpApplication类执行。我们来了解下HttpModuleHttpHandlers。1、如果你想通过*.aspx,*.html文件来处理程序逻辑,那么你需要使用HttpHandler,换句话说,httphandler是一个扩展的处理器。2、如果你想使用ASP.NET管道来处理程序逻辑,你需要使用HttpModule 换句话说,httpmodule是一个事件处理器。如何处理请求。mhpm有4个重要的步骤:步骤1(M: HttpModule):客户端开始请求处理。在引
7、擎和httpmodule中的事件可以用来处理用户自己定义的逻辑。有6个重要的事件,你可以在你的页面对象被创建之前调用Begin Request,authenticaterequest,authorizerequest,resolverequestcache,acquirerequeststate与prerequesthandlerexecute。步骤2(H: HttpHandler):一旦上述6个事件被执行完,引擎调用processrequest事件,如果已实现httphandler在您的项目。步骤3(P: ASP.NET page):一旦httphandler执行,asp.ne
8、t页面对象被创建。而页面对象被创建,Page对象的事件将被调用,这可以帮助我们页面中定制自定义逻辑的处理。有6个重要的事件,Init,Load,validate,event,render,unload 简称SILVERS Start (does not signify anything as such just forms the word) , I (Init) , L (Load) , V (Validate), E (Event) and R (Render)。步骤4(M: HttpModule):一旦页面对象是执行和从内存中卸载,httpmodule提供网页执行事件可以用
9、来注入自定义处理逻辑。有4个重要的后处理事件postrequesthandlerexecute,releaserequeststate,updaterequestcache与endrequest。事件详细介绍:部分Event事件Description描述HttpModuleBeginRequest在 ASP.NET 响应请求时作为 HTTP 执行管线链中的第一个事件发生。BeginRequest事件发出信号表示创建任何给定的新请求。此事件始终被引发,并且始终是请求处理期间发生的第一个事件。HttpModuleAuthenticateRequest当安全模块已建立用户标识时发生。Authenti
10、cateRequest事件发出信号表示配置的身份验证机制已对当前请求进行了身份验证。HttpModuleAuthorizeRequest安全模块已验证用户授权时发生。AuthorizeRequest事件发出信号表示 ASP.NET 已对当前请求进行了授权。HttpModuleResolveRequestCache在 ASP.NET 完成授权事件以使缓存模块从缓存中为请求提供服务后发生,从而绕过事件处理程序(例如某个页或 XML Web services)的执行。HttpModuleAcquireRequestState当 ASP.NET 获取与当前请求关联的当前状态(如会话状态)时发生。Acq
11、uireRequestState事件在创建了事件处理程序之后引发。HttpModulePreRequestHandlerExecute恰好在 ASP.NET 开始执行事件处理程序(例如,某页或某个 XML Web services)前发生。HttpHandlerProcessRequestHttphandler逻辑被执行。在本节中,我们会写,需要将每页扩展执行的逻辑。PageInitOnInit方法执行创建Page实例所需的初始化和设置步骤。在页生命周期的此阶段中,页中声明的服务器控件都已初始化为默认状态;但每个控件的视图状态尚未填充。在Page_Init阶段中,页中的控件不能访问该页的其他服
12、务器控件,无论其他控件是子控件还是父控件。不一定会创建其他服务器控件,也不一定能够访问它们PageLoadASP.NET控件完成加载,你写的UI操作逻辑或任何其他逻辑在这里。PageValidate如果你有你的页面上有验证逻辑,这里检查是否符合验证。Render将页面最终的输出发送到浏览器,如果你想做出一些最终的HTML的变化,这是输出到浏览器,你可以在这里输入你的HTML的逻辑。PageUnload页面对象从内存中卸载。HttpModulePostRequestHandlerExecute在 ASP.NET 事件处理程序(例如,某页或某个 XML Web service)执行完毕时发生。Ht
13、tpModuleReleaserequestState在 ASP.NET 执行完所有请求事件处理程序后发生。该事件将使状态模块保存当前状态数据。引发ReleaseRequestState事件以后,应用程序以该请求结束,并发出 ASP.NET 信号以存储该请求状态。HttpModuleUpdateRequestCacheBefore you end, if you want to update your cache.结束之前,如果您想更新您的高速缓存。HttpModuleEndRequest当 ASP.NET 执行完事件处理程序以使缓存模块存储将用于从缓存为后续请求提供服务的响应时发生。演示代码
14、:在这段代码中,我们创建HttpModule 和Httphandler 添加所有请求响应的事件, 下面用 HttpModule Httphandler 跟踪所有活动,并把它添加到一个全局性的集合变量中。 1 public class clsHttpModule : IHttpModule 2 3 private HttpApplication httpApp; 4 public static ArrayList objArrayList = new ArrayList(); 5 public clsHttpModule() 6 7 8 9 10 11 public void Dispose()
15、12 13 14 15 16 public void Init(HttpApplication context)17 18 this.httpApp = context;19 httpApp.Context.Response.Clear();20 objArrayList.Clear();21 objArrayList.Add(httpModule:Init);22 httpApp.AuthenticateRequest += new EventHandler(OnAuthentication);23 httpApp.AuthorizeRequest += new EventHandler(O
16、nAuthorization);24 httpApp.BeginRequest += new EventHandler(OnBeginrequest);25 httpApp.EndRequest += new EventHandler(OnEndRequest);26 httpApp.ResolveRequestCache += new EventHandler(OnResolveRequestCache);27 httpApp.AcquireRequestState += new EventHandler(OnAcquireRequestState);28 httpApp.PreReques
17、tHandlerExecute += new EventHandler(OnPreRequestHandlerExecute);29 httpApp.PostRequestHandlerExecute += new EventHandler(OnPostRequestHandlerExecute);30 httpApp.ReleaseRequestState += new EventHandler(OnReleaseRequestState);31 httpApp.UpdateRequestCache += new EventHandler(OnUpdateRequestCache);32 3
18、3 void OnUpdateRequestCache(object sender, EventArgs a)34 35 objArrayList.Add(httpModule:OnUpdateRequestCache);36 37 void OnReleaseRequestState(object sender, EventArgs a)38 39 objArrayList.Add(httpModule:OnReleaseRequestState);40 41 void OnPostRequestHandlerExecute(object sender, EventArgs a)42 43
19、objArrayList.Add(httpModule:OnPostRequestHandlerExecute);44 45 void OnPreRequestHandlerExecute(object sender, EventArgs a)46 47 objArrayList.Add(httpModule:OnPreRequestHandlerExecute);48 49 void OnAcquireRequestState(object sender, EventArgs a)50 51 objArrayList.Add(httpModule:OnAcquireRequestState)
20、;52 53 void OnResolveRequestCache(object sender, EventArgs a)54 55 objArrayList.Add(httpModule:OnResolveRequestCache);56 57 void OnAuthorization(object sender, EventArgs a)58 59 objArrayList.Add(httpModule:OnAuthorization);60 61 void OnAuthentication(object sender, EventArgs a)62 63 64 objArrayList.
21、Add(httpModule:AuthenticateRequest);65 66 void OnBeginrequest(object sender, EventArgs a)67 68 69 objArrayList.Add(httpModule:BeginRequest);70 71 void OnEndRequest(object sender, EventArgs a)72 73 objArrayList.Add(httpModule:EndRequest);74 objArrayList.Add();75 foreach (string str in objArrayList)76
22、 77 httpApp.Context.Response.Write(str + );78 79 80 81 82 以下代码片段是跟踪HttpHandler的ProcessRequest事件 : 1 public class clsHttpHandler : IHttpHandler 2 3 4 public bool IsReusable 5 6 get return true; 7 8 9 public void ProcessRequest(HttpContext context)10 11 clsHttpModule.objArrayList.Add(HttpHandler:Proce
23、ssRequest);12 context.Response.Redirect(/Default.aspx);13 14 页面Page事件 1 public partial class _Default : System.Web.UI.Page 2 3 protected void Page_init(object sender, EventArgs e) 4 5 clsHttpModule.objArrayList.Add(Page:Init); 6 7 protected void Page_Load(object sender, EventArgs e) 8 9 clsHttpModul
24、e.objArrayList.Add(Page:Load);10 11 public override void Validate()12 13 clsHttpModule.objArrayList.Add(Page:Validate);14 15 protected void Button1_Click(object sender, EventArgs e)16 17 clsHttpModule.objArrayList.Add(Page:Event);18 19 protected override void Render(HtmlTextWriter output)20 21 clsHt
25、tpModule.objArrayList.Add(Page:Render);22 base.Render(output);23 24 protected void Page_Unload(object sender, EventArgs e)25 26 clsHttpModule.objArrayList.Add(Page:UnLoad);27 28 webconfig中配置:HttpModules配置页面第一次加载效果:点击button按钮后:HttpModuleHttpModule通过在某些事件中注册,把自己插入ASP.NET请求处理管道。当这些事件发生的时候,ASP.NET调用对相应的
26、HTTP模块,这样该模块就能处理请求了。常用操作:1、向每个页面动态添加一些备注或说明性的文字:2、判断用户登录如果定义了多个HttpModule,在web.config文件中引入自定义HttpModule的顺序就决定了多个自定义HttpModule在处理一个HTTP请求的接管顺序。HttpHandlerHttpHandler是HTTP请求的处理中心,真正地对客户端请求的服务器页面做出编译和执行,并将处理过后的信息附加在HTTP请求信息流中再次返回到HttpModule中。HttpHandler与HttpModule不同,一旦定义了自己的HttpHandler类,那么它对系统的HttpHandler的关系将是“覆盖”关系。为了验证请求是否进入Http
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 贵州城市职业学院《房地产策划与运营》2023-2024学年第一学期期末试卷
- 淫羊藿培育项目可行性研究报告-淫羊藿市场需求持续增大
- 贵阳人文科技学院《聚合物改性原理及方法》2023-2024学年第一学期期末试卷
- 广州中医药大学《英语教师核心素养解读》2023-2024学年第一学期期末试卷
- 2025山东省安全员-B证考试题库附答案
- 2025年云南省安全员《A证》考试题库及答案
- 广州应用科技学院《建筑给排水与消防》2023-2024学年第一学期期末试卷
- 广州现代信息工程职业技术学院《增材制造技术》2023-2024学年第一学期期末试卷
- 2025黑龙江省建筑安全员C证(专职安全员)考试题库
- 2025年河南省建筑安全员-C证(专职安全员)考试题库
- 申请失业保险金承诺书
- 工程竣工资料整理工程资料服务合同
- 智能化手术室介绍strykerisuite课件
- 2023年非标自动化工程师年度总结及来年计划
- 2023-2024学年甘肃省嘉峪关市酒钢三中高三上数学期末学业质量监测试题含解析
- 水利机械施工方案
- 悬挑式脚手架验收记录表
- 广东省佛山市南海区大沥镇2023-2024学年九年级上学期期中物理试卷
- ESD内部审核日程计划表+内审检查表+内审报告全套资料
- HSK标准教程5下-课件-L
- 电脑基础知识
评论
0/150
提交评论