ASP.NET页面执行过程(谁能讲解一下..) 想了解一下.ASP.NET页面执行的过程.看了两本ASP.NET的书.两本书上写的不一样.现在很模糊.谁能解释一下给我听听呀. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 请求一个页面:(1)IIS调用编译好的dll,调用OnLoad等事件,生成数据。(2)根据aspx的设置及数据,生成html。(3)传递给客户端浏览器。回传:(1)将要回传数据传递给IIS.(2)后台处理数据。(3)处理后数据与aspx结合,生成html。(4)传递给客户端浏览器。 我在一本书上看见是这样写的.第一次请求.对代码进行编译,然后处理文件.然后执行代码.然后转化为HTML对吗? Q: 第一次请求.对代码进行编译,然后处理文件.然后执行代码.然后转化为HTML——————————————————————————————————————————A: 对。但是从技术上说几乎是“毫无意义”。对于编程最应该关心的是“执行代码”的过程内部过程,如果没有掌握点细节,等于是空的什么也没有学到。 算了,我大致的说一下:首先是IIS接收到请求,让后把它发给ASP.NET。ASP.NET干的第一件事情是创建HttpContext对象。然后,HttpApplication开始接管。首先是触发BeginRequest事件。然后身份验证再然后授权再然后创建State,也就是Session。然后是缓存等策略。然后执行IHttpHandler,一般是Page。那么现在控制权交给了Page如果aspx文件还没有被编译,那么就会先编译成一个Page类。Page先触发PreInit事件然后应用Themes然后还原所有控件的ViewState,触发Init事件,触发所有控件的Init事件。然后触发InitComplete事件。然后触发PreLoad事件。然后触发Load事件,触发所有控件的Load事件。然后是LoadComplete然后是PreRender,触发所有控件的PreRender事件。再就是PreRenderComplete然后开始Render HTML代码最后是Unload,触发所有控件的Unload事件。然后Page的事情就干完了交还给HttpApplication。HttpApplication触发的最后一个事件是EndRequest这个时候ASP.NET的工作就干完了工作交还给IIS。 前面够具体了,我补充一下代码中各个一定发生的事件的出现顺序:PreInit Init ---------->这是2003里加一般事件委托的时候InitCompletePreLoadLoad --------->这就是执行Page_Load的时候了LoadCompletePreRenderPreRenderCompleteSaveState ---------->处理ViewState的时候SaveStateCompleteRender ---------->呈现页面 Q: 处理文件.和执行代码.有什么不同?——————————————————————————————————————————A: 处理文件估计是说把dll保存在磁盘系统,例如windows的temp目录中,以及必要的时候查询这个目录去装入特定的dll。你从Ivony() 的之中可以看到,通常都不用去特意谈论编译和保存dll、装入dll的细节。另外“然后转化为HTML”本来就是“执行代码”的其中一个步骤。 PreInit Init ---------->这是2003里加一般事件委托的时候InitCompletePreLoadLoad --------->这就是执行Page_Load的时候了LoadCompletePreRenderPreRenderCompleteSaveState ---------->处理ViewState的时候SaveStateCompleteRender ---------->呈现页面这些都算执行代码的过程吧. 1、asp.net页面的处理步骤:if (this.MaintainScrollPositionOnPostBack){ this.LoadScrollPosition();}this.PerformPreInit();this.InitRecursive(null);this.OnInitComplete(EventArgs.Empty);if (this.IsPostBack){ this.LoadAllState(); this.ProcessPostData(this._requestValueCollection, true);}this.OnPreLoad(EventArgs.Empty);this.LoadRecursive();if (this.IsPostBack){ this.ProcessPostData(this._leftoverPostData, false); this.RaiseChangedEvents(); this.RaisePostBackEvent(this._requestValueCollection);}this.OnLoadComplete(EventArgs.Empty);if (this.IsPostBack && this.IsCallback){ this.PrepareCallback(callbackId);}else if (!this.IsCrossPagePostBack){ this.PreRenderRecursiveInternal();}this.PerformPreRenderComplete(); this.SaveAllState();this.OnSaveStateComplete(EventArgs.Empty);if (this.MaintainScrollPositionOnPostBack && (this._form == null)){ throw new HttpException(SR.GetString("MaintainScrollPositionSetWithNoServerForm"));}if (webPart != null){ this.ExportWebPart(webPart);}else{ this.RenderControl(this.CreateHtmlTextWriter(this.Response.Output));}上面的步骤仅适用于正常请求和回发,IsCrossPagePostBack和IsCallback的具体情况,请看 ProcessRequestMain方法。2、一个请求的处理步骤:1. BeginRequest2. AuthenticateRequest3. PostAuthenticateRequest4. AuthorizeRequest5. PostAuthorizeRequest6. ResolveRequestCache7. PostResolveRequestCache8. PostMapRequestHandler9. AcquireRequestState10. PostAcquireRequestState11. PreRequestHandlerExecute12. At this stage, the selected handler executes the current request. The most familiar handler is thePage handler.13. PostRequestHandlerExecute14. ReleaseRequestState15. PostReleaseRequestState16. UpdateRequestCache17. PostUpdateRequestCache18. EndRequest其中第12步就是上面页面的处理。 PreInit Init ---------->这是2003里加一般事件委托的时候InitCompletePreLoadLoad --------->这就是执行Page_Load的时候了LoadCompletePreRenderPreRenderCompleteSaveState ---------->处理ViewState的时候SaveStateCompleteRender ---------->呈现页面这些都算执行代码的过程吧.是吧?? 怎么设置Sql server 关于泛型的问题,请问如何解决? 使用过Ajax.net的朋友请进来看看,100分相送。 请问要读数据表里的指定行,指定列用datareader控件怎么实现 ++++++IConfigurationSectionHandler的问题++++++++ 有谁用.net做过或者正在做网上考试? 请教:asp.net水晶报表导出excel,表格怎样加边框? asp.net登录控件问题 xml文件的存储问题,请教 这个问题谁遇到过!!!急!!! 保存图片问题。 DropDownList绑定数据库的问题?
(1)IIS调用编译好的dll,调用OnLoad等事件,生成数据。
(2)根据aspx的设置及数据,生成html。
(3)传递给客户端浏览器。
回传:
(1)将要回传数据传递给IIS.
(2)后台处理数据。
(3)处理后数据与aspx结合,生成html。
(4)传递给客户端浏览器。
第一次请求.对代码进行编译,然后处理文件.然后执行代码.然后转化为HTML
对吗?
——————————————————————————————————————————
A: 对。但是从技术上说几乎是“毫无意义”。对于编程最应该关心的是“执行代码”的过程内部过程,如果没有掌握点细节,等于是空的什么也没有学到。
ASP.NET干的第一件事情是创建HttpContext对象。
然后,HttpApplication开始接管。
首先是触发BeginRequest事件。
然后身份验证
再然后授权
再然后创建State,也就是Session。
然后是缓存等策略。
然后执行IHttpHandler,一般是Page。
那么现在控制权交给了Page
如果aspx文件还没有被编译,那么就会先编译成一个Page类。
Page先触发PreInit事件
然后应用Themes
然后还原所有控件的ViewState,触发Init事件,触发所有控件的Init事件。
然后触发InitComplete事件。
然后触发PreLoad事件。
然后触发Load事件,触发所有控件的Load事件。
然后是LoadComplete
然后是PreRender,触发所有控件的PreRender事件。
再就是PreRenderComplete
然后开始Render HTML代码
最后是Unload,触发所有控件的Unload事件。
然后Page的事情就干完了
交还给HttpApplication。
HttpApplication触发的最后一个事件是EndRequest
这个时候ASP.NET的工作就干完了
工作交还给IIS。
Init ---------->这是2003里加一般事件委托的时候
InitComplete
PreLoad
Load --------->这就是执行Page_Load的时候了
LoadComplete
PreRender
PreRenderComplete
SaveState ---------->处理ViewState的时候
SaveStateComplete
Render ---------->呈现页面
——————————————————————————————————————————
A: 处理文件估计是说把dll保存在磁盘系统,例如windows的temp目录中,以及必要的时候查询这个目录去装入特定的dll。你从Ivony() 的之中可以看到,通常都不用去特意谈论编译和保存dll、装入dll的细节。另外“然后转化为HTML”本来就是“执行代码”的其中一个步骤。
Init ---------->这是2003里加一般事件委托的时候
InitComplete
PreLoad
Load --------->这就是执行Page_Load的时候了
LoadComplete
PreRender
PreRenderComplete
SaveState ---------->处理ViewState的时候
SaveStateComplete
Render ---------->呈现页面这些都算执行代码的过程吧.
if (this.MaintainScrollPositionOnPostBack)
{
this.LoadScrollPosition();
}
this.PerformPreInit();
this.InitRecursive(null);
this.OnInitComplete(EventArgs.Empty);
if (this.IsPostBack)
{
this.LoadAllState();
this.ProcessPostData(this._requestValueCollection, true);
}
this.OnPreLoad(EventArgs.Empty);
this.LoadRecursive();
if (this.IsPostBack)
{
this.ProcessPostData(this._leftoverPostData, false);
this.RaiseChangedEvents();
this.RaisePostBackEvent(this._requestValueCollection);
}
this.OnLoadComplete(EventArgs.Empty);if (this.IsPostBack && this.IsCallback)
{
this.PrepareCallback(callbackId);
}
else if (!this.IsCrossPagePostBack)
{
this.PreRenderRecursiveInternal();
}
this.PerformPreRenderComplete();
this.SaveAllState();
this.OnSaveStateComplete(EventArgs.Empty);
if (this.MaintainScrollPositionOnPostBack && (this._form == null))
{
throw new HttpException(SR.GetString("MaintainScrollPositionSetWithNoServerForm"));
}
if (webPart != null)
{
this.ExportWebPart(webPart);
}
else
{
this.RenderControl(this.CreateHtmlTextWriter(this.Response.Output));
}上面的步骤仅适用于正常请求和回发,IsCrossPagePostBack和IsCallback的具体情况,请看 ProcessRequestMain方法。2、一个请求的处理步骤:
1. BeginRequest
2. AuthenticateRequest
3. PostAuthenticateRequest
4. AuthorizeRequest
5. PostAuthorizeRequest
6. ResolveRequestCache
7. PostResolveRequestCache
8. PostMapRequestHandler
9. AcquireRequestState
10. PostAcquireRequestState
11. PreRequestHandlerExecute
12. At this stage, the selected handler executes the current request. The most familiar handler is the
Page handler.
13. PostRequestHandlerExecute
14. ReleaseRequestState
15. PostReleaseRequestState
16. UpdateRequestCache
17. PostUpdateRequestCache
18. EndRequest其中第12步就是上面页面的处理。
Init ---------->这是2003里加一般事件委托的时候
InitComplete
PreLoad
Load --------->这就是执行Page_Load的时候了
LoadComplete
PreRender
PreRenderComplete
SaveState ---------->处理ViewState的时候
SaveStateComplete
Render ---------->呈现页面这些都算执行代码的过程吧.是吧??