第二章--应用程序对象

上下文对象HttpContext
  为了进一步简化服务器端对参数的处理工作,ASP.NET中定义了HttpContext类型来统一处理参数的表示问题
  底层方法:
    RewritePath 将服务器收到的请求URL替换为另一个指定的URL (可以做地址的映射)
    GetSection 获取配置文件中的配置节
    RemapHandler 重新设置当前的处理程序
应用程序对象 HttpApplication
  当HttpContext对象创建之后,HttpRuntime将随后创建一个用于处理请求的对象,这个对象的类型为HttpApplication
    HttpRuntime通过HttpApplictionFactory维护一个HttpApplication对象池,使得对象可以重复利用,但每个对象每次仅仅用于处理一个请求
    在HttpApplication中,利用.NET的事件机制,通过在处理过程中依次触发的多个事件,将这个处理过程分解为多个步骤,这个处理机制通常我们称为处理管道
管道
  就是处理复杂问题的时候,将处理的过程分解为多个处理步骤,我们将这种经过多个步骤的处理方式称为处理管道
  自定义处理管道:
    继承自System.ComponentModel.Component
      有一个Events集合管理

简单的例子:

  class Handler:Component
    {
        private static readonly object startEvent = new object();
        private static readonly object stopEvent = new object();

        public event EventHandler StartProcess
        {
            add { this.Events.AddHandler(startEvent, value); }
            remove { this.Events.RemoveHandler(startEvent, value); }
        }
        public event EventHandler StopProcess
        {
            add { this.Events.AddHandler(stopEvent, value); }
            remove { this.Events.RemoveHandler(stopEvent, value); }
        }
        protected void OnStartProcess(EventArgs e)
        {
            if (this.Events[startEvent]!=null)
            {
                ((EventHandler)this.Events[startEvent])(this, e);
            }
        }
        protected void OnStopProcess(EventArgs e)
        {
            if (this.Events[stopEvent] != null)
            {
                ((EventHandler)this.Events[stopEvent])(this, e);
            }
        }
         public void Process()
        {
            OnStartProcess(EventArgs.Empty);
            OnStopProcess(EventArgs.Empty);
        }
    }
        static void Main(string[] args)
        {
            Handler h = new Handler();
            h.StartProcess += h_StartProcess;
            h.StopProcess += h_StopProcess;
            h.Process();
            Console.Read();
        }

        static void h_StopProcess(object sender, EventArgs e)
        {
            Console.WriteLine("停止处理......");
        }
        static void h_StartProcess(object sender, EventArgs e)
        {
            Console.WriteLine("开始处理.....");
        }
    }

HttpApplication 的处理管道
  基本的步骤是这样
    BeginRequest 处理的开始
    验证身份
    授权
    是否有缓冲
      如果有就直接跳到最后
      否则获取处理这个请求的Handler
    得到处理程序后,还不能马上执行,因为还有可能有客户上次的遗留数据,需要加载
      PreRequestHandlerExecute 表示马上就要执行这个处理程序了
    执行完处理程序后,释放掉之前用到的数据,如果还需要将这次处理的结果缓存起来,以便
    在后续的请求中可以直接使用这个结果,UpdateRequestCache事件提供了处理的机会
    EndRequest 请求结束
HttpContext 状态管理
  因为HttpContext贯穿整个HttpApplication的处理过程中,所有可以使用Items属性来传递数据
处理HttpApplication的事件
  注册HttpApplication对象的事件处理
    1.IHttpModule
    2.global.asax
  在global.asax中可以注册一些通过特殊的命名规则定义的方法
    1.Application_HttpModule中的方法
    2.满足System.EventHandler
    3.必须为public
文件上传问题
  可以设置文件的最大长度(KB)默认是保存在内存中的....
    <httpRuntime maxRequestLength=" "/>
    如果是大文件的话,可以使用requestLengthDiskThreshold属性设置条件

时间: 2024-11-05 02:24:06

第二章--应用程序对象的相关文章

JAVA 入门第二章 (面对对象)

本渣渣鸽了一个月终于有时间更新.因为有c++基础,学起来这章还是比较简单的,本章我觉得是程序猿质变课程,理解面向对象的思想,掌握面向对象的基本原则以及 Java 面向对象编程基本实现原理,熟练使用封装.继承.多态面向对象三大特性,感受和c++之间的异同,下面是学习路线. 1.类和对象  1-1 什么是类和对象 1-2 如何定义 Java 中的类 1-3 如何使用 Java 中的对象 1-4 Java 中的成员变量和局部变量 1-5 Java 中的构造方法 1-6 Java 中的 static 使

第二章--Win32程序运行原理 (部分概念及代码讲解)

学习<Windows程序设计>记录 概念贴士: 1. 每个进程都有赋予它自己的私有地址空间.当进程内的线程运行时,该线程仅仅能够访问属于它的进程的内存,而属于其他进程的内存被屏蔽了起来,不能被该线程访问. PS:进程A在其地址空间的0x12345678地址处能够有一个数据结构,而进程B能够在其地址空间的0x12345678处存储一个完全不同的数据.彼此不能访问. 2. 在大多数系统中,Windows将地址空间的一半(4GB的前一半,0x00000000-0x7FFFFFFF)留给进程作为私有存

第二章:程序的基本结构

flask中的helloworld: 1 from flask import Flask 2 3 app = Flask(__name__) 4 5 @app.route('/') 6 def index_1(): 7 return 'hello world' 8 9 @app.route('/<name>') 10 def index_2(name): 11 return 'hello {}'.format(name) 12 13 if __name__ == '__main__': 14

Thinking in Java(第四版)—— 第二章 一切皆对象

一.对象保存的位置 寄存器(cpu) 栈(变量) 堆(对象) 静态域(static) 常量池(string) 非内存区池 二.基本数据类型 整数型 byte short int long 8 16 32 64 浮点型 float double 32 64 字符型 char 16 Unicode 布尔型 boolean 1 三.static 属于类调用不属于对象(一般工具类中用的多)

第二章 便利的对象

像数组.散列(就是哈希)这样保存对象的对象,我们称为容器. 索引:我们最常见的数组下标就是索引. (1) (2) (3) (4) (5)正则表达式 /模式/=~希望匹配的字符串 nil是什么? nil表示对象不存在,就像在正则表达式中表示无法匹配成功一样,方法不能返回有意义的值时就会返回nil.从数组或散列中获取对象时若指定的索引或者键不存在也是返回nil.

第二章:一切皆对象。(一)

2.1.用引用操作对象. 1.一个形象的比喻:在java中,一切皆对象.但是操纵的标示符实际上是对象的一个“引用”(reference).可以想象成一个遥控器(引用)操纵电视机(对象). 想要换频道或者调整音量,实际操纵的是遥控器(引用),再由遥控器来操纵电视机(对象). 2.有5个不同的地方可以存储数据: 1.寄存器:这是最快的存储区.它位于处理器内部.寄存器的数量极其有限.根据需求进行分配,不能直接控制. 2.堆栈:位于通用RAM(随即访问存储器)中,堆栈指针若向下移动,则分配新的内存:若向

Effective java 第二章创建和销毁对象 读书笔记

建和销毁对象 一般有两种方式,一种是获得本身的实例,最常用的方法就是提供一个共有的构造器.第二个方法是,类可以提供一个共有的静态工厂方法. 静态工厂方法与构造器不同的三大优势: 有名字: 调用时不用创建新的对象: 返回原来类型的任何子类型对象. 第四大优势: 在创建参数化类型实例的时候,它们使代码变得更加简洁. 服务提供者框架 三个组件: 服务接口 提供者主持API 服务访问API 可选: 服务提供者接口 静态工厂方法的缺点: 类如果不含共有的或者受保护的构造器,就不能被子类化: 它们与其他的静

Prism 文档 第二章 初始化Prism应用程序

                                                                       第二章 初始化Prism应用程序 本章将讨论为了使一个Prism应用程序的启动和运行哪些是必须的.Prism的应用程序在启动过程中需要注册和配置,这被称为引导应用程序. 什么是Bootstrapper? bootstrapper是一个类,通过Prism类库负责一个应用程序建立的初始化.通过使用bootstrapper,对于如何将Prism库组件连接到您的应

Thinking In Java笔记(第二章 一切都是对象)

第二章 一切都是对象 2.1 用引用操纵对象 每种语言都具有操纵内存中元素的方式,必须注意将要处理的是什么数据类型,是直接操纵元素还是基于某种特殊语法间接表示(例如C和C++里的指针)来操纵对象. java中一切都被视为对象,可以用单一固定的语法,但程序员所操纵的标识符实际上只是对象的一个"引用",引用可以独立于对象存在,也可以和实际的对象相关联.例如: String s1; String s2 = new String("hello world"); 上面的s1即