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本质论之三(应用程序对象 )的更多相关文章

  1. ASP.NET本质论第二章应用程序对象学习笔记1

    1.请求的处理参数—上下文对象HttpContext 1) 针对每一次请求,ASP.NET将创建一个处理这次请求所使用的HttpContext对象实例,这个对象实例将用来在ASP.NET服务器的处理过 ...

  2. Application 应用程序对象使用介绍

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DemoApplicatio ...

  3. .NET本质论(4)应用程序对象HttpApplication

    当HttpContext对象创建之后,HttpRuntime将随后创建一个用于处理请求的对象,这个对象的类型为HttpApplication.  在ASP.NET内部,HttpRuntime管理一个定 ...

  4. Ninject之旅之三:Ninject对象生命周期

    摘要 DI容器的一个责任是管理他创建的对象的生命周期.他应该决定什么时候创建一个给定类型的对象,什么时候使用已经存在的对象.他还需要在对象不需要的时候处理对象.Ninject在不同的情况下管理对象的生 ...

  5. 【object-c基础】Object-c基础之三:面对对象开发@interface,@implementation

    1.@interface 在java等语言编程中,创建类都是用class,但在object-c中,用@interface. 例子: @interface circle :NSObject    //定 ...

  6. python小练习之三---购物车程序

    购物车购物的例子 严格来讲,这个例子相对大一些 功能也稍完备一些,具有用户登录,商品上架,用户购物,放入购物车,展示每个用户的购物车里的商品的数量,用户账户余额,支持用户账户充值等 下面展示的代码有些 ...

  7. 【美妙的Python之三】Python 对象解析

    美妙的Python之Python对象         简而言之: Python 是能你无限惊喜的语言.与众不同.         Python对象概念的理解,是理解Python数据存储的前提.Pyth ...

  8. 微信小程序 - 对象转换成对象数组

    后端传过来的一个个对象 {1,2,3,4},{1,3,5,},{1,3,5} 我们应该转化为数组对象 [{},{},{},{}]  ,最后通过wx:for遍历到页面 示例图:

  9. Java Socket实战之三:传输对象

    转自:https://i.cnblogs.com/EditPosts.aspx?opt=1 前面两篇文章介绍了怎样建立Java Socket通信,这一篇说一下怎样使用Java Socket来传输对象. ...

随机推荐

  1. 【转】 远程到服务器安装visualSVN server,出现Service 'VisualSVN Server' failed to start的解决方法

    在帮助远程到服务器上安装visualSVN server的时候,出现Service 'VisualSVN Server' failed to start. 解决方法(先不要关闭安装弹出的错误窗口): ...

  2. Maven exclusion

    <dependency><exclusions> <exclusion> <groupId>xx</group> <artifactI ...

  3. python中urllib, urllib2,urllib3, httplib,httplib2, request的区别

    permike原文python中urllib, urllib2,urllib3, httplib,httplib2, request的区别 若只使用python3.X, 下面可以不看了, 记住有个ur ...

  4. 【JavaScript】微信适配的Head

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <me ...

  5. html5 基本内容 摘自W3C

    HTML5 教程(摘录自 W3C School) HTML 5 简介(HTML5 是下一代的 HTML) 什么是 HTML5? HTML5 将成为 HTML.XHTML 以及 HTML DOM 的新标 ...

  6. Python开发专业工具推荐

    PyCharm,jetbrains公司出品,必是精品!! 版本:2016.3.1 下载:https://www.jetbrains.com/pycharm/download/#section=wind ...

  7. Google是如何做代码审查的?

    Google是一个非常优秀的公司.他们做出了很多令人称赞的东西—既是公司外部,人们可以看到的东西,也是公司内部.有一些在公司内部并不属于保密的事情,在外部并没有给予足够广泛的讨论.这就是我今天要说的. ...

  8. Delphi 线程的处理

    http://www.cnblogs.com/doit8791/archive/2012/05/16/2502671.html

  9. Asp.net把UTF-8编码转换为GB2312编码

    系统采用的UTF-8编码,而一些支持系统使用的是GB2312编码. 不同编码的页面.脚本之间互相引用,就会产生乱码的问题,解决方法就是统一成一种编码.asp.net 中,如果要修改输出页面的编码,可以 ...

  10. 转载cocos2dx的各种动作用法

    以下内容来源于:http://www.cnblogs.com/linux-ios/archive/2013/04/06/3001946.html 转载时请保留以上链接. bool HelloWorld ...