原文地址:http://www.cnblogs.com/skm-blog/archive/2013/07/07/3176713.html

Asp.Net生命周期对于初级甚至中级程序员来说,一直都是一个难题,很多程序员不了解生命周期,导致使用Asp.Net做开发感觉很不灵活,感觉太多东西被微软封装好了,我们不能改变,其实只要你稍微了解一下就知道,原来不是这样的!

我写这一系列文章是采用总分的方式,先让大家整体了解,然后再逐一突破。先将一个故事,也是园子里看到的(http://www.cnblogs.com/GodSpeed/archive/2010/06/19/1761095.html),我认为这个写的有些细节上的错误,稍稍添加些自己的想法和理解,如有错误,还请留言!

当你访问博客园想看我的这篇文章的时候,这个请求就被博客园的WEB SERVER(IIS)接收到了【其实是被IIS中的一个叫做inetinfo.exe的进程截获了】。博客园IIS看了一眼你的请求,“噢,是.aspx啊,给aspnet_isapi.dll去处理吧,就把我这个请求给了aspnet_isapi.dll, 并且说:“这个你来处理,你处理完了之后把HTML给我,我好给请求者一个回复”。

aspnet_isapi.dll收到IIS传递过来的请求后也没时间抱怨啊 就开始干活儿了。怎么干的呢?其实啊很简单,就是通过一个http pipeline管道转交给了aspnet_wp.exe进程,接下来就到了.netFramework的HttpRunTime处理中心,HttpRunTime它其实就是做了几件事情。

第一,它先创建了一个Context对象,它就像个箱子,箱子当然是来装东西的啦,装什么呢?

第二,HttpRunTime创建了一个Request对象,包含了IIS传递给它的所有信息(IIS传递过来的实际就是个Request嘛)。

第三,HttpRunTime接着又创建了一个Response对象,用来装HTML的,也放进箱子(Context)

第四,然后,HttpRunTime说,太累了,这活儿没个干,还是雇个人吧。就找到了HttpApplication Factory公司要了一个项目经理(HttpApplication对象),然后就把箱子(Context)交给项目经理并且对它说,这里有我们收到的Request,你需要做的就是把 里面的Reponse填一下,具体怎么干你掂量着吧,就走了。

这个项目经理(HttpApplication对象)就想啊,凭啥活儿我干钱你们拿啊?不行,我得找俩苦力去,于是就有了:程序员HttpModule和程序员HttpHandler,姑且就称他们为P_Module和 P_Handler吧,项目经理先找到了P_Module,并且给予了p_Module足够大的权力,P_Module(HttpModule)非常的能干,它能够去查看HttpRunTime交给项目经理(HttpApplication对象)的箱子(Context),并且根据里面的东西做一些决定,比如安全啊 (FormsAuthenticationModule),状态啊(SessionStateModule )等等吧。 在P_Module工作完成之后(也许已经改变了箱子里(Context)的内容),然后他就转交给他的副手P_Handler来做填充Response的工作。 可是啊,想找个合适的P_Handle也很难啊,找了好久也没找到,好吧,找猎头(HttpHandler Factory)吧。猎头公司一看,“噢,要.aspx Handler啊",于是找来了一个天生就善于并且愿意处理页面的P_Handler,所以呢P_Module就把自己处理过的箱子交给它并且说:"处理一下这个箱子里的东西,然后交给我"。

P_Handler是个天生的处理页面的牛人,它根据Request对象里的东西是用 了一招"乾坤大挪移",不知道怎么挪的,就挪出了HTML并塞进了Response对象中。P_Handler自信的笑了一声,把箱子交还给了HttpModule。然后呢再一层一层的把这个箱子向上传递【不能越级啊,每个人都有自己顶头上司,只能把箱子交给自己的顶头上司】,最后就传给了IIS,IIS又给了你了,你就看到这篇文章了。

故事就是故事,故事就是故去的事,就是往事。那往事肯定就有遗漏的地方。那我们这个故事遗漏了哪些地方呢?

第一,IIS和ASP.NET之间的交互不是像我说的那么简单而直接的,中间还发生了很多事情。

第二,HttpModule,也就是我们的程序员P_Module, 它其实还能干很多事情,我们并没有去发掘。

第三,HttpHandler,也就是我们的程序员P_Handler,它的"乾坤大挪移"就是ProcessRequest方法,这里并没有详述到。

第四,。。。等我再想想再跟您聊。

希望这边小文能够帮助你更容易的理解ASP.NET生命周期,我会继续努力,争取以最简单明了的方式来speak out ASP.NET原理和运行机制。欢迎拍砖,谢谢。

最新文章

  1. iOS 相机
  2. 理解DOM事件流的三个阶段
  3. 使用Struts 2防止表单重复提交
  4. ueditor编辑器和at.js集成
  5. Internet信息服务找不到
  6. 五、Java基础---------if else、switch总结
  7. C#(HTML)_小技巧_关于textbox框中不能输入HTML标签的解决方法(如输入“<p>”后,在提交表单时系统会崩溃)
  8. Oracle 课程七之分析和动态采样
  9. linux下简单文本处理
  10. apache .htaccess 伪静态重定向,防盗链 限制下载...
  11. HDU-------An Easy Task
  12. 【Linux部署 · GIT】在linux系统安装git和配置实现SSH
  13. 用js把图片做的富有动态感,并对以后需要用着的属性进行封装
  14. jsp servlet table 集合list 数据 绑定
  15. bzoj5109: [CodePlus 2017]大吉大利,晚上吃鸡!
  16. Python概念(八)字符串格式化:%和.format
  17. react-native 热更新react-native-pushy集成遇到的问题
  18. java构造函数总结
  19. Oracle 用户、角色管理简介
  20. 树莓派3b 串口通信初次尝试

热门文章

  1. python 递归函数和二分查找
  2. WinForm Flicker闪屏解决方案
  3. SpringMvc入门四----rest风格Url
  4. 你知道PING功能是怎么实现的吗
  5. git 本地文件里内容 操作记录
  6. 【转】Jmeter性能测试报告解析
  7. UiAutomator viewer 在tools下启动、资源jar包在platforms下(如android22)
  8. java代码如何替换字符
  9. MySQL的Innodb缓存相关优化
  10. MyEclipse10.6/Eclipse4.2 集成 flash builder 4.6