ASP.NET页面生命周期总结(1)
图解:1)
浏览器 :把用户的操作封装成一个请求通过socket发送到后台服务器。
后台服务器:首先有个内核模块Http.sys 和针对每个应用程序池都有一个请求队列。然后请求到达http.sys之后,就把请求放到相应请求的队列池子里面去。 完成这些步骤后通知w3svc服务,由w3svc服务负责触发‘工作进程’,告诉工作进程已经内核当中有一个请求去取一个请求进行处理。拿到请求的报文之后,工作进程开始处理,工作进程分成两种情况 :
1.静态文件(读取出来直接封装成响应的报文然后返回给客户端,PS:返回给客户端这个过程不是由工作进程直接进行交互的,而是工作进程把响应报文交给http.sys内核模块,内核模块再把响应报文发给客户端)
2.如果是动态网页:比如请求的是a.aspx这时候就会启动asp.net应用程序池,这过程中不是直接启动的,而是走了一个aspnet_isapi.dll(动态链接库不叫程序集了,由c或c++写的,这内部实现了iis内部定义的协议接口),请求到达工作进程之后,工作进程审核一下,如果是静态文件就自己处理,如果是动态文件,把请求发到aspnet_isapi.dll(asp.net扩展模块:负责启动asp.net运行时,包括clr加载都是由它进行做这个工作的)进行处理)。此时再请求.netFramework运行时。当.net Framework启动之后,它还有一个职责把请求报文传递到.net Framework运行时里面去(或者说传递到托管的环境里面去)
此时是由ISAPIRuntime.PR(这个PR方法是用来处理当前请求的)接口来负责aspnet_isapi.dll非托管模块和托管模块进行接洽
ISAPIRuntime.PR() 里面有一个参数 ecb→句柄,通过这个句柄可以拿到当前请求的报文,也可以通过ecb句柄通过响应报文返回给非托管模块。也就是说ecb句柄才是真正连接托管和非托管的路口。
在这个方法内部把ecb封装成了HttpWorkRequest对象。这时候HttpWorkRequest就包含了请求和响应两个部分。
虽然已经帮我们封装成了两个简单的部分,但这样还是太原始。因此微软内部又对此进行了再封装,于是把HttpWorkRequest对象继续传到HttpRuntime.PR()方法,这个PR方法把HttpWorkRequest对象传递到HttpRuntiome.PR(work)方法里面,而在这个方法里面就把workRequest对象封装成了现在用的HttpContext这就是上下文的由来。所以说HttpContext就是通过ecb产生出来的。
这个时候HttpRuntime内部就通过HttpApplication.Factory工厂创建一个HttpApplication对象(这个对象就是负责整个asp.net模型的运作的最基本的一个类,也是最重要的一个类)
下面由HttpApplication负责处理asp.net模型的运作:(图2)
Asp.net模型是一个管道模型,管道模型当中有23个步骤,19公开的事件 。这事件依次的被执行。事件也算是步骤。httpContext会随着管道依次的往下走,整个管道流动的是一个对象, 其中第7个事件和第8个事件之间根据请求地址创建一般处理程序或者是页面对象,在第11和第12事件之间执行对象的PR方法,执行PR方法之后,继续往下流动。最后全部到执行完了之后,返回响应内容,同样也是到达内核模块,再向客户端发送响应报文。
附注:
Page_Load是在页面的PR方法里面执行的,页面的PR方法就是页面的生命周期
PR方法就是Process Request方法
托管:
c#\vb.net等等语言通过编译器生成的程序集(exe、dll),CLR加载程序集 然后通过JIT即使编译器转成机器码再交给操作系统内核 这一类就成为托管程序。
IL是一个统一的标准,所以也正是因为IL成就了.net平台
.net平台特点 :跨平台、跨语言 java也是跨平台跨语言,两者都是生成了IL中间语言
非托管:
c|c++|VB…(PS:这里的c|c++|vb..是原生程序)通过编译器直接生成的exe 直接交给操作系统内核,操作系统内核可以直接解析并且执行叫做非托管程序
ASP.NET页面生命周期总结(1)的更多相关文章
- ASP.net 页面生命周期
ASP.NET 页面生命周期 Page_Preinit(); 在页初始化开始时发生 Page_Init(); 在所有控件初始化且应用外观设置后引发 Page_InitComplete(); 在页初始化 ...
- asp.net页面生命周期
Asp.Net页面生命周期 本文转载自:http://www.cnblogs.com/xhwy/archive/2012/05/20/2510178.html 一.什么是Asp.Net页面生命周期 当 ...
- 【深入ASP.NET原理系列】--ASP.NET页面生命周期
前言 ASP.NET页面运行时候,页面将经历一个生命周期,在生命周期中将执行一系列的处理步骤.包括初始化.实例化控件.还原和维护状态.运行时间处理程序代码以及进行呈现.熟悉页面生命周期非常重要,这样我 ...
- ASP.NET编程模型之ASP.NET页面生命周期图解
ASP.NET编程模型中ASP.NET页面生命周期是指什么呢?它包括什么呢?ASP.NET编程模型之ASP.NET页面生命周期具体的过程有哪些呢?下面就开始我们的讲解吧: ASP.NET 页运行时,此 ...
- ASP.NET页面生命周期与控件生命周期
ASP.NET页面生命周期 (1)PreInit 预初始化(2)Init 初始化(3)InitComplete 初始化完成(4)PreLoad 预加载(5)Load 加载(6)LoadComplete ...
- Asp.Net页面生命周期--转发(学海无涯)
一.什么是Asp.Net页面生命周期 当我们在浏览器地址栏中输入网址,回车查看页面时,这时会向服务器端(IIS)发送一个request请求,服务器就会判断发送过来的请求页面, 完全识别 HTTP 页 ...
- ASP.NET页面生命周期和asp.net应用程序生命周期
作为一个asp.net程序员,不了解ASP.NET页面生命周期和asp.net应用程序生命周期是绝对不行的,那永远只能是菜鸟级别.我很早就学过,可是没次还是得去翻,一些事件还是记不住,还是记在自己的b ...
- (转)Asp.net页面生命周期详解任我行(1)-小试牛刀,编写页面代码
原文地址:http://www.cnblogs.com/xuyubing/archive/2013/10/01/3348344.html 前言 很久很久以前,还是我在学校的时候,我就看了传智里面视频, ...
- Asp.Net页面生命周期【转载,地址:http://www.cnblogs.com/xhwy/archive/2012/05/20/2510178.html】
一.什么是Asp.Net页面生命周期 当我们在浏览器地址栏中输入网址,回车查看页面时,这时会向服务器端(IIS)发送一个request请求,服务器就会判断发送过来的请求页面, 完全识别 HTTP 页 ...
- Asp.net页面生命周期详解任我行(3)-服务器处理请求详细过程
前言 百度了一下才知道,传智的邹老师桃李满天下呀,我也是邹老师的粉丝,最开始学习页面生命周期的时候也是看了邹老师的视频. 本人是参考了以下前辈的作品,本文中也参合了本人心得,绝非有意盗版,旨在传播,最 ...
随机推荐
- CoreCLR源码探索(二) new是什么
前一篇我们看到了CoreCLR中对Object的定义,这一篇我们将会看CoreCLR中对new的定义和处理 new对于.Net程序员们来说同样是耳熟能详的关键词,我们每天都会用到new,然而new究竟 ...
- linux c遍历文件夹 和文件查找的方法
linux c遍历文件夹的方法比较简单,使用c来实现 #include <iostream> #include <stdio.h> #include <sys/types ...
- Mac OS X Mountain Lion安装Bochs
基本步骤可以看这个帖子 http://hi.baidu.com/any_where/item/990c0acdfbd6542c47d5c003 大体是: 1.安装x11; 2.开启Mac OS X的r ...
- Java笔记(二十六)……IO流上 字节流与字符流
概述 IO流用来处理设备之间的数据传输 Java对数据的操作时通过流的方式 Java用于操作流的对象都在IO包中 流按操作的数据分为:字节流和字符流 流按流向不同分为:输入流和输出流 IO流常用基类 ...
- scp 详细总结
转自:http://www.ha97.com/4169.html scp命令跟cp命令类似,只不过cp命令是在同一台机器上用的,scp是在两台机器上复制传输数据的命令.scp实质相当于利用SSH协议来 ...
- WCF入门(一)——基本知识
构建一个WCF程序通常分为三个部分:服务类(Server).宿主(Host).客户程序(Client).有一个很重要的程序集(System.ServeiceModel)要引用,它包含WCF的核心功能. ...
- A better way to learn D3 js - iLearning D3.js
iLearning D3.js Basic is an iPad app to learn and code with D3. In 1.1 version, new tutorial is prov ...
- 读FCL源码系列之List<T>---让你知其所以然---内含疑问求大神指点
序言 在.NET开发中,List<T>是我们经常用到的类型.前段时间看到其他部门小伙伴讨论“两个List(10W个元素)集合求并集,list1.Where(p=>list2.Cont ...
- JQuery简单实现锚点链接的平滑滚动
在平时的项目中,我们经常需要一些特效链接,如果使效果进一步加强,我们可以使点击锚点链接平滑滚动到锚点,下面就来给大家讲解下如何使用jQuery来实现. 一般使用锚点来跳转到页面指定位置的时候,会生 ...
- 成品入库过账bapi
入库过账 FUNCTION ZPP_BAPI_PRODUCT_STOCK_IN. *"---------------------------------------------------- ...