廊坊网站建设方案网站建设项目需求分析报告
廊坊网站建设方案,网站建设项目需求分析报告,网站建设实验周志与总结,外包兼职平台在本文中#xff0c;我们将了解不同的事件#xff0c;ASP.NET 应用程序的生命周期以浏览器向 Web 服务器#xff08;对于 ASP.NET 应用程序#xff0c;通常为 IIS#xff09;发送请求为起点#xff0c;直至将请求结果返回至浏览器结束。在这个过程中#xff0c;首先我们…在本文中我们将了解不同的事件ASP.NET 应用程序的生命周期以浏览器向 Web 服务器对于 ASP.NET 应用程序通常为 IIS发送请求为起点直至将请求结果返回至浏览器结束。在这个过程中首先我们需要了解ASP.NET请求的2个大致的步骤。其次我们将详细了解 httphandler httpmodule和 asp.net 页面对象Page中不同的事件的执行顺序逻辑。 二个步骤的过程 asp.net请求处理2步的过程如下所示用户发送一个请求到IIS 服务器 1、asp.net创建一个运行时可以处理请求。换句话说它创建应用程序对象请求响应和上下文对象处理请求。 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 扩展处理该请求然后将该请求传递给合适的 ISAPI 扩展。ASP.NET 处理已映射到其上的文件扩展名如 .aspx、.ascx、.ashx 和 .asmx。 步骤2ASP.NET 接收对应用程序的第一个请求 当 ASP.NET 接收到对应用程序中任何资源的第一个请求时名为 ApplicationManager 的类会创建一个应用程序域。应用程序域为全局变量提供应用程序隔离并允许单独卸载每个应用程序。在应用程序域中将为名为 HostingEnvironment 的类创建一个实例该实例提供对有关应用程序的信息如存储该应用程序的文件夹的名称的访问。 步骤3为每个请求创建 ASP.NET 核心对象 创建了应用程序域并对 HostingEnvironment 对象进行了实例化之后ASP.NET 将创建并初始化核心对象如 HttpContext、HttpRequest 和 HttpResponse。HttpContext 类包含特定于当前应用程序请求的对象如 HttpRequest 和 HttpResponse 对象。HttpRequest对象包含有关当前请求的信息包括 Cookie 和浏览器信息。HttpResponse 对象包含发送到客户端的响应包括所有呈现的输出和 Cookie。 步骤4将 HttpApplication 对象分配给请求初始化所有核心应用程序对象之后将通过创建 HttpApplication 类的实例启动应用程序。如果应用程序具有 Global.asax 文件则 ASP.NET 会创建 Global.asax 类从 HttpApplication 类派生的一个实例并使用该派生类表示应用程序。 注第一次在应用程序中请求 ASP.NET 页或进程时将创建 HttpApplication 的一个新实例。不过为了尽可能提高性能可对多个请求重复使用 HttpApplication 实例。 步骤5 由 HttpApplication 管线处理请求 MHPM (Module, handler, page and Module event)。 使用MHPM (Module, handler, page and Module event) 事件处理请求 一旦 HttpApplication对象创建在处理该请求时将由 HttpApplication 类执行。我们来了解下HttpModule HttpHandlers。 1、如果你想通过*.aspx*.html文件来处理程序逻辑那么你需要使用HttpHandler,换句话说httphandler是一个扩展的处理器。 2、如果你想使用ASP.NET管道来处理程序逻辑你需要使用HttpModule 换句话说httpmodule是一个事件处理器。 如何处理请求。mhpm有4个重要的步骤 步骤1M: HttpModule客户端开始请求处理。在asp.net引擎和httpmodule中的事件可以用来处理用户自己定义的逻辑。有6个重要的事件你可以在你的页面对象被创建之前调用 Begin Requestauthenticaterequestauthorizerequestresolverequestcacheacquirerequeststate与prerequesthandlerexecute。 步骤2H: ‘HttpHandler’一旦上述6个事件被执行完asp.net引擎调用processrequest事件如果已实现httphandler在您的项目。 步骤3P: ASP.NET page一旦httphandler执行asp.net页面对象被创建。而asp.net页面对象被创建Page对象的事件将被调用这可以帮助我们页面中定制自定义逻辑的处理。有6个重要的事件Init, Load, validate, event, render ,unload 简称 SILVER S – Start (does not signify anything as such just forms the word) , I – (Init) , L (Load) , V (Validate), E (Event) and R (Render)。步骤4M: HttpModule一旦页面对象是执行和从内存中卸载httpmodule提供网页执行事件可以用来注入自定义处理逻辑。有4个重要的后处理事件postrequesthandlerexecutereleaserequeststateupdaterequestcache与endrequest。 事件详细介绍 部分Event事件Description描述HttpModuleBeginRequest在 ASP.NET 响应请求时作为 HTTP 执行线链中的第一个事件发生。BeginRequest 事件发出信号表示创建任何给定的新请求。此事件始终被引发并且始终是请求处理期间发生的第一个事件。HttpModuleAuthenticateRequest当安全模块已建立用户标识时发生。AuthenticateRequest 事件发出信号表示配置的身份验证机制已对当前请求进行了身份验证。HttpModuleAuthorizeRequest安全模块已验证用户授权时发生。AuthorizeRequest 事件发出信号表示 ASP.NET 已对当前请求进行了授权。HttpModuleResolveRequestCache在 ASP.NET 完成授权事件以使缓存模块从缓存中为请求提供服务后发生从而绕过事件处理程序例如某个页或 XML Web services的执行。HttpModuleAcquireRequestState当 ASP.NET 获取与当前请求关联的当前状态如会话状态时发生。AcquireRequestState 事件在创建了事件处理程序之后引发。HttpModulePreRequestHandlerExecute恰好在 ASP.NET 开始执行事件处理程序例如某页或某个 XML Web services前发生。HttpHandlerProcessRequestHttphandler逻辑被执行。 在本节中我们会写需要将每页扩展执行的逻辑。PageInit OnInit 方法执行创建 Page 实例所需的初始化和设置步骤。在页生命周期的此阶段中页中声明的服务器控件都已初始化为默认状态但每个控件的视图状态尚未填充。在 Page_Init 阶段中页中的控件不能访问该页的其他服务器控件无论其他控件是子控件还是父控件。不一定会创建其他服务器控件也不一定能够访问它们PageLoadASP.NET控件完成加载你写的UI操作逻辑或任何其他逻辑在这里。PageValidate如果你有你的页面上有验证逻辑这里检查是否符合验证。 Render将页面最终的输出发送到浏览器如果你想做出一些最终的HTML的变化这是输出到浏览器你可以在这里输入你的HTML的逻辑。PageUnload页面对象从内存中卸载。HttpModulePostRequestHandlerExecute在 ASP.NET 事件处理程序例如某页或某个 XML Web service执行完毕时发生。HttpModuleReleaserequestState在 ASP.NET 执行完所有请求事件处理程序后发生。该事件将使状态模块保存当前状态数据。引发 ReleaseRequestState 事件以后应用程序以该请求结束并发出 ASP.NET 信号以存储该请求状态。HttpModuleUpdateRequestCacheBefore you end, if you want to update your cache.结束之前如果您想更新您的高速缓存。HttpModuleEndRequest当 ASP.NET 执行完事件处理程序以使缓存模块存储将用于从缓存为后续请求提供服务的响应时发生。 演示代码 在这段代码中我们创建HttpModule 和Httphandler 添加所有请求响应的事件 下面用 HttpModule Httphandler 跟踪所有活动并把它添加到一个全局性的集合变量中。public class clsHttpModule : IHttpModule{private HttpApplication httpApp;public static ArrayList objArrayList new ArrayList();public clsHttpModule(){}public void Dispose(){}public void Init(HttpApplication context){this.httpApp context;httpApp.Context.Response.Clear();objArrayList.Clear();objArrayList.Add(httpModule:Init);httpApp.AuthenticateRequest new EventHandler(OnAuthentication);httpApp.AuthorizeRequest new EventHandler(OnAuthorization);httpApp.BeginRequest new EventHandler(OnBeginrequest);httpApp.EndRequest new EventHandler(OnEndRequest);httpApp.ResolveRequestCache new EventHandler(OnResolveRequestCache);httpApp.AcquireRequestState new EventHandler(OnAcquireRequestState);httpApp.PreRequestHandlerExecute new EventHandler(OnPreRequestHandlerExecute);httpApp.PostRequestHandlerExecute new EventHandler(OnPostRequestHandlerExecute);httpApp.ReleaseRequestState new EventHandler(OnReleaseRequestState);httpApp.UpdateRequestCache new EventHandler(OnUpdateRequestCache);}void OnUpdateRequestCache(object sender, EventArgs a){objArrayList.Add(httpModule:OnUpdateRequestCache);}void OnReleaseRequestState(object sender, EventArgs a){objArrayList.Add(httpModule:OnReleaseRequestState);}void OnPostRequestHandlerExecute(object sender, EventArgs a){objArrayList.Add(httpModule:OnPostRequestHandlerExecute);}void OnPreRequestHandlerExecute(object sender, EventArgs a){objArrayList.Add(httpModule:OnPreRequestHandlerExecute);}void OnAcquireRequestState(object sender, EventArgs a){objArrayList.Add(httpModule:OnAcquireRequestState);}void OnResolveRequestCache(object sender, EventArgs a){objArrayList.Add(httpModule:OnResolveRequestCache);}void OnAuthorization(object sender, EventArgs a){objArrayList.Add(httpModule:OnAuthorization);}void OnAuthentication(object sender, EventArgs a){objArrayList.Add(httpModule:AuthenticateRequest);}void OnBeginrequest(object sender, EventArgs a){objArrayList.Add(httpModule:BeginRequest);}void OnEndRequest(object sender, EventArgs a){objArrayList.Add(httpModule:EndRequest);objArrayList.Add(hr);foreach (string str in objArrayList){httpApp.Context.Response.Write(str br);}}} webconfig中配置 httpModulesadd nameclsHttpModule typeWebDemo1.Common.clsHttpModule//httpModules 页面第一次加载效果 点击button按钮后 HttpModule HttpModule通过在某些事件中注册把自己插入ASP.NET请求处理管道。当这些事件发生的时候ASP.NET调用对相应的HTTP模块这样该模块就能处理请求了。 常用操作 1、向每个页面动态添加一些备注或说明性的文字2、判断用户登录 如果定义了多个HttpModule在web.config文件中引入自定义HttpModule的顺序就决定了多个自定义HttpModule在处理一个HTTP请求的接管顺序。 HttpHandlerHttpHandler是HTTP请求的处理中心真正地对客户端请求的服务器页面做出编译和执行并将处理过后的信息附加在HTTP请求信息流中再次返回到HttpModule中。HttpHandler与HttpModule不同一旦定义了自己的HttpHandler类那么它对系统的HttpHandler的关系将是“覆盖”关系。 为了验证请求是否进入HttpHandler 我们可以在WebConfig中 加入 add verb* path*.aspx typeWebDemo1.Common.clsHttpHandler,WebDemo1/ 调试程序看看。 综上我们可以总计出一张图 ASP.NET页面事件 在上面的部分我们已经看到了一个ASP.NET页面完整的请求事件。 最重要的部分之一是ASP.NET页面我们没有详细讨论相同。我们详细讨论下ASP.NET的页面事件。任何ASP.NET页面中有2个部分 如图 注意 大部分的开发者直接使用page_load方法的一切这不是一个好的做法。例如 填充控件设置视图状态应用主题等这些都是发生在页面上的负荷。因此我们可以在适当的事件添加适当的逻辑这将真正使你的代码整洁 符合逻辑。 序号事件控件初始化状态 是否可用表单数据是否可用什么逻辑可以写在这里 1InitNoNoNo OnInit 方法执行创建 Page 实例所需的初始化和设置步骤。在页生命周期的此阶段中页中声明的服务器控件都已初始化为默认状态但每个控件的视图状态尚未填充。在 Page_Init 阶段中页中的控件不能访问该页的其他服务器控件无论其他控件是子控件还是父控件。不一定会创建其他服务器控件也不一定能够访问它们。 2Load view stateNot guaranteedYesNot guaranteed您可以访问视图状态和任何同步逻辑 3PostBackdataNot guaranteedYesYes你可以访问表单数据。 4LoadYesYesYes绑定控件 等等。。。 5ValidateYesYesYes如果你的页面有验证或者你想为您的网页执行验证。 6EventYesYesYes如果这是通过点击一个按钮或下拉的变化那么相对应的事件将被执行。 7Pre-renderYesYesYes如果你想在这些控件视图状态最后保存之前修改UI对象的结构或属性值。 8Save view stateYesYesYes一旦所有服务器控件的变化完成这一事件控制数据保存在视图状态。 9RenderYesYesYes如果你想添加一些自定义的HTML输出。 10UnloadYesYesYes 你可以在这里做任何清理。 【转自】https://www.cnblogs.com/suizhouqiwei/archive/2012/08/15/2637775.html转载于:https://www.cnblogs.com/bad-man/p/7988826.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/88671.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!