1.WebForm前台页面 文件 在被访问时 会被编译成类。前台类继承于后台类。
2.被访问时,服务器会创建前台页面类对象来作为处理请求的对象。
3.前台类对象是如何结合后台类的方法生成整个页面的HTML代码的呢?
被请求时,页面控件对象的生成。控件树负责组织整个页面的内容。(_BuildControITree()--生成控件树)
前台页面类->后台页面类->Page->TemplateControl->Control(包含ControlCollection集合对象)
4.浏览器请求页面logout.aspx时,服务器通过反射创建了响应页面的对象来处理,这个类是什么(前台类)?又是调用这个对象的什么方法来处理请求的?---ProcessRequest()
5.关键问题:服务器调用页面类对象的什么东西来生成html代码呢?--创建控件树,执行页面生命周期,然后调用页面类对象的
Render方法来循环遍历控件树,并分别调用每个控件相应的Render方法来产生每个控件对象的html代码,最后组成整个页面的html代码。
6.总体描述:
---------------------------------------------------------------------------------------------------------------------------
1.浏览器和服务器的交互是通过Socket
2.浏览器和服务器交互的语法:http协议
3.浏览器要和服务器交互的目的:获取服务器资源(html,图片,js,css)
4.服务器要做的事情就是想尽办法,满足浏览器的需求。所以一旦浏览器请求的是动态页面的时候,服务器就要创建页面类的对象并执行
里面的方法,最后将生成的html代码返回浏览器。
---------------------------------------------------------------------------------------------------------------------------
7.前台的空间怎么在被后台拿到呢?:前台页面继承自后台页面,在创建的时候,因为前台类继承于后台类所以先创建后台页面类,带<%里的内容编译的时候都放到后台页面类里去了,runat="server"实际上是将控件变成服务器控件了,在编译的时候也放到后台页面类中去了。
---------------------------------------------------------------------------------------------------------------------------
8.浏览器服务器交互详解:->>>首先是(client)端向服务器发起请求通过socket建立通道,如果服务器发现是自己可以处理的静态页面,那么服务器就会找到相应的html页面,就直接返回客户端需要的html代码,如果发现是自己解决不了的动态页面,服务器就会找到自己和.NETFramework之间互相通信的API(可扩展程序):
8.1:API又将请求网站程序,网站程序调用HttpRuntime类的静态方法处理请求,接下来HttpRuntime将分析client端发送过来的请求报文,将请求报文封装到一个叫做HttpWorkerRequest类对象中。
8.2:创建HttpContext对象,在这里就需要使用到HttpWorkerRequest了,其中HttpContext中主要包括了HttpRequest(ps:其中包含了客户端所有的请求信息:Form,QueryString...)和HttpResponse(ps:主要包含了TextWrite对象用来保存要向客户端输出的信息)
8.3:通过HttpApplicationFactory(HttpApplication工厂)先检查有没有现成的HttpApplication,如果有,直接拿过来用,没有则创建一个新的来使用,因为HttpRuntime不能处理那么多请求所以每一个请求就创一个HttpApplication对象来处理。
接下HttpApplication对象调用ProcessRequest(HttpContext context)执行其中的19个委托对象(也叫做执行请求管道),在第八个事件时通过反射的方式创建被请求的页面类对象,并转成IHttpHandler借口(ps:转成接口为了统一调用,让服务器识别,不然服务器不知道如何调用),
接下来在第十一个事件和第十二事件之间,执行页面类对象里面的ProcessRequest方法,其实ProcessRequest调用的父类的ProcessRequest方法,在父类的方法中,父类调用了父类的FramworkInitalize()方法,但因为页面类重写了此方法,所以执行的就是当前页面类的FramworkInitalize(),在这个方法中就包含创建控件树的方法_buildControTree()方法,最后在调用ProcessRequestMain方法,在此方法中完成整个页面生命周期(ps:在执行页面前一部分时,先执行后台代码对控件树进行修改,然后调用Render方法遍历控件树,然后每个控件再调用本身的Render方法遍历子节点,最后执行生命周期最后一部分,再通过HttpApplication对象返回到服务器,再由服务器返回Client端).
---------------------------------------------------------------------------------------------------------------------------
程序集(exe.dll):就是一个项目中的代码都编译到一个文件里。
表现层(服务员)--业务层(厨师)--数据层(采购员)
添加引用:
表现层(UI)添加业务层(BLL)引用。
业务层(BLL)添加数据层(DAL)引用。
UI,BLL,DAL都要添加实体层(MODEL)。 |