_第三章_asp.net 页面剖析

来源:互联网 发布:网络语言凸是什么意思 编辑:程序博客网 时间:2024/04/30 12:40

dp83.

 

解释管道.管道中有很多个步骤,就像一条流水线一样,中间有很多道工序.

 

页面请求会传递给管道中的每一个处理原始 HTTP 有效负载的对象,在该链路的终端生成要发给浏览器的标识代码(HTML).

而 HttpRuntime 就是这个管道的入口点.

 

1. 初始化

asp.net 的工作线程首先会创建一个 HttpRuntime 的实例,并调用其 ProcessRequest() 来激活该 HTTP 管道.

 

HttpRuntime 公开了三个静态的方法:

 ProcessRequest,Close,UnloadAppDomain.

其中只有 UnloadAppDomain 可以考虑手工调用,用来实现对应用程序的重启.其它两个不需要手工调用.也不应该手工调用.

       

有一个辅助处理页面请求的对象,如:缓存管理器,文件系统监视器.也是由 HttpRuntime 来进行初始化的.

 HttpRuntime 会创建新的上下文 HttpContext 的实例.并初始化一个特别的文本编写器(writer)对象.该对象用于存缓HTML标识代码.

 

2. HTTPRuntime 会查到用于处理该请求的 web 应用程序.查找或新建Web 应用程序的对象叫作: HttpApplicationFactory, 它是一个内部调用的对象,用于返回能够处理该请求的有效对象.

HttpApplicationFactory 维护着许多HttpApplication 对象.当被调用时它会验证请求的目标虚拟文件夹是否存在,如果应用程序已经运行,该工厂则从可用的对象池中获取一个 HttpApplication 对象,然后将它传给请求,否则请创建一个 HttpApplication 新实例.

 

         一个 虚拟文件夹是否对应一个 HttpApplication 对象?????

如果 global.asax 存在,则创建 HttpApplication 时,就需要对它进行编译,并创建代码实际被请求页面的程序集.该过程相当于重启应用程序,(那如果 global.asax 不存在呢?

HttpApplication 对象:

 如果 global.asax 文件存在,则根据它动态生成应用程序类的源代码,并命名为 ASP.global_asax ,否则则使用其基类:HttpApplication.

  一个 HttpApplication 对象负责一个请求的整个生命周期,只有该请求处理完毕,这个HttpApplication  对象才有可能被重用.

HttpApplication 对象维护着一系统的 HTTP 模块对象,这些对象可以对请求的内容进行筛选,甚至还可以进行修改.在请求穿越管道的过程中,可能随时会调用已注册的模块.

  HttpApplication 通过判断被请求资源的类型,(如:页面, web 服务, 用户控件).使用相应在的处理程序工厂获取被请求资源的对象.处理程序工厂是实现了 IHttpHandlerFactory 接口的类的实例,(如:PageHandlerFactory,WebServicehandlerFactory)

负责返回处理 HTTP 请求的托管对象---http处理程序.处理程序是实现了 IHttpHandler 接口的类的实例.

 页面工厂:(待续)

 

 

 

原创粉丝点击