.Net源码之Page类    自.NetFrameWork开源以来已经一段时间了,以下是我关于这些开源代码的一点理解,本篇主要讨论了Page类本身,和生命周期中的初始化与加载阶段在Page类代码中的体现.借此篇只是希望抛砖引玉,让大家能够更多的关注与源代码的研究,让我们在开发的时候能够有更深层次的理解.对于出现的Error等,我们能够更加清晰的理解这个机制.由于水平有限,不足之处望其谅解!当然希望大家能够指出.^_^!(让臭鸡蛋来的更猛烈些吧!^_^)
.Net源码之Page类
.Net源码之Page类我们用Asp.Net开发的所有的Web窗体页都是直接或者间接的继承之Page类。我们今天讲的就是这个Page类,在我们看这个Page类之前,我们先来看一下Asp.Net页的生命周期。因为Asp.Net页的加载的过程就是严格的根据这个生命周期的过程来执行的。
.Net源码之Page类
.Net源码之Page类根据MSDN对于ASP.NET页生命周期的定义,有以下8个方面:页请求,开始,页初始化,页加载,验证,回发事件,呈现,卸载。
.Net源码之Page类
.Net源码之Page类既然我们这个Page类是严格按照这个生命周期阶段来,那么我们这个类的入口点在哪里呢?
.Net源码之Page类
.Net源码之Page类现在我们先记下这8个生命周期阶段和这个问题,接下来就来看看这个Page类。我们先从MSDN对这个类的解析开始,MSDN对Page类的解析有以下几个方面:
.Net源码之Page类
.Net源码之Page类
1.             表示从 ASP.NET Web 应用程序的宿主服务器请求的 .aspx 文件
.Net源码之Page类
.Net源码之Page类
2.             Page类与扩展名为 .aspx 的文件相关联。这些文件在运行时被编译为 Page对象,并被缓存在服务器内存中。
.Net源码之Page类
.Net源码之Page类
3.             Page对象充当页中所有服务器控件的命名容器。
.Net源码之Page类
.Net源码之Page类
4.             Page类是一个用作 Web 应用程序的用户界面的控件
.Net源码之Page类
.Net源码之Page类对于第1条我们大家都已经清楚了,第2,3条我们本次不讨论。单看第4条,忽略定语,就是 “Page类是控件”。既然是控件,那么Page类肯定是直接或者间接的继承自Control类了。
.Net源码之Page类
.Net源码之Page类那么下面我们从源代码上来看一下Page类的定义是怎么样的。
.Net源码之Page类
.Net源码之Page类
public class Page: TemplateControl, IHttpHandler
.Net源码之Page类
.Net源码之Page类继承了TemplateControl类,并且实现了接口IHttpHandler。现在我们可以肯定TemplateControl类肯定是直接或者间接继承自Control类的,查看源代码发现事实也是如此。现在我们不管这个TemplateControl类,如果大家感兴趣的话,可以通过MSDN,查看源代码自己去了解,这里不做解释了。我们关注的重点其实是接口IHttpHandler,关于IHttpHandler的解析大家看看MSDN吧,我们下面直接看一下它的源代码,发现定义了一个属性和一个方法,我们主要来关注一下这个方法:
.Net源码之Page类
.Net源码之Page类
void ProcessRequest(HttpContext context);
.Net源码之Page类
.Net源码之Page类     MSDN对此方法的解释:通过实现 IHttpHandler 接口的自定义 HttpHandler 启用 HTTP Web 请求的处理。对于这个IHttpHandler接口,我暂时建议大家去关注一下,这个东东非常有用,我们可以利用它来做很多事情,比如,我们可以利用它来防止图片被盗链,或者重写URL。
.Net源码之Page类
.Net源码之Page类       说明这个是个入口点,对于Web请求的处理,通过此方法开始,那么我们就知道了Page类的入口点在哪里了。
^_^
.Net源码之Page类
.Net源码之Page类       那么我们就来看看这个Page的入口点函数吧!我们查看了这个函数会发现,它将会调用另外一个函数,虽然这个入口点函数没甚么可以说的,但是有一个关键点,我们看一下如下定义:
.Net源码之Page类
.Net源码之Page类       
public virtual void ProcessRequest(HttpContext context)
.Net源码之Page类
.Net源码之Page类     不知道大家发现没有,整个是虚函数,那就是我们可以在自己的页面中Override它,那么这个对我们有甚么用呢?主要的一点就是我们控制了生命周期开始的开关。如果我们不需要这个过程,我们就可以Override了,然后不调用后面的过程。对于文字描述,我们可能比较迷惑。甚么时候我们不需要它呢?现在说个例子,我们大家都会写一种页面,就是用来页面转向的,那时候我们完全不需要甚么乱七八糟的生命周期这么多阶段(不包括页请求,开始等,这些肯定有,
^_^),直接可以在Override函数里面执行转向了,免的麻烦。当然这个例子有点牵强,但是也就是这个意思,当不需要其后的生命周期阶段的时候,我们可以将其Override了。
.Net源码之Page类
.Net源码之Page类       现在我们可以来看一下这个被调用的函数了,如下:
.Net源码之Page类

相关文章:

  • 2021-12-26
  • 2021-06-25
  • 2021-05-12
  • 2021-10-24
  • 2022-01-18
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-11-28
  • 2022-02-16
  • 2022-02-03
  • 2021-09-29
  • 2022-12-23
  • 2021-05-25
  • 2021-06-20
相关资源
相似解决方案