欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ASP.NET页面请求处理介绍

程序员文章站 2024-03-05 10:05:06
httpruntime类 页面请求先给可以处理原始http请求的对象处理,最后在管线的终端生成要发给浏览器的标记。httpruntime类是改管道的入口点。对每一个请求,...

httpruntime类


页面请求先给可以处理原始http请求的对象处理,最后在管线的终端生成要发给浏览器的标记。httpruntime类是改管道的入口点。
对每一个请求,asp.net会创建httpruntime对象,并调用processrequest来激活该http管道。httpruntime对象会在创建时对许多辅助处理页面请求的内部对象进行初始化。processrequest方法被调用后,会创建httpcontext类实例,他封装了所有的http提有的信息,我们一般在代码中使用就是这个httpcontext对象,他就是由httpruntime对象创建的。httpruntime对象使用请求信息锁定能够处理请求的web应用程序对象。通过url中的虚拟路径,便可以定位web应用程序,但是真正锁定能处理请求的web应用程序的对象是httpapplicationfactory。会返回能处理请求的有效对象。httpruntime对象会先生成httpcontext对象,然后把httpcontext对象传给httpapplicationfactory对象,委托她确定能处理请求的应用程序。在应用程序的生命周期中,httpapplicationfactory对象维护着很多httpapplication对象,该对象用于处理请求。当程序工厂对象被调用后,它会验证请求的目标虚拟文件夹是否存在,如果应用程序已运行,改工厂则从可用的对象池中取一个httpapplication对象,然后把请求对象委托给它,如果没有就创建它。如果虚拟目录不曾被调用,则在新的appdomain中创建一个httpapplication对象,这样,如果应用程序文件global.asax存在,httpapplication对象就需要对它进行编译,该过程相当于启动应用程序。httpapplication对象用于处理页面请求,每一次处理一个(多个对象用于处理并发请求)。

httpapplication类


httpapplication是一个基类,代表着运行中的asp.net应用程序。
也可以是httpapplication的派生类代表着运行中asp.net应用程序。
如果global.asax存在,会创建动态生成的应用程序类的源代码,
如果global.asax可用,应用程序类会创建,否则会使用基类httpapplication。
httpapplication类或派生类的实例管理请求的整个生命周期,是有请求处理完毕后,该实例会被释放,才会可能处理其他的请求。
httpapplication维护着一系列http模块对象,这些对象可以请求的内容进行筛选,修改。在请求过程中,可能随时会调用已注册的模块。httpapplication对象能判断请求资源是什么类型(页面、控件等),然后使用通过处理程序工厂锁定可以处理请求的处理程序对象。处理程序工厂对象是实现ihttphandlerfactory接口的类实例,负责锁定可以处理请求的对象——http处理程序。一个asp.net页面是一个处理程序对象(实现了ihttphandler接口的类实例)。

页面工厂


httpapplication类会确定要处理的请求的对象模型,并委托该类型相关的处理程序工厂创建其新的实例。如果请求是一个页面请求,那会怎样?
一旦httpapplication对象掌管了请求,就必须选择一个合适的处理程序,对于面向页面的请求,对用的工厂名为:pagehandlerfactory。为找到合适的处理程序,httpapplication会读取配置文件<httphandlers>区段的信息,是包含一个主要的已注册处理程序。请求过来之后,页面处理工厂会创建请求页面的对象实例。页面对象继承于page类,该类实现了ihttphandler接口,页面对象会被返回应用程序工厂,随后会被回传给httpruntime对象,最后的步骤由asp.net运行库完成。asp.net运行库会调用ihttphandler的页面对象的processrequest方法,这会使页面执行用户定义的代码,并为浏览器返回html标记。

我在网站找了一张整个管道的流程图,比较贴近:


ASP.NET页面请求处理介绍