这几天一直在看ASP.NET应用程序生命周期,真是太难了,我理解起来费了劲了,但偏偏它又是那么重要,所以我希望能给大家带来一篇容易理解又好用的文章来帮助学习ASP.NET应用程序生命周期。这篇就是了。
当你访问博客园想看我的这篇文章的时候,这个请求就被博客园的WEB SERVER(IIS)接收到了。博客园IIS看了一眼我的请求,“噢,是.aspx啊,给ASP.NET去处理吧,就把我这个请求给了ASP.NET,并且说:“这个你来处理,你处理完了之后把HTML给我,我好给邱爽一个回复”。
ASP.NET收到IIS传递过来的请求后也没时间抱怨啊 就开始干活儿了。怎么干的呢?
第一,它先创建了一个Context对象,它就像个箱子,箱子当然是来装东西的啦,装什么呢?
第二,ASP.NET创建了一个Request对象,包含了IIS传递给它的所有信息(IIS传递过来的实际就是个Request嘛)。
第三,ASP.NET接着又创建了一个Response对象,用来装HTML的,也放进箱子(Context)
第四,然后,ASP.NET说,太累了,这活儿没个干,还是雇个人吧。就雇了个项目经理(HttpApplication对象),然后就把箱子(Context)交给项目经理并且对它说,这里有我们收到的Request,你需要做的就是把里面的Reponse填一下,具体怎么干你掂量着吧,就走了。
这个项目经理(HttpApplication对象)就想啊,凭啥活儿我干钱你们拿啊?不行,我得找俩苦力去,于是就有了:程序员HttpModule和程序员HttpHandler,姑且就称他们为P_Module和P_Handler吧,项目经理先找到了P_Module.
P_Module(HttpModule)非常的能干,它能够去查看ASP.NET交给项目经理(HttpApplication对象)的箱子(Context),并且根据里面的东西做一些决定,比如安全啊(FormsAuthenticationModule),状态啊(SessionStateModule )等等吧。 在P_Module工作完成之后(也许已经改变了箱子里(Context)的内容),项目经理开始找P_Handler来做填充Response的工作。现在招人难啊,找了好久也没招到,好吧,找猎头(HttpHandler Factory)吧。猎头公司一看,“噢,要.aspx Handler啊",于是找来了一个天生就善于并且愿意处理页面的P_Handler(.aspx页面最终会编译成一个有继承机构的IHttpHander),然后交给项目经理(HttpApplication)。项目经理看了一眼P_Handler之后,觉得还行,就把P_Module处理过的箱子交给它并且说:"处理一下这个箱子里的东西,然后交给我"。
P_Handler是个天生的处理页面的牛人,它根据Request对象里的东西是用了一招"乾坤大挪移",不知道怎么挪的,就挪出了HTML并塞进了Response对象中。P_Handler自信的笑了一声,把箱子交还给了项目经理(HttpApplication对象)。项目经理从箱子里面把Response对象拿出来直接给了IIS,IIS又给了你了,你就看到这篇文章了。
故事就是故事,故事就是故去的事,就是往事。那往事肯定就有遗漏的地方。那我们这个故事遗漏了哪些地方呢?
第一,IIS和ASP.NET之间的交互不是像我说的那么简单而直接的,中间还发生了很多事情。
第二,HttpModule,也就是我们的程序员P_Module, 它其实还能干很多事情,我们并没有去发掘。
第三,HttpHandler,也就是我们的程序员P_Handler,它的"乾坤大挪移"就是ProcessRequest方法,这里并没有详述到。
第四,。。。等我再想想再跟您聊。