图解: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等等语言通过编译器生成的程序集exedll),CLR加载程序集 然后通过JIT即使编译器转成机器码再交给操作系统内核 这一类就成为托管程序。

IL是一个统一的标准,所以也正是因为IL成就了.net平台

.net平台特点 :跨平台、跨语言   java也是跨平台跨语言,两者都是生成了IL中间语言

非托管:

c|c++|VB…PS:这里的c|c++|vb..是原生程序)通过编译器直接生成的exe 直接交给操作系统内核,操作系统内核可以直接解析并且执行叫做非托管程序

ASP.NET页面生命周期总结(1)的更多相关文章

  1. ASP.net 页面生命周期

    ASP.NET 页面生命周期 Page_Preinit(); 在页初始化开始时发生 Page_Init(); 在所有控件初始化且应用外观设置后引发 Page_InitComplete(); 在页初始化 ...

  2. asp.net页面生命周期

    Asp.Net页面生命周期 本文转载自:http://www.cnblogs.com/xhwy/archive/2012/05/20/2510178.html 一.什么是Asp.Net页面生命周期 当 ...

  3. 【深入ASP.NET原理系列】--ASP.NET页面生命周期

    前言 ASP.NET页面运行时候,页面将经历一个生命周期,在生命周期中将执行一系列的处理步骤.包括初始化.实例化控件.还原和维护状态.运行时间处理程序代码以及进行呈现.熟悉页面生命周期非常重要,这样我 ...

  4. ASP.NET编程模型之ASP.NET页面生命周期图解

    ASP.NET编程模型中ASP.NET页面生命周期是指什么呢?它包括什么呢?ASP.NET编程模型之ASP.NET页面生命周期具体的过程有哪些呢?下面就开始我们的讲解吧: ASP.NET 页运行时,此 ...

  5. ASP.NET页面生命周期与控件生命周期

    ASP.NET页面生命周期 (1)PreInit 预初始化(2)Init 初始化(3)InitComplete 初始化完成(4)PreLoad 预加载(5)Load 加载(6)LoadComplete ...

  6. Asp.Net页面生命周期--转发(学海无涯)

    一.什么是Asp.Net页面生命周期 当我们在浏览器地址栏中输入网址,回车查看页面时,这时会向服务器端(IIS)发送一个request请求,服务器就会判断发送过来的请求页面,  完全识别 HTTP 页 ...

  7. ASP.NET页面生命周期和asp.net应用程序生命周期

    作为一个asp.net程序员,不了解ASP.NET页面生命周期和asp.net应用程序生命周期是绝对不行的,那永远只能是菜鸟级别.我很早就学过,可是没次还是得去翻,一些事件还是记不住,还是记在自己的b ...

  8. (转)Asp.net页面生命周期详解任我行(1)-小试牛刀,编写页面代码

    原文地址:http://www.cnblogs.com/xuyubing/archive/2013/10/01/3348344.html 前言 很久很久以前,还是我在学校的时候,我就看了传智里面视频, ...

  9. Asp.Net页面生命周期【转载,地址:http://www.cnblogs.com/xhwy/archive/2012/05/20/2510178.html】

    一.什么是Asp.Net页面生命周期 当我们在浏览器地址栏中输入网址,回车查看页面时,这时会向服务器端(IIS)发送一个request请求,服务器就会判断发送过来的请求页面,  完全识别 HTTP 页 ...

  10. Asp.net页面生命周期详解任我行(3)-服务器处理请求详细过程

    前言 百度了一下才知道,传智的邹老师桃李满天下呀,我也是邹老师的粉丝,最开始学习页面生命周期的时候也是看了邹老师的视频. 本人是参考了以下前辈的作品,本文中也参合了本人心得,绝非有意盗版,旨在传播,最 ...

随机推荐

  1. GUN/GPL 中文译文

    版权所有 (C) 1989,1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307U ...

  2. Mealy和moore型状态机

    Moore型状态机:下一状态只由当前状态决定,即次态=f(现状,输入),输出=f(现状): Mealy型状态机:下一状态不但与当前状态有关,还与当前输入值有关,即次态=f(现状,输入),输出=f(现状 ...

  3. iPhone 崩溃日志解析

    方法一.在编译时保留xx.app, xx.app.dSYM在/user目录下,xcode->orgernize->Device Logs就能够自动部分定位地址 方法二.xcode 有自带的 ...

  4. Java笔记(五)……运算符

    算术运算符 算术运算符的注意问题: 如果对负数取模,可以把模数负号忽略不记,如:5%-2=1.但被模数是负数就另当别论. 对于除号"/",它的整数除和小数除是有区别的:整数之间做除 ...

  5. CSS書寫規範及CSS Hack

    基本原则: CSS样式可细分为3类:自定义样式.重新定义HTML样式.链接状态样式. 样式为设计师自定义的新 CSS 样式,影响被使用本样式的区域,用于完成网页中局部的样式设定. 样式名 “.”+“相 ...

  6. office文件密码破解方法及软件

    今天会用到3个软件 1.Office Password Remover 说明:这个软件可以很快破解.doc   .xls的密码 使用方法:参考百度经验里面的文章http://jingyan.baidu ...

  7. Linux下安装mysql5.6.11(找点有用的信息太费劲)(转)

    Linux下安装mysql5.6.11(找点有用的信息太费劲) (2013-04-25 10:25:09)     1.申请阿里云Linux服务器 昨天在阿里云申请了一个免费试用5天的Linux云服务 ...

  8. Storm系列(四)Topology提交校验过程

    功能:提交一个新的Topology,并为Topology创建storm-id(topology-id),校验其结构,设置必要的元数据,最后为Topology分配任务. 实现源码: 1  ); Conf ...

  9. 【Java基础】成员变量和局部变量的区别

    在类中的位置不同 成员变量:在类内部方法外部 局部变量:在方法体内部定义的或者方法的参数中定义的在内存中的位置不同 成员变量:在堆内存,有初始化值,byte,short,int,long->0, ...

  10. HW3.4

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...