ASP.NET的应用程序(页面、GloBal、编译)的生命周期

一、应用程序的生命周期
    1)页面请求:重用户想web服务器发送请求为起点。asp.net是web服务器下的isAPI扩展,在发送请求时,会对请求的文件扩展名进行匹配,确定由哪个ISAPI扩展处理该请求,然后将请求传递给何时ISAPI。(。aspx.ascx、ashx、asmx)。如果文件扩展名尚未映射到ASP.net,则asp.net将不会接受该请求如果没映射将不会对其文件请求执行身份验证或授权检查。如果希望映射特定文件,也应使用映射到asp.net的文件扩展名创建该文件。
 
    2)接受请求:当接受到对应程序中的资源的第一个请求时,名为ApplicationManager的类会创建一个应用程序域。应用程序域为全局变量提供应用程序隔离,并允许单独卸载每个应用程序。在应用程序域中,将名为HostingEnvironment的类创建一个实例,该实例提供对有关应用程序的信息(如存储该应用程序的文件夹的名字)的访问。如图:
        
           
 
    3)创建核心对象:创建了应用域并对HostingEnvironment对象进行了实例化之后,ASP.NET 将创建并初始化核心对象。如HttpContent、HttpRequest和HttpRespose。HttpContent类包含特定域当前应用请求的对象,如HttpRequest和HttpRespose。HttpRequest对象包含有关当前请求的信息,如cookie和浏览器信息。HttpResponse包含发送到客户端的相应。
        iis6之后的:HttpResponse对象的SubStatusCode属性,设置对失败请求跟踪有用代码。
                            HttpRespose对象的Headers属性提供对响应头的访问。
                            在一个事件处理多个httpApplication事件时,可以使用HttpContxt对象的    
                            IsPostNotification和CurrentNotification属性。
 
    4)HttpApplication对象的分配:初始会化应用程序后,将通过创建HttpApplication类的实例启动应用程序。如果程序具有Global。asax文件。此类是HttpApplication的派生类。
        创建HttpApplication实例时,将同时创建所有已配置模块。例如会创建一个SessionStateModule模块。创建所有模块之后,将调用HttpApplication类Init方法。
        加载哪些 ASP.NET 模块(如  SessionStateModule)取决于应用程序从父应用程序继承的托管代码模块。这还取决于在应用程序的 Web.config 文件的配置节中配置了哪些模块。在应用程序的 Web.config 的 system.webServer 节中的 modules 元素中添加或移除模块。
        
 
     5)HttpApplication管线处理请求: Module、Handler、Page、Module Event
        - 如果想通过*.aspx,*.html文件来处理程序逻辑,那么需要使用HttpHandler(扩展的处理器)。
        - 如果是使用asp.net管道来处理程序逻辑,需要使用HttpModule(事件扩展器)。
        【1】刚开始对请求进行验证,将检查浏览器发送信息,并确定其是否包含潜在的恶意标记(ValidateResquest)。如果已经在web.config文件UrlMappingsSection节点中配置了任何URL,则执行URL映射。
        【2】Module:BeginRequest、AuthenticateRequest(身份验证:匿名;基本;Forms;Windows)、PostAuthenticateRequest、AuthorizeRequest(授权)、PostAuthorizeRequest、ResolveRequestCache(解析缓存)、PostResolveRequestCache、MapRequestHandler(映射处理程序)、AcquireRequestState(获取当前请求关联的状态)、PreRequestHandleExecute(恰好开始执行事件程序)    
        【3】Handler:以上事件执行完,asp.net引擎调用processrequest事件,如果已实现则在项目中。
        【4】一旦httphandler执行,asp.net页面对象被创建。Page对象的事件将被调用,就可以自定义处理逻辑。包含事件有Init(如页面控件加载)、Load(自己写的逻辑或UI的操作)、validate(如果页面有验证逻辑,可以检查符合的验证)、event、render(最终将输出发送给浏览器,如对html做什么变换可处理)、unload(页面对象从内存中卸载)。
        【5】当页面对象执行和从内存中卸载,httpmodule提供页面执行事件可用来注入自定义处理逻辑。postrequestHandlerExecute(当页面的事件处理完毕后发生)、releaseRequestState(当执行所有事件后,该事件会保存当前状态数据,并发出信号存储该请求的状态)、updateRequestCache(接受之前可更新缓存)、endRequest(执行完事件处理程序以使缓存模块缓存将用于从缓存后续请求提供服务的相应发生)。
    
    6)续加:
        【1】可以通过在配置文件中添加system.webServer节点中配置modules中添加指定实现了module接口的类进行运行。
       
       
二、页面的生命周期
    请求-》开始-》初始化-》加载-》验证-》(回发)事件绑定-》渲染-》卸载
    常用页面事件:
    ** PreInit:检查IsPostBack属性是不是第一次处理该页,创建或重新创建动态控件,动态设置主控页,动态设置Theme属性,读取或设置配置文件属性值。(空间值尚未从视图状态还原)
    ** Init:在所有空间已经且已应用所有外观设置后引发使用该事件来读取或初始化空间属性。
    ** InitComplete:该事件来处理要求先完成所有初始化的任务。
    ** PreLoad:需要在Load事件前对页或控件执行处理。
    ** Load:在调用OnLoad事件方法,然后以递归方式对每个子控件执行相同操作,直到加载完本页和所有空间为止。
    ** 控件事件:
    ** LoadComplete:对需要加载页面上所有其他控件的任务使用该事务。
    ** PreRender:逻辑处理,数据绑定
    ** SaveStateComplete:保存ViewState状态数据。
    ** Render:走页面控件、服务控件、用户控件
    ** Unload
  
 
 
三、生命周期事件和Global文件
    此文件是HttpApplication类的派生类。在此常用的事件:
    ** Application_Start:
    ** Application_BeginRequest:
    ** Application_EndRequest:
    ** Application_Error:
    ** Application_End:
    续加:http模块:SessionStateModule如要启用可Session_Start
 
四、编译生命周期
    App_GlobalResources:编译应用程序的全局资源并生成资源程序集(bin文件夹中的)。
    App_WebResources: 创建并编译Web服务的代理类型。所生成web引用程序集连接到资源程序集。
    Web.config:如果应用程序的Web.config文件定义配置文件属性,则生成一个包含配置文件对象的程序集。
    App_Code:生成源代码文件并创建一个或多个程序集。所有代码程序集合配置文件都连接到资源和web引用程序集。
    Global.asax:编译应用程序对象并将其连接到所有先前产生的程序集。
    App_LocalResources:包含请求项的文件夹包含此文件夹,则编译本地资源文件的内容将其连接到全局资源程序集。
    各个网页、用户控件、http处理程序、http模块文件:根据需要编译链接到本地资源程序集合顶级程序集。
    主题、主控页、其他资源文件:在编译时引用的。
    
 
 
 
 
 
 
 
 
 
 
 

转载于:https://www.cnblogs.com/luanyizixuan/articles/5221558.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值