当服务器接收到一个浏览器发送过来的请求,会首先判断请求的类型
如果该类型是一个静态页面,服务器就会直接返回对应的的html代码;
如果该类型是一个自己处理不了的动态页面就会根据asp.net_aspi扩展程序,去映射表里找对应的处理处理程序;对应的处理程序就会交给FramWork;Fw会创建一个HttpRuntime的类,
httpRuntime的PR方法();会创建三个对象
1;HttpWorkRequest对象(将请求报文封装在里面)
2;HttpContext对象(上下文对象);里面封装了两个方法一个是从浏览器获取资源的方法HttpRequest方法和向浏览器发送资源的HttpResponse方法;
3;通过HttpApplicationbFactory方法创建一个HttpCpplication对象,负责处理请求;
然后;
HttpAppliation调用自己内部PR方法;执行十九个委托对象;
其中在第八个事件创建被请求的页面类对象,并转换成HttpHandle接口对象;
在第九个事件的时候,会首先尝试将页面类对象转换成IRequiresSessionState接口对象,如果转化不成功则不加载Session属性,如果转换成功则根据刘浏览器传过来的SessionId加载Session属性,并将它的值赋值给页面类对象的Session的属性;
在第十一事件的时候,会首先做判断,
如果是请求一般处理程序
执行一般处理程序的对象的PR方法; 生成响应报文封装到HttpContext上下文对象的HttpResponse方法中;上下文对象返回给HttpRuntime;HttpRuntime返回给FW,FW通过可扩展程序IPPI返回给服务器;服务器再返回给浏览器;
如果请求的是WenForm,
则会执行Page类的Pr方法,pr方法中调用了__BuilderControlTree方法,来帮我们打造控件树;(整合页面上的元素)(Controls);开始执行页面生命周期,Pr开始接连不断的调用十几个方法,我们我们学了三个;LoadState:加载ViewState,并对ViewState进行解析,反序列化,转为对象,并 添加到页面类对象的ViewState的属性里面
PageLoad;用户自己写的代码;自动绑定事件,把自己绑定到页面生命周期的的事件上
SaveState;
保存服务器端控件在PageLoad里发生改变的属性,保存在ViewState里面;
最后会调用页面对象的render的方法,它循环控件树 ,然后调用子控件的render方法,render方法会把每一个子控件转化为Html代码.生成整个页面html代码;生成响应报文封装到HttpContext上下文对象的HttpResponse中;上下文对象返回给HttpRuntime;HttpRuntime返回给FW,FW通过可扩展程序ASPI返回给服务器;服务器再返回给浏览器;
转载于:https://www.cnblogs.com/12-12/archive/2013/03/29/asp_net.html