.NET本质论之三(应用程序对象 )
2.1 请求的处理参数------上下文对象HttpContext 现在,请求已经到达了ASP.NET服务器,为了处理请求,ASP.NET在服务器上创建了HttpRequest类型的对象以表示请求参数,HttpResponse类型的对象以表示回应的处理对象。别处,还有HttpServerUtility类型的对象处理网站虚拟路径与服务器文件系统路径之间的映射关系。也就是说,为了处理一次Http请求,我们需要众多的对象来表示处理请求所需要的数据,处理请求的方法就需要接收诸多的参数来完成处理工作,为了进一步简化服务器端对参数的处理工作,ASP.NET中定义了HttpContext类型来统一处理参数的表示问题。
2.1.1常用成员 针对每一次请求,ASP.NET将创建一个处理这次请求所使用的HttpContext对象实例,这个对象实例将用来在ASP.NET服务器的处理过程 中传递所有需要的参数,在请求到达ASP.NET服务器之后,这个对象将被创建出来,在一次请求处理之后,这个对象将被丢弃掉。由于在大多数的处理环节都需要用到这个对象,因此,HttpContext类中还提供了一个名为Current的静态属性,以便于在处理过程中,不需要通过方法的参数面直接取得当前的上下文对象。当然,在没有请求的情况下,通过这个属性获得的结果将是null. HttpContext中的常用属性如下:
类型 属性名称 说明
HttpRequest Request 请求参数对象 HttpResponse Response 回应处理对象 HttpServerUtiliity Server 服务器实用工具 IDictionary Items 在服务器处理请求的过程中,通过httpContext传递的参数字典 IPrincipal User 当前请求的用户对象 IHttpHandler Handler 处理当前请求的处理程序对象 Cache Cache Web服务器的缓存管理对象 HttpApplicationState Application Web服务器的全局状态管理对象 HttpSessionState Session 当前请求的会话状态对象 ProfileBase Profile 当前请求的个性化数据对象 DateTime Timestamp 当前请求开始处理的时间点
Timestamp 表示请求在服务器上的开始处理时间,当我们需要计算当前请求的处理时间的时候,结合DateTime.Now,可以非常方便地计算出来
2.1.2底层方法 虽然使用HttpContext所提供方法的机会并不多,但是,HttpContext提供了一些底层的方法,在编写HttpModule的时候非常有用。 表2.2 底层方法 返回类型 方法名称 说明 void RewritePath 将服务器收到的请求URL替换为另外一个指定的URL Object GetSection 获取配置文件中的配置节 void RemapHandler 重新设置当前的处理程序
RewritePath方法用于将HttpRequest中的原始请求地址替换为指定的地址,以便在后台 的处理中,使asp.net认为请求的实际地址是这个新的地址,这个方法在使用无Cookie的会话中非常有用,使用它将嵌入在URL中的SessionID取出来,将URL地址修正为一个普通的URL,这样,后继的处理就不会受到影响,别处,在 URL重写中,这个方法也很有用,可以将一个看似静态地址的URL映射到一个普通的ASP.NET处理上。 2.2应用程序对象HttpApplication 当HttpContext对象创建之后,HttpRuntime将随后创建一个用于处理请求的对象,这个对象的类型为HttpApplication. 在ASP.NET内部,HttpRuntime管理一个定义在System.Web命名空间下的HttpApplicationFactory类的实例,HttpApplicationFactory通过工厂模式管理HttpApplication对象,在HttpApplicationFactory内部维护了一个HttpApplication对象池,使得被创建的HttpApplication对象可以被重复使用。但是,每一个HttpApplication对象每一次仅仅用于处理一个请求,这样,对于ASP.NET程序员来说,也就不需要考虑HttpApplication中多个请求并发的处理问题了。 在实际的请求处理过程中,我们还需要进行大量的工作,例如,检查当前的请求是由哪一个用户发起的,以此我们就可以针对不同的用户进行不同的处理;或者根据用户来决定是否对用户的请求进行处理,对于没有权限的用户返回一个缺少相应权限的回应等。如果我们在一个方法中来完成这些任务,显然会造成方法的过度 臃肿。在HttpApplication中利用.NET中的事件机制,通过在处理过程中依次发出的多个事件,将这个处理过程分解为多个步骤,这个处理机制通常我们称为处理管道。 2.2.1 处理管道 所谓的处理管道,就是处理复杂问题的时候,将处理的过程分解为多个处理步骤,我们将这种经过多个步骤的处理方式称为处理管道。在.NET中,借助于事件的强大威力,我们可以通过处理管道将复杂的处理步骤封装起来,通过事件将处理过程的多个步骤暴露给程序员,以便于程序员对管理管道进行扩展。
.NET本质论之三(应用程序对象 )的更多相关文章
- ASP.NET本质论第二章应用程序对象学习笔记1
1.请求的处理参数—上下文对象HttpContext 1) 针对每一次请求,ASP.NET将创建一个处理这次请求所使用的HttpContext对象实例,这个对象实例将用来在ASP.NET服务器的处理过 ...
- Application 应用程序对象使用介绍
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DemoApplicatio ...
- .NET本质论(4)应用程序对象HttpApplication
当HttpContext对象创建之后,HttpRuntime将随后创建一个用于处理请求的对象,这个对象的类型为HttpApplication. 在ASP.NET内部,HttpRuntime管理一个定 ...
- Ninject之旅之三:Ninject对象生命周期
摘要 DI容器的一个责任是管理他创建的对象的生命周期.他应该决定什么时候创建一个给定类型的对象,什么时候使用已经存在的对象.他还需要在对象不需要的时候处理对象.Ninject在不同的情况下管理对象的生 ...
- 【object-c基础】Object-c基础之三:面对对象开发@interface,@implementation
1.@interface 在java等语言编程中,创建类都是用class,但在object-c中,用@interface. 例子: @interface circle :NSObject //定 ...
- python小练习之三---购物车程序
购物车购物的例子 严格来讲,这个例子相对大一些 功能也稍完备一些,具有用户登录,商品上架,用户购物,放入购物车,展示每个用户的购物车里的商品的数量,用户账户余额,支持用户账户充值等 下面展示的代码有些 ...
- 【美妙的Python之三】Python 对象解析
美妙的Python之Python对象 简而言之: Python 是能你无限惊喜的语言.与众不同. Python对象概念的理解,是理解Python数据存储的前提.Pyth ...
- 微信小程序 - 对象转换成对象数组
后端传过来的一个个对象 {1,2,3,4},{1,3,5,},{1,3,5} 我们应该转化为数组对象 [{},{},{},{}] ,最后通过wx:for遍历到页面 示例图:
- Java Socket实战之三:传输对象
转自:https://i.cnblogs.com/EditPosts.aspx?opt=1 前面两篇文章介绍了怎样建立Java Socket通信,这一篇说一下怎样使用Java Socket来传输对象. ...
随机推荐
- 黄聪:WordPress根目录(Root)
index.php:WordPress核心索引文件,即博客输出文件. license.txt:WordPress GPL许可证文件. my-hacks.php:定义了博客输出之前处理的追加程序.默认安 ...
- C#学习笔记二: C#类型详解
前言 这次分享的主要内容有五个, 分别是值类型和引用类型, 装箱与拆箱,常量与变量,运算符重载,static字段和static构造函数. 后期的分享会针对于C#2.0 3.0 4.0 等新特性进行. ...
- POJ 2411 Mondriaan'sDream(状压DP)
题目大意:一个矩阵,只能放1*2的木块,问将这个矩阵完全覆盖的不同放法有多少种. 解析:如果是横着的就定义11,如果竖着的定义为竖着的01,这样按行dp只需要考虑两件事儿,当前行&上一行,是不 ...
- NeHe OpenGL教程 第四十二课:多重视口
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- MHI ,运动历史图像的的获取[下载自CSDN]
#include "cv.h" #include "highgui.h" #include "stdlib.h" #include &quo ...
- jquery.form.js详细讲解
现在大家在在表单提交的时候都不流行中间页面做跳转(比如发布成功的提示页面),或者说这样做会降低用户体验.所以一般都是采用ajax来提交,能看到这个页面的朋友,想必对ajax提交表单已经是很熟悉了. 如 ...
- MySQL 开启与关闭远程访问&&授权前需执行GRANT USAGE ON *.* TO 'cai'@'%' IDENTIFIED BY 'caigan2015';才能终端访问
MySQL 开启与关闭远程访问 (1)通过MySQL用户去限制访问 权限系统目的: MySQL基于安全考虑root账户一般只能本地访问,但是在开发过程中可能需要打开root的远程访问权限,今天介绍的就 ...
- Servlet3.0学习总结(二)——使用注解标注过滤器(Filter)
Servlet3.0提供@WebFilter注解将一个实现了javax.servlet.Filter接口的类定义为过滤器,这样我们在web应用中使用过滤器时,也不再需要在web.xml文件中配置过滤器 ...
- git 空提交和重置提交者(转载)
From:http://www.xiukun.me/git%E4%BD%BF%E7%94%A8-allow-empty-%E8%BF%9B%E8%A1%8C%E7%A9%BA%E7%99%BD%E6% ...
- Getting started with SciPy for .NET
Getting started with SciPy for .NET 1.) IronPython Download and install IronPython 2.7, this will re ...