下载 第1章ASP基础 Microsoft的动态服务器网页( Active Server Pages,ASP技术目前已发展到了30版。对很 多人来说,用ASP来创建 Windows服务器平台上的动态Web网页、整个站点和基于Web的应用 程序已经成为极其自然而然的方法。在浏览器地址栏中,文件扩展名asp同表示动态创建的网 页的文件扩展名pl或cegi一样,已被浏览者所接受。事实上,对于在微软的操作系统上工作的 Web程序员来说,ASP正在变成一种不再令人激动的技术,而仅是一种工作方式。 这种看法的改变体现了一种技术的逐步成熟。由于ASP的应用程序的数量日益增多, ASP的工具也在日益增加,同时有越来越多的第三方开发商开发出一系列基于ASP或使用 ASP的附加功能模块、 ActiveX服务器组件,甚至成套的“自己做(do- it-yoursel”web站点 工具。人们几乎不再关注微软公司最初使用的奇特的名字。现在ASP在行业内已经成为一个 公认的名词。 这是一本关于ASP成熟技术最新版本的书,其目的是期望读者在一定程度上熟悉ASP的组 成,了解ASP能够做什么及如何使用它。本书的目的不仅是使读者开始使用ASP,并且还要使 读者了解ASP新版本的变化和它能够做到而早期版本不能做到的事情 假如你想了解以前版本的ASP,可以阅读《 Beginning active server pages2.0》, 该书由 Brian francis、 John Kauffman、 Juan t Llibre、 David sussman和 Chris ullman 编写,Wrox出版社出版,书号为ISBN1861001347。 这并不意味着读者必须成为专家才能阅读本书,但希望读者已了解Web工作的基本方式 和脚本语言的相关知识,如Ⅴ SCript或 JavaScript 本书将更多地从研究和技术的角度讨论ASP,使读者对ASP如何工作有个更好的理解,有 助于读者编写的ASP代码达到更高的水平。ASP30核心可能没有很多本质上的改变,但有很 多令人激动的使用方法 本章将主要探讨: ·ASP的简介。 ASP与IS如何相互联系。 ·设置问题和管理 ·ASP3.0对象模型的概述 ·对象环境的概念 ASP30中的新内容 本章所采用方法的重要特点是:着重于用ASP页或应用程序的前后关系来研究ASP结构 而不是孤立地研究ASP对象。但是,最初将快速浏览ASP本身使读者能够理解基本概念。 1.1ASP的起源 本节先简单回顾一下ASP是如何产生的,以及ASP为什么能够在Web程序开发人员中流行
下载 第1章 ASP 基 础 M i c r o s o f t的动态服务器网页(Active Server Pages,A S P )技术目前已发展到了3 . 0版。对很 多人来说,用A S P来创建Wi n d o w s服务器平台上的动态 We b网页、整个站点和基于 We b的应用 程序已经成为极其自然而然的方法。在浏览器地址栏中,文件扩展名 . a s p同表示动态创建的网 页的文件扩展名. p l或. c g i一样,已被浏览者所接受。事实上,对于在微软的操作系统上工作的 We b程序员来说,A S P正在变成一种不再令人激动的技术,而仅是一种工作方式。 这种看法的改变体现了一种技术的逐步成熟。由于 A S P的应用程序的数量日益增多, A S P的工具也在日益增加,同时有越来越多的第三方开发商开发出一系列基于 A S P或使用 A S P的附加功能模块、 A c t i v e X服务器组件,甚至成套的“自己做 ( d o - i t - y o u r s e l f )”We b站点 工具。人们几乎不再关注微软公司最初使用的奇特的名字。现在 A S P在行业内已经成为一个 公认的名词。 这是一本关于A S P成熟技术最新版本的书,其目的是期望读者在一定程度上熟悉 A S P的组 成,了解A S P能够做什么及如何使用它。本书的目的不仅是使读者开始使用 A S P,并且还要使 读者了解A S P新版本的变化和它能够做到而早期版本不能做到的事情。 假如你想了解以前版本的 A S P,可以阅读《Beginning Active Server Pages 2.0》, 该书由Brian Francis、John Kauff m a n、Juan T Llibre、David Sussman和Chris Ullman 编写,Wr o x出版社出版,书号为ISBN 1861001347。 这并不意味着读者必须成为专家才能阅读本书,但希望读者已了解 We b工作的基本方式 和脚本语言的相关知识,如 V B S c r i p t或J a v a S c r i p t。 本书将更多地从研究和技术的角度讨论 A S P,使读者对A S P如何工作有个更好的理解,有 助于读者编写的A S P代码达到更高的水平。 ASP 3.0核心可能没有很多本质上的改变,但有很 多令人激动的使用方法。 本章将主要探讨: • ASP的简介。 • ASP与I I S如何相互联系。 • 设置问题和管理。 • ASP 3.0 对象模型的概述。 • 对象环境的概念。 • ASP 3.0中的新内容。 本章所采用方法的重要特点是:着重于用 A S P页或应用程序的前后关系来研究 A S P结构, 而不是孤立地研究A S P对象。但是,最初将快速浏览 A S P本身使读者能够理解基本概念。 1.1 ASP的起源 本节先简单回顾一下A S P是如何产生的,以及A S P为什么能够在We b程序开发人员中流行
2 ASP3高级编程 下载 首先从了解web的基础和动态web页面的发展开始。把ASP与其他许多能够提供这种动态化的 技术相比较,由此深入了解ASP的发展情况,同时了解Web应用程序的发展,而不仅限于了解 单纯的动态Web站点 11.1HTML的起源 万维网( World wide web,WWW)起源于设在瑞士的CERN实验室。 Tim berners-Lee及其 开发小组,花费大量的时间,研究建立了一种以一定格式传输信息的方法,这就是众所周知 的超文本传输协议(简称为HTTP)。该协议使用了超文本标记语言(HTML)。HTML设计简单 结构灵活,允许在Web浏览器及其他兼容的应用程序中显示文本及图像。文档的某些部分 以成为超链接,即当其被选择时,可以显示不同的页面或同一页面的不同部分。 标记语言是由特定字符分隔的基本元素,指定基本元素中所包含的文本或其他 条目如何显示。例如 This is some Emphasized text。HIML是一种广泛基 于标准通用标记语言( Standard Generalized Makeup Language,SGML)的标记语言 SGML是描述语言的一种方法,其本身并不是用来创建网页的语言 HTML语言从简单开始,不断增加一些附加的功能,直至形成了今天所用的HTML40版 本。这些新增的特性提供了更灵活的文本字体风格(例如元素),以及对输出页面布局 的更多控制(如窗体和帧的使用)。 早期的网页所缺乏的是动态的内容。刚一开始时,这还不是一个问题,因为HTML的开 发是为了在计算机、网络及操作系统之间显示和传送信息(特别是技术和科学信息)。这种标准 化的文档仅是一种简单的文本和标记,其中的图像和其他非文本的内容以单独文件形式存放, 它们可以在各种网络上自由传送。另外,由于信息的格式是固定的,其组成元素的含义也是 在HTML中定义好的。对于一个“阅读器”或浏览器应用程序,用任何程序语言在任何平台 或操作系统中相对来说是比较容易实现的。 只要建立这些信息网页,文本文件和图像可通过web服务器应用程序传送给用户,web服 务器应用程序简单地从磁盘中读取它们并且把输出转换成能够在网络中传送的正确HTTP协 议。在客户或用户端,浏览器接收传送到的信息流,并转换成为能够显示的页面。 HTML和HTTP除了具有跨平台特性之外,其最主要的长处就是其文档可以包含有关内容 的相关信息、作者意欲表达的方式等。它可以被应用程序阅读而不一定显示出来:例如盲人 可以使用特殊的程序把它转换成为语音。同样,其内容可以特殊方式显示出来,以便那些视 力差或有其他缺陷的人们更容易进行访问。因此,技术界经常用“用户代理”( user agent)这 通用术语代替“浏览器”( browser) 1.1.2动态页面的起源 对于新类型的文档内容,特别是那些设计成为允许在页面上输入信息的文档(例如HTML 中等的窗体控件),开发一种能够读取这种信息并加以利用的应用程序成为必然。很 明显,传递从其他应用程序中得到的内容,特别是特定类型的数据库的内容,需要一种新的 方法。每次都需要重写一个基于文本的页面,对于提供实时性很强的信息当然不是一个理想 的方法
首先从了解We b的基础和动态We b页面的发展开始。把 A S P与其他许多能够提供这种动态化的 技术相比较,由此深入了解 A S P的发展情况,同时了解We b应用程序的发展,而不仅限于了解 单纯的动态Web 站点。 1.1.1 HTML的起源 万维网( World Wide We b,W W W )起源于设在瑞士的C E R N实验室。Tim Berners-Lee及其 开发小组,花费大量的时间,研究建立了一种以一定格式传输信息的方法,这就是众所周知 的超文本传输协议 (简称为H T T P )。该协议使用了超文本标记语言 ( H T M L )。H T M L设计简单, 结构灵活,允许在 We b浏览器及其他兼容的应用程序中显示文本及图像。文档的某些部分可 以成为超链接,即当其被选择时,可以显示不同的页面或同一页面的不同部分。 标记语言是由特定字符分隔的基本元素,指定基本元素中所包含的文本或其他 条目如何显示。例如This is some Emphasized text。H T M L是一种广泛基 于标准通用标记语言 (Standard Generalized Makeup Language,S G M L )的标记语言。 S G M L是描述语言的一种方法,其本身并不是用来创建网页的语言。 H T M L语言从简单开始,不断增加一些附加的功能,直至形成了今天所用的 HTML 4.0版 本。这些新增的特性提供了更灵活的文本字体风格 (例如元素),以及对输出页面布局 的更多控制(如窗体和帧的使用)。 早期的网页所缺乏的是动态的内容。刚一开始时,这还不是一个问题,因为 H T M L的开 发是为了在计算机、网络及操作系统之间显示和传送信息 (特别是技术和科学信息)。这种标准 化的文档仅是一种简单的文本和标记,其中的图像和其他非文本的内容以单独文件形式存放, 它们可以在各种网络上自由传送。另外,由于信息的格式是固定的,其组成元素的含义也是 在H T M L中定义好的。对于一个“阅读器”或浏览器应用程序,用任何程序语言在任何平台 或操作系统中相对来说是比较容易实现的。 只要建立这些信息网页,文本文件和图像可通过 We b服务器应用程序传送给用户, We b服 务器应用程序简单地从磁盘中读取它们并且把输出转换成能够在网络中传送的正确 H T T P协 议。在客户或用户端,浏览器接收传送到的信息流,并转换成为能够显示的页面。 H T M L和H T T P除了具有跨平台特性之外,其最主要的长处就是其文档可以包含有关内容 的相关信息、作者意欲表达的方式等。它可以被应用程序阅读而不一定显示出来:例如盲人 可以使用特殊的程序把它转换成为语音。同样,其内容可以特殊方式显示出来,以便那些视 力差或有其他缺陷的人们更容易进行访问。因此,技术界经常用“用户代理” (user agent)这 一通用术语代替“浏览器” ( b r o w s e r )。 1.1.2 动态页面的起源 对于新类型的文档内容,特别是那些设计成为允许在页面上输入信息的文档 (例如H T M L 中等的窗体控件),开发一种能够读取这种信息并加以利用的应用程序成为必然。很 明显,传递从其他应用程序中得到的内容,特别是特定类型的数据库的内容,需要一种新的 方法。每次都需要重写一个基于文本的页面,对于提供实时性很强的信息当然不是一个理想 的方法。 2计计ASP 3 高级编程 下载
hinapub.com 第章ASP基础 3 载 对于web服务器来说,提供一个接口使其他应用程序能够与之相连成为一种常用的方法 过这个接口,定制的可执行程序能够接收来自客户端的信息,包括通过点击超链接或在浏 览器中键入统一资源定位符(URL)所提出的页面请求的细节。应用程序对客户端的请求能够生 成相应的响应,而不是从服务器磁盘上读取文本或标记文件。从这些早期方法开始,逐渐形 成一套完整的系列方法动态创建网页,以响应用户的请求或信息的变化 用于这些应用程序的接口仍然在使用,并被称为公共网关接口( Common Gate way Interface,CGI),这是一种可用任何语言(如C语言)实现的标准。它产生于那些使用cgi-bin目 录的应用程序(这里“bin”代表二进制代码,而不是文本)。早期的应用程序都是编译后的程 序,通常用C或C++编写。然而这自然要求懂得C语言的编程方法,并且每当对程序做很小的 文字上或标记上的变动,都必须重新编译、重新生成可执行文件,这就限制了CGI和动态页面 的使用。 取而代之的是开发了一种用脚本语言创建网页的方法,这种语言就是实用摘要和报告语 ( Practical Extraction and Reporting language),或简称为Perl,它允许信息的创建者以一种 非常类似于简化版C或C++的语言编写代码。在Perl脚本中,可以“写”文本和标记,用标准 输入( stdin)和标准输出( stdout)函数通过CGI与Web服务器通信,输出到浏览器。 Perl在Web上仍然是一种流行的语言,特别是在基于UNX或 Linux的系统上。然而这种语 言掌握起来不是很容易,特别是对于那些没有C或C++语言基础的Web开发人员更是如此。现 在,一些新的脚本语言出现了,使创建网页更加容易。我们主要看一下它们如何使开发人员 的工作变得更加容易 1.服务器端脚本技术 对于服务器端的脚本需要用某种类型的中间应用程序,或插件程序来连接。它必须能够 接受用户请求,读取并解释合适的基于服务器的脚本文件,接着创建输出页,并传送给web 服务器,在那里作为响应发送给客户端 在某些情况下,这个任务划分为两个部分: 个应用程序或插件程序处理与web服务器的往来通信(一般通过CGI)。 ·另一个处理解释和执行脚本。 这就是ASP中的情况,脚本引擎的使用与在其他环境下相同。 Perl是第一个流行的服务器端脚本语言,但是目前已经出现很多其他的语言。在UNIX及 基于 Linux的系统上,一种新的称之为PHP( Personal Home page)的语言正变得越来越流行。还 有一些语言的目标是一些特定类型的用户,例如TCL就是一种在科学环境下使复杂的数学运 算简单化的语言。 2.微软的动态页面创建技术 微软随 Windows nt3.51推出了他们的web服务器软件— Internet Information Server(IS) 0。这是一个提供了很多功能的相当标准的软件,它支持CGI。然而微软也提供了另外一个 接口,允许使用C和C艹+等编译语言生成可执行文件,使操作更加高效。这就是 Internet服务器 应用编程接囗( Internet Server Application Programming Interface, ISAPI)。它能够提供比传统 Perl引擎和其他技术所依赖的 stdin和 stdout更为广泛的对Web服务器的访问 此后微软和其他第三方开发商推出了许多能通过ISAP连接到IS的应用软件,这也就是为 什么ASP能够连接到IIS以及其他微软服务器端动态技术。在ASP以前,用得最广泛的是
对于We b服务器来说,提供一个接口使其他应用程序能够与之相连成为一种常用的方法。 通过这个接口,定制的可执行程序能够接收来自客户端的信息,包括通过点击超链接或在浏 览器中键入统一资源定位符 ( U R L )所提出的页面请求的细节。应用程序对客户端的请求能够生 成相应的响应,而不是从服务器磁盘上读取文本或标记文件。从这些早期方法开始,逐渐形 成一套完整的系列方法动态创建网页,以响应用户的请求或信息的变化。 用于这些应用程序的接口仍然在使用,并被称为公共网关接口 (Common Gateway I n t e r f a c e,C G I ),这是一种可用任何语言 (如C语言)实现的标准。它产生于那些使用 c g i - b i n目 录的应用程序 (这里“b i n”代表二进制代码,而不是文本 )。早期的应用程序都是编译后的程 序,通常用C或C + +编写。然而这自然要求懂得 C语言的编程方法,并且每当对程序做很小的 文字上或标记上的变动,都必须重新编译、重新生成可执行文件,这就限制了 C G I和动态页面 的使用。 取而代之的是开发了一种用脚本语言创建网页的方法,这种语言就是实用摘要和报告语 言(Practical Extraction and Reporting Language),或简称为P e r l,它允许信息的创建者以一种 非常类似于简化版 C或C + +的语言编写代码。在 P e r l脚本中,可以“写”文本和标记,用标准 输入( s t d i n )和标准输出( s t d o u t )函数通过C G I与We b服务器通信,输出到浏览器。 P e r l在We b上仍然是一种流行的语言,特别是在基于 UN I X或L i n u x的系统上。然而这种语 言掌握起来不是很容易,特别是对于那些没有 C或C + +语言基础的We b开发人员更是如此。现 在,一些新的脚本语言出现了,使创建网页更加容易。我们主要看一下它们如何使开发人员 的工作变得更加容易。 1. 服务器端脚本技术 对于服务器端的脚本需要用某种类型的中间应用程序,或插件程序来连接。它必须能够 接受用户请求,读取并解释合适的基于服务器的脚本文件,接着创建输出页,并传送给 We b 服务器,在那里作为响应发送给客户端。 在某些情况下,这个任务划分为两个部分: • 一个应用程序或插件程序处理与 We b服务器的往来通信(一般通过C G I )。 • 另一个处理解释和执行脚本。 这就是A S P中的情况,脚本引擎的使用与在其他环境下相同。 P e r l是第一个流行的服务器端脚本语言,但是目前已经出现很多其他的语言。在 UN I X及 基于L i n u x的系统上,一种新的称之为 PHP(Personal Home Page)的语言正变得越来越流行。还 有一些语言的目标是一些特定类型的用户,例如 T C L就是一种在科学环境下使复杂的数学运 算简单化的语言。 2. 微软的动态页面创建技术 微软随Windows NT 3.51推出了他们的We b服务器软件—Internet Information Server(IIS) 1 . 0。这是一个提供了很多功能的相当标准的软件,它支持 C G I。然而微软也提供了另外一个 接口,允许使用C和C + +等编译语言生成可执行文件,使操作更加高效。这就是 I n t e r n e t服务器 应用编程接口(Internet Server Application Programming Interface,I S A P I )。它能够提供比传统 P e r l引擎和其他技术所依赖的s t d i n和s t d o u t更为广泛的对We b服务器的访问。 此后微软和其他第三方开发商推出了许多能通过 I S A P I连接到I I S的应用软件,这也就是为 什么 A S P能够连接到 I I S以及其他微软服务器端动态技术。在 A S P以前,用得最广泛的是 第1章 ASP 基 础计计3 下载
ASP3高级编程 Chinaopub coM 下载 Internet数据库连接器( Internet Database Connector,IPC)。ASP为web开发者使用微软的平台 开辟了一个新的天地,这使采用数据库中的数据创建动态网页更加容易。特别是它引入了模 板( ( template),即包含了带有能够插入数据库查询结果的文本和标记的模板文件 现有的(或将过时的)其他微软服务器端页面创建技术有 db web和 OLEISAP。事实上 db web就是 OLEISAPI的实现,而对于多数人来说,迄今只是证实了这一技术在实际应用中的 不适应性。 OLEISAPI是通过特殊版本的 ISAPI接口与IS通信的一些COM对象。Web服务器软 件调用COM对象中单个指定函数并以参数为用户的请求提供细节。COM对象返回的是作为字 符串的页面的文本和标记,然后作为响应发送给客户端 OLEISAPI首创了COM对象的动态Web页面创建,为编程人员提供通过编译的 Active x DLL创建动态页面的能力。然而它所使用的特定的实现和数据通信技术对于较小的任务和内 部网( intranet)工作缺乏有效性和可扩展性。同时,每当改变页面的文本和标记时,也需要重 新编译动态链接库。图1-1给出了到目前为止所讨论的技术的相互关系 Web服务器 ISAPI OLEISAPI 链接库 喳询文件 定义 数据库 板文件 脚本引擎 数据库 图1-1主要页面创建技术的相互关系 3.动态Web页面创建方法的比较 比较动态页面创建技术是一个既困难又敏感的任务,然而理解各种接口和与之相关联的 应用程序的差异性又是很重要的。当创建与Web服务器交互的应用程序时,涉及到的两个主 要的问题是它们对Web服务器本身稳定性的影响,以及处理多发或并发页面请求的效率。这 两个问题是相互联系的,又是相互排斥的。 应用CGI和ISAP的编译的可执行应用程序(不是DLL文件),通常在服务器计算机上以进 程外(out-of- process)方式运行,这就意味它们要作为单独应用程序运行,占有单独的与Web服 务器应用程序不同的内存空间。操作系统将其作为一个单独的进程进行管理,禁止它们访问 本身所占内存以外的内存 因此,如果一个进程外应用程序失败,不会影响到Web服务器。同样,假如应用程序包 含错误,企图直接写入Web服务器的内存,会因一般性保护错误停止运行。进程外应用程序 也会因用户或操作系统的命令而中止,这时代码会从内存中自动卸载 因为运行进程外程序意味着访问Web服务器内存的请求被禁止,所要求的或产生的输出 结果值不能直接传送给Web服务器。所以必须执行一种跨进程调用,但这比在同一进程内访 问内存要多花费几倍的时间。对于可执行文件的装载和卸载时间还有一定的影响
I n t e r n e t数据库连接器(Internet Database Connector,I P C )。A S P为We b开发者使用微软的平台 开辟了一个新的天地,这使采用数据库中的数据创建动态网页更加容易。特别是它引入了模 板( t e m p l a t e ),即包含了带有能够插入数据库查询结果的文本和标记的模板文件。 现有的 (或将过时的 )其他微软服务器端页面创建技术有 d b We b和O L E I S A P I。事实上, d b We b就是O L E I S A P I的实现,而对于多数人来说,迄今只是证实了这一技术在实际应用中的 不适应性。O L E I S A P I是通过特殊版本的I S A P I接口与I I S通信的一些C O M对象。We b服务器软 件调用C O M对象中单个指定函数并以参数为用户的请求提供细节。 C O M对象返回的是作为字 符串的页面的文本和标记,然后作为响应发送给客户端。 O L E I S A P I首创了C O M对象的动态 We b页面创建,为编程人员提供通过编译的 Active X D L L创建动态页面的能力。然而它所使用的特定的实现和数据通信技术对于较小的任务和内 部网( i n t r a n e t )工作缺乏有效性和可扩展性。同时,每当改变页面的文本和标记时,也需要重 新编译动态链接库。图1 - 1给出了到目前为止所讨论的技术的相互关系。 图1-1 主要页面创建技术的相互关系 3. 动态We b页面创建方法的比较 比较动态页面创建技术是一个既困难又敏感的任务,然而理解各种接口和与之相关联的 应用程序的差异性又是很重要的。当创建与 We b服务器交互的应用程序时,涉及到的两个主 要的问题是它们对 We b服务器本身稳定性的影响,以及处理多发或并发页面请求的效率。这 两个问题是相互联系的,又是相互排斥的。 应用C G I和I S A P I的编译的可执行应用程序 (不是D L L文件),通常在服务器计算机上以进 程外( o u t - o f - p r o c e s s )方式运行,这就意味它们要作为单独应用程序运行,占有单独的与 We b服 务器应用程序不同的内存空间。操作系统将其作为一个单独的进程进行管理,禁止它们访问 本身所占内存以外的内存。 因此,如果一个进程外应用程序失败,不会影响到 We b服务器。同样,假如应用程序包 含错误,企图直接写入 We b服务器的内存,会因一般性保护错误停止运行。进程外应用程序 也会因用户或操作系统的命令而中止,这时代码会从内存中自动卸载。 因为运行进程外程序意味着访问 We b服务器内存的请求被禁止,所要求的或产生的输出 结果值不能直接传送给 We b服务器。所以必须执行一种跨进程调用,但这比在同一进程内访 问内存要多花费几倍的时间。对于可执行文件的装载和卸载时间还有一定的影响。 4计计ASP 3 高级编程 下载 Web服务器 CGI ISAPI OLEISAPI d b We b动态 链接库 A S P动态 链接库 I D C动态 链接库 编译的可执 行程序 P e r l 解释器 P e r l脚本 数据库 数据库 I D C 查询文件 I D C 模板文件 脚本引擎 A S P脚本 d b We b 定义
第章ASP基础 5 下载 相反,应用进程内(in- process)程序——通常是能够使用 ISAPI或 OLEAPI接口的DLL(不是 单独的可执行文件),因为其运行在web服务器的内存空间中 妾访问Web服务器内存 中的值,这可提供更快的访问和响应。然而其代码的错误或失败会影响到Web服务器。例如 DLL文件中的代码直接写入包含Web服务器操作代码的内存空间,可能引起web服务器的失败。 其关系如图1-2所示。 web服务器内存空间 独立内存空间 跨进程访问 变量 进程外可执行程序 Web服务器内存空间 直接访问 变量 进程内的 件或DDL 图1-2不同类型程序占用内存的情况 进程外应用程序实例是Per脚本解释器和使用 ISAPI接口的exe文件。进程内组件的实例 有 db Web、IDC以及ASP技术。然而,ASP和IS相互连接的方式还有许多种。因此,先把其他 相关技术放在一边,进一步研究ASP 1.2ASP如何与ⅢS连接 ASP本身包含了一个DLL文件,名字为 asp. dll,缺省安装在 Winnt\System32 C\inetsrv目录下 这个DLL文件负责得到一个ASP页面(由文件扩展名asp标识),然后对它进行分析,寻找服务 器端脚本内容。这个脚本传送给相应的脚本引擎,脚本的执行结果与ASP页中的HTML和模板 文本结合在一起。完整的页面会送到web服务器,从那里送往原先提出请求的客户端。 1.2.1关于应用程序的映射 为了更好地理解这个过程,需要研究一下 Windows2000中的应用程序映射的工作方式。 对于每一个在IS下设置好的web站点,服务器上都有一个根目录。安装IS时,缺省的Web站 点通常是 C: \Inet PublWWwRoot,除非在安装过程中改变了路径。对于这个目录以及其中的子 目录(这个我们稍后再讨论),有一组定义目录如何配合IS的属性 从 Start菜单中的 Administratiⅳ ve Tools打开 Internet Services Manger,将运行微软管理控制 台( Microsoft Management Console,MMC),显示IS的情况。 用鼠标右击 Default Web site,选择 Properties(属性),然后出现 Home Directory选项卡,如 图1-4所示 可以看到缺省的站点被设置成为一个虚拟的应用程序。在选项卡的下半部有 Application name、 Execute Permissions和 Application Protection选项。IS使用虚拟应用程序的方式来隔离 面集和所使用的组件的实例,以失败影响到防止Web服务器。正如早先所看到的,这是通 过在单独的内存空间中执行页面和进程外组件实现的。我们将在本章后面讨论这个问题
相反,应用进程内( i n - p r o c e s s )程序—通常是能够使用I S A P I或O L E A P I接口的D L L (不是 单独的可执行文件 ),因为其运行在 We b服务器的内存空间中,可以直接访问 We b服务器内存 中的值,这可提供更快的访问和响应。然而其代码的错误或失败会影响到 We b服务器。例如 D L L文件中的代码直接写入包含 We b服务器操作代码的内存空间,可能引起We b服务器的失败。 其关系如图1 - 2所示。 图1-2 不同类型程序占用内存的情况 进程外应用程序实例是 P e r l脚本解释器和使用 I S A P I接口的. e x e文件。进程内组件的实例 有d b We b、I D C以及A S P技术。然而,A S P和I I S相互连接的方式还有许多种。因此,先把其他 相关技术放在一边,进一步研究 A S P。 1.2 ASP如何与I I S连接 A S P本身包含了一个D L L文件,名字为a s p . d l l,缺省安装在Wi n n t \ S y s t e m 3 2 \ i n e t s r v目录下。 这个D L L文件负责得到一个 A S P页面(由文件扩展名. a s p标识),然后对它进行分析,寻找服务 器端脚本内容。这个脚本传送给相应的脚本引擎,脚本的执行结果与 A S P页中的H T M L和模板 文本结合在一起。完整的页面会送到 We b服务器,从那里送往原先提出请求的客户端。 1.2.1 关于应用程序的映射 为了更好地理解这个过程,需要研究一下 Windows 2000中的应用程序映射的工作方式。 对于每一个在I I S下设置好的We b站点,服务器上都有一个根目录。安装 I I S时,缺省的We b站 点通常是C : \ I n e t P u b \ W W W R o o t,除非在安装过程中改变了路径。对于这个目录以及其中的子 目录(这个我们稍后再讨论),有一组定义目录如何配合 I I S的属性。 从S t a r t菜单中的Administrative To o l s打开Internet Services Manger,将运行微软管理控制 台(Microsoft Management Console,M M C ),显示I I S的情况。 用鼠标右击Default Web Site,选择P r o p e r t i e s (属性),然后出现Home Directory选项卡,如 图1 - 4所示。 可以看到缺省的站点被设置成为一个虚拟的应用程序。在选项卡的下半部有 A p p l i c a t i o n n a m e、Execute Permissions和Application Protection选项。I I S使用虚拟应用程序的方式来隔离 页面集和所使用的组件的实例,以失败影响到防止 We b服务器。正如早先所看到的,这是通 过在单独的内存空间中执行页面和进程外组件实现的。我们将在本章后面讨论这个问题。 第1章 ASP 基 础计计5 下载 变 量 变 量 直接访问 跨进程访问 Web服务器内存空间 Web服务器内存空间 独立内存空间 进程外可执行程序 进程内的 组件或DDL
6 ASP3高级编程 Chia°deo 下载 网[区 国中→回Ⅹ的喝③‖ IISAdmin C: \WINNTISystem32inetsrvlisadmin ault FTP S*e c:program files\common flesisystemymsadc SuTHep c: inetpublscripts C:lnetpub \Mal MalDon C: lWINNTHelp\Mal C:lInetpub\News C: \WINNT\Help\News T MailDocs CilProgr am Files\ Common Files Microsoft share PSERver C: PRogr LPBSData 由bn C: lWINNT1System 32 RpcPToxy PSErver e PBSData 口 images 图口cnf 口sot 白vug 团口vpt vti_ script Distort. asp abcalstart.asp 田西 Administration Web Ste B S Defaut SMTP Virtual Server mmcof amm Bs Default NNTP Virtual Server onostinfo.html 图1-3显示IS的情况 Securty HttP HeA如 Custom Enors. Se Web Ste I Operaton I When connecting to this resource. the content should come l CAthare located on another comouter CAredrecton to a URL Script source acce rectory browsing cabon Settings Application name Delaut Applicaton Starting point ong ecute Permit Scripts only 图1-4 Home Directory选项卡
图1-3 显示I I S的情况 图1-4 Home Directory选项卡 6计计ASP 3 高级编程 下载
第章ASP基础 7 下载 单击 Configuration按钮打开 Application Configuration对话框,见图1-5。在 App Mappings 项卡里,可以看到IS与各类文件采用特定的DLL相链接。任何含有扩展文件名.asp的网页 都送给aspd进行处理;有未映射的扩展文件名的页面,如HTML页面的html和hm及XML 文件的xml,只需从磁盘上载入并直接发送给客户端。 App Mappings App Options[ App DebupoingI v Cache ISAP) applications Applicaton Mappings C:\WINNT\System32 \netsrM'\asp dll GET,HEAD CWINNT\System 32 inetsrvlasp d GET HEAD C WINNT\System 32\netsry \ sm dll CINNT\System32\ebhits dll GETHEA C WINNT\System32\dq dll ETHEAD C:Winnt\sYsTem32netsrV\httpOdbc.dllOptioNs C WINNT\System32udq dll GET HEA printer C \INNT \System 32\msw3prt dll shtm C\wINNT\System\unetsrv\ssnc. dll OPTIONS 上c地」 图1-5应用程序映射情况 读者可能想了解这一选项卡上的其他文件类型。ida、,idc和idq文件扩展名是 IDC模板文件和查询文件所使用的,因此,一个IDC查询页面(idc)将直接送到动态链 接库httpodbc.di进行处理。从文件名也可猜出,它使用ODBC执行SQL语句,返回包 含在页面中的一组数据记录。同样,shtm、 shtml和stm文件扩展名与文件名为 ssnc.d的动态链接库相对应,这些文件类型一般用于请求服务器端包含( server-side include,SsI)处理的文件。我们将在本书的后续部分给出一些相关的实例。 打开 Application Configuration和 Properties对话框时,读者可能很想了解各个设置的功 本书的很多地方都要用到这些对话框和设置,查看这些设置有助于增加感性认识,但不要改 变这些设置,除非知道为什么这样做 1.22处理一个ASP文件 我们知道一个ASP页面提供给ASP动态链接库等待解释和执行,那么接着ASP会做些什么 第一步判断是否有ASP服务器端的代码需要执行。假如没有,它仅是简单地通知ⅡS这种 情况,并让IS向客户端发送页面。事实上, Windows2000的一个新特性允许对所有页面使用
单击C o n f i g u r a t i o n按钮打开Application Configuration对话框,见图1 - 5。在App Mappings 选项卡里,可以看到 I I S与各类文件采用特定的 D L L相链接。任何含有扩展文件名 . a s p的网页 都送给a s p . d l l进行处理;有未映射的扩展文件名的页面,如 H T M L页面的. h t m l和. h t m及X M L 文件的. x m l,只需从磁盘上载入并直接发送给客户端。 图1-5 应用程序映射情况 读者可能想了解这一选项卡上的其他文件类型。 . i d a、. i d c和. i d q文件扩展名是 I D C模板文件和查询文件所使用的,因此,一个 I D C查询页面( . i d c )将直接送到动态链 接库h t t p o d b c . d l l进行处理。从文件名也可猜出,它使用 O D B C执行S Q L语句,返回包 含在页面中的一组数据记录。同样, . s h t m、. s h t m l和. s t m文件扩展名与文件名为 s s i n c . d l l的动态链接库相对应,这些文件类型一般用于请求服务器端包含 ( s e r v e r- s i d e i n c l u d e,S S I )处理的文件。我们将在本书的后续部分给出一些相关的实例。 打开Application Configuration和Pr o p e r t i e s对话框时,读者可能很想了解各个设置的功能。 本书的很多地方都要用到这些对话框和设置,查看这些设置有助于增加感性认识,但不要改 变这些设置,除非知道为什么这样做。 1.2.2 处理一个A S P文件 我们知道一个A S P页面提供给A S P动态链接库等待解释和执行,那么接着 A S P会做些什么 呢? 第一步判断是否有 A S P服务器端的代码需要执行。假如没有,它仅是简单地通知 I I S这种 情况,并让I I S向客户端发送页面。事实上, Windows 2000的一个新特性允许对所有页面使用 第1章 ASP 基 础计计7 下载
8 ASP3高级编程 Chia° ub coM 下载 扩展名asp,包括对那些非服务器端的脚本代码,而不牺牲任何性能 在早先版本的IS和ASP中,所有有asp扩展名的页面,都会被逐行解释,即使它 们含有非ASP服务器端代码。这当然要比IS直接把它们从磁盘发送给客户端要慢很 当ASP从IS接收到包含有服务器端脚本代码的页面时,它会逐行进行解释。那些非服务 器端的脚本,或不需要ASP进行服务器处理的,将被返回给IS,进而发送给客户端。送来的 脚本都会送给相应的脚本引擎,脚本引擎处理后的结果被发送回IIS时,都会插入页面上相应 位置上。 为提高操作的效率,ASP也常把脚本引擎创建的编译代码,放在高速缓存中以备再次调 用。这个代码与发往客户端的输出结果是不相同的。客户看到的是脚本代码在经过解释、语 法检査和编译后的执行结果。在服务器上高速缓存的只是编译后的代码,在原来的源文件变 化后,这些代码会被放弃 1.辨别服务器端脚本段 ASP的解释器能够根据两种分隔方式之一,分辨出代码是否为服务器端脚本 (1)用用以分隔脚本段的最常用字符是 m s text and HTML, that will not be e d is passed to the REM This is server-side script code that will be interpreted and executed by ASP 这个方法也用于在返回页面的其余文本和HTML中需要插入变量值或小段脚本语句的地 ntResult 7+6-1 m'seven plus six minus one sult of calculatingis 这段代码产生如下结果 The result of calculating seven plus six minus one is 12 (2)使用元素 当编写在浏览器内执行的脚本时,使用元素。当在此元素中包含了 RUNAT属 性并设定其值为“ SERVER”时,该元素也可用在服务器端 BODY> This is text and HTML, that will not be executed, and is passed to the SCRIPT RUNAT='SERVER'>
扩展名. a s p,包括对那些非服务器端的脚本代码,而不牺牲任何性能。 在早先版本的I I S和A S P中,所有有. a s p扩展名的页面,都会被逐行解释,即使它 们含有非A S P服务器端代码。这当然要比 I I S直接把它们从磁盘发送给客户端要慢很 多。 当A S P从I I S接收到包含有服务器端脚本代码的页面时,它会逐行进行解释。那些非服务 器端的脚本,或不需要 A S P进行服务器处理的,将被返回给 I I S,进而发送给客户端。送来的 脚本都会送给相应的脚本引擎,脚本引擎处理后的结果被发送回 I I S时,都会插入页面上相应 位置上。 为提高操作的效率, A S P也常把脚本引擎创建的编译代码,放在高速缓存中以备再次调 用。这个代码与发往客户端的输出结果是不相同的。客户看到的是脚本代码在经过解释、语 法检查和编译后的执行结果。在服务器上高速缓存的只是编译后的代码,在原来的源文件变 化后,这些代码会被放弃。 1. 辨别服务器端脚本段 A S P的解释器能够根据两种分隔方式之一,分辨出代码是否为服务器端脚本。 (1) 用脚本分隔符 用以分隔脚本段的最常用字符是: 这个方法也用于在返回页面的其余文本和 H T M L中需要插入变量值或小段脚本语句的地 方: 这段代码产生如下结果: The result of calculating seven plus six minus one is 12 (2) 使用元素 当编写在浏览器内执行的脚本时,使用 元素。当在此元素中包含了 R U N AT属 性并设定其值为“S E RV E R”时,该元素也可用在服务器端: 8计计ASP 3 高级编程 下载
Chinaopub.com 第章ASP基础 下载 EM This is server-side script code that will be interpreted and executed by ASP BODY 认识到ASP页面可以包含服务器端脚本和客户端脚本是很重要的。客户端的脚本(包含 RUNAT=" CLIENT",或省略 RUNAT属性)不被ASP解释器处理,像带有.htm或htm文件扩展 名的普通HTML页一样直接送给客户端 This is text and HTML that will not be executed, and is passed to the lient HTML> (3)包含单独的脚本文件 ASP页面中能够包含单独的文件,而文件中包含脚本代码,这对编写可用于其他网页的 通用函数是非常方便的。用这种方法,改变这个文件中的脚本代码,则包含这个文件的所有 脚本在执行时都自动做相应的改变。为了包含单独的脚本文件,可使用元素的SRC 性,以指定相对的、物理的或虚拟的路径和文件名。 这个单独的文件必须仅包含有效的脚本代码,不能包含原有页面内容如文本或HTMI 假如使用这个技术,其他的代码不能放在元素内,它必须是空的。如果要为页面增 加其他脚本,需使用另外一个元素或者由分隔的脚本 也可以包含来自包含脚本、文本或HTML的文件的文本,通过使用服务器端包含 ( Server- Side include,SsI)指令可以实现这一点。在第4章中将研究这个问题, 2.定义脚本语言 ASP有两个脚本引擎: VBScript和 JScript。安装ASP时这两个脚本引擎已缺省安装。也有 由其他应用程序使用的脚本引擎,如微软的 Internet Explorer Web浏览器和 Windows Scripting Host。在 Windows2000中该浏览器的目前版本是5.0,可能还有新的升级版本。还有其他的脚 本引擎,如TCL和 PerlScript(一种 ActiveX脚本解释器而非传统的基于CGI的Per)。 因此必须告诉ASP,ASP页用什么引擎。通常使用的方法是用特定的环境声明元素中定义 引擎,这必须放在文件的第一行,并只能定义一次。这个元素一般用在ASP代码分隔符后面 跟着字符@来表示: 这个定义行还可包含其他的定义内容,在本章后面能看到相关内容。定义一个用 SCript编码的页面,如下所示:
认识到A S P页面可以包含服务器端脚本和客户端脚本是很重要的。客户端的脚本 (包含 R U N AT = " C L I E N T ",或省略R U N AT属性)不被A S P解释器处理,像带有 . h t m或. h t m l文件扩展 名的普通H T M L页一样直接送给客户端: (3) 包含单独的脚本文件 A S P页面中能够包含单独的文件,而文件中包含脚本代码,这对编写可用于其他网页的 通用函数是非常方便的。用这种方法,改变这个文件中的脚本代码,则包含这个文件的所有 脚本在执行时都自动做相应的改变。为了包含单独的脚本文件,可使用 元素的S R C 属性,以指定相对的、物理的或虚拟的路径和文件名。 这个单独的文件必须仅包含有效的脚本代码,不能包含原有页面内容如文本或 H T M L。 假如使用这个技术,其他的代码不能放在 元素内,它必须是空的。如果要为页面增 加其他脚本,需使用另外一个 元素或者由分隔的脚本。 也可以包含来自包含脚本、文本或 H T M L的文件的文本,通过使用服务器端包含 ( S e r v e r-Side Include,S S I )指令可以实现这一点。在第 4章中将研究这个问题。 2. 定义脚本语言 A S P有两个脚本引擎:V B S c r i p t和J S c r i p t。安装A S P时这两个脚本引擎已缺省安装。也有 由其他应用程序使用的脚本引擎,如微软的 Internet Explorer Web 浏览器和Windows Scripting H o s t。在Windows 2000中该浏览器的目前版本是 5 . 0,可能还有新的升级版本。还有其他的脚 本引擎,如T C L和P e r l S c r i p t (一种A c t i v e X脚本解释器而非传统的基于C G I的P e r l )。 因此必须告诉A S P,A S P页用什么引擎。通常使用的方法是用特定的环境声明元素中定义 引擎,这必须放在文件的第一行,并只能定义一次。这个元素一般用在 A S P代码分隔符后面 跟着字符@来表示: 这个定义行还可包含其他的定义内容,在本章后面能看到相关内容。定义一个用 V B S c r i p t编码的页面,如下所示: 第1章 ASP 基 础计计9 下载
10s:3商级程 Chinapub.com 下载 对于 JScript引擎,使用: 经过上述定义,在定义元素,可以单独定义每一段的脚本语言,如果需要的话在同 页面上可使用不止一种脚本语言 BODY> This is text and HTML that will not be executed, and is passed to the REM This is server-side VBScript code // This is server-side JScript code / SCRIPT> hchL群 cluded into the by AsP at runtime - ='SERVER LANGUAGE:"VBScri rips/scr106inc> REM This is server-side VBScript code because the default language for the page REM is set as VBScript in the declaration element at the start of the page 元素时,ASP将使用缺省的脚本引 擎。首次安装IS时,缺省的脚本语言是Ⅴ SCript。但对于整个Web站点或者一个站点内的独 立的虚拟应用程序,根据需要可相应改变设置。 在本章前面提到的 Application Configuration对话框中,有一个 App Options选项卡包含了 设置缺省语言的文本框,如图1-6所示 缺省语言也可在IS里通过编辑 Active Directory段的值来改变设置。在 Internet Services Manager mmc插件中所能见到的设置,都存放在 Windows2000中的 Active Directory中,只要 有相应的权限就可以进行读取和编辑。本书将在后面章节详细介绍 Active Directory 除此以外,可根据个人喜好选择脚本语言。假如读者认为一种语言很好,可一直坚持使 用它。因为所有的ASP代码都在服务器端执行而不用担心浏览器的兼容性问题。假如读者精 通Ⅴ SCript和 JScript.或者其他的语言,可根据需要选择最合适的一种。然而因为Ⅴ SCript各个 版本的功能不断扩充(例如 SCript5.0现在支持正规表达式),通常会选择Ⅴ SCript。其对类 型和语法的要求不是很高,并且有更简单的多语句结构,因此是一种容易使用的工具
对于JScript 引擎,使用: 经过上述定义,在 段内的页面的所有代码将被送至定义元素所定义的脚本引擎。 对于这种代码分隔方式,这是指定脚本语言的唯一方法。 然而,使用定义元素,可以单独定义每一段的脚本语言,如果需要的话在同一 页面上可使用不止一种脚本语言: 不像在客户端,在注释元素内不需要隐藏脚本代码,因为当它执行时,代码将从页面移走, 取而代之的仅是输出结果。在客户端查看ASP页(在浏览器中选择View Source)时,只能看到文本、 HTML和其他客户端脚本代码。所有的服务器脚本都被执行,只有结果被送到客户端。 缺省的脚本语言 当没有指定A S P页的脚本语言或没有单独的 元素时,A S P将使用缺省的脚本引 擎。首次安装 I I S时,缺省的脚本语言是 V B S c r i p t。但对于整个We b站点或者一个站点内的独 立的虚拟应用程序,根据需要可相应改变设置。 在本章前面提到的Application Configuration对话框中,有一个App Options选项卡包含了 设置缺省语言的文本框,如图 1 - 6所示。 缺省语言也可在 I I S里通过编辑 Active Directory段的值来改变设置。在 Internet Services Manager MMC插件中所能见到的设置,都存放在 Windows 2000中的Active Directory中,只要 有相应的权限就可以进行读取和编辑。本书将在后面章节详细介绍 Active Directory。 除此以外,可根据个人喜好选择脚本语言。假如读者认为一种语言很好,可一直坚持使 用它。因为所有的 A S P代码都在服务器端执行而不用担心浏览器的兼容性问题。假如读者精 通V B S c r i p t和J S c r i p t或者其他的语言,可根据需要选择最合适的一种。然而因为 V B S c r i p t各个 版本的功能不断扩充 (例如VBScript 5.0现在支持正规表达式 ),通常会选择V B S c r i p t。其对类 型和语法的要求不是很高,并且有更简单的多语句结构,因此是一种容易使用的工具。 10计计ASP 3 高级编程 下载