下载第 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程序开发人员中流行。
首先从了解 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浏览器及其他兼容的应用程序中显示文本及图像。文档的某些部分可以成为超链接,即当其被选择时,可以显示不同的页面或同一页面的不同部分。
标记语言是由特定字符分隔的基本元素,指定基本元素中所包含的文本或其他条目如何显示。例如 <EM>This is some Emphasized text</EM>。 H T M L是一种广泛基于标准通用标记语言 (Standard Generalized Makeup Language,S G M L )的标记语言。
S G M L是描述语言的一种方法,其本身并不是用来创建网页的语言。
H T M L语言从简单开始,不断增加一些附加的功能,直至形成了今天所用的 HTML 4.0版本。这些新增的特性提供了更灵活的文本字体风格 (例如 < F O N T >元素 ),以及对输出页面布局的更多控制 (如窗体和帧的使用 )。
早期的网页所缺乏的是动态的内容。刚一开始时,这还不是一个问题,因为 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
中 < I N P U T >等的窗体控件 ),开发一种能够读取这种信息并加以利用的应用程序成为必然。很明显,传递从其他应用程序中得到的内容,特别是特定类型的数据库的内容,需要一种新的方法。每次都需要重写一个基于文本的页面,对于提供实时性很强的信息当然不是一个理想的方法。
2计计 ASP 3 高级编程 下载对于 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下载
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定义相反,应用进程内 ( 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
图 1-3 显示 I I S的情况图 1-4 Home Directory选项卡
6计计 ASP 3 高级编程 下载单击 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下载扩展名,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) 使用 < S C R I P T >元素当编写在浏览器内执行的脚本时,使用 < S C R I P T >元素。当在此元素中包含了 R U N AT属性并设定其值为,S E RV E R”时,该元素也可用在服务器端:
8计计 ASP 3 高级编程 下载认识到 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 C R I P T >元素的 S R C
属性,以指定相对的、物理的或虚拟的路径和文件名。
这个单独的文件必须仅包含有效的脚本代码,不能包含原有页面内容如文本或 H T M L。
假如使用这个技术,其他的代码不能放在 < S C R I P T >元素内,它必须是空的。如果要为页面增加其他脚本,需使用另外一个 < S C R I P T >元素或者由 < %,,,% >分隔的脚本。
也可以包含来自包含脚本、文本或 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下载对于 JScript 引擎,使用:
经过上述定义,在 < %,,,% >段内的页面的所有代码将被送至定义元素所定义的脚本引擎。
对于这种代码分隔方式,这是指定脚本语言的唯一方法。
然而,使用 < S C R I P T >定义元素,可以单独定义每一段的脚本语言,如果需要的话在同一页面上可使用不止一种脚本语言:
不像在客户端,在注释元素内不需要隐藏脚本代码,因为当它执行时,代码将从页面移走,
取而代之的仅是输出结果。在客户端查看 ASP页 (在浏览器中选择 View Source)时,只能看到文本、
HTML和其他客户端脚本代码。所有的服务器脚本都被执行,只有结果被送到客户端。
缺省的脚本语言当没有指定 A S P页的脚本语言或没有单独的 < S C R I P T >元素时,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 高级编程 下载图 1-6 设置缺省语言
3,脚本性能问题一般来说,We b服务器处理器的速度是足够满足使用的 (除非特别繁忙的站点 ),因为它们的主要任务是从磁盘中载入页面并发往客户端。因此,每个页面的请求结果都使处理器等待磁盘。这意味着执行 A S P脚本通常对性能的影响非常小。而且如果在一个页面上某段脚本代码多次执行,而这段代码的已编译版本已被高速缓存,那么只须执行它,而不必多次编译,
这样对性能的影响就更小了。
当然,随着请求数量的增加,服务器负载也不断增加,解析和执行每个 A S P页面就有相应的代价。应尽可能压缩 A S P解释器的工作量。下面是一些有用的提示。
(1) 避免在同一页面上混用脚本语言如果同一页面上有几种脚本语言,A S P不得不一个接一个地加载多种脚本引擎,并把相应的代码送给相应的引擎。这将降低处理速度,增加内存使用量。另外一个副作用是,假如编写的是一个顺序执行的代码 (而不是一系列从其他代码段调用的函数或子程序 ),可能会以与它们在页面中出现的顺序不同的顺序执行。
例如,下面的代码可能不会产生所希望的结果,因为无法确保 J S c r i p t代码的结果在网页中是首先出现,或是在第三位出现。
第 1章 ASP 基 础 计计 11下载
(2) 在脚本和其他内容中避免过多的环境切换每当 A S P遇到一个脚本段,必须执行并把结果发到 I I S,然后再次返回去解释页面。因此,
使用 R e s p o n s e,Wr i t e语句 (只创建发往客户端的文本,类似于 P r i n t命令行 )能使页面的效率更高。
例如下面这段 V B S c r i p t:
与下段相比,效率更高:
(3) 构建单独的组件假如在一个页面不得不做大量的运算,或者运行一个过于复杂的脚本,通常的好办法是构建一个组件,并安装在 We b服务器上。组件通常是编译过的可执行代码,相对于解释 A S P脚本代码,使用的效率更高。本书后面将探讨构建组件的问题。
1.3 相关设置问题和管理
A S P是随着 IIS 5.0自动安装的,设置程序为用户提供了大多数配置决定。根据计算机的主
I P地址,自动设置一个缺省的 We b站点并绑定在该地址上。这意味着可使用机器名 (在局域网上 )或者使用计算机的 U R L访问 We b站点:
h t t p,/ / s u n s p o t < -通过局域网访问缺省站点
h t t p,/ / s u n s p o t,s t o n e b r o o m,c o m < -全局访问缺省站点请记住,IIS 5.0不仅仅是一个通过 H T T P提供 W W W服务的 We b服务器,还能够提供服务以支持 FTP(File Transfer Protocol,文件传输协议 )和 SMTP(Simple Mail
Transfer Protocol,简单邮件传输协议 ),并提供一个 R A D I U S服务以允许远程用户验证,加上内建的安全性及用户权限管理等特性。
1.3.1 IIS的安装安装 Windows 2000服务器时,缺省状态是不安装 I I S的,因为不是所有的服务器都用作
We b服务器。然而,在 Windows 2000安装过程完成后,Windows 2000 Configure Server页将在
12计计 ASP 3 高级编程 下载
I E中打开,这是安装 I I S及相关的软件和服务的地方。
假如已经安装了不带 I I S的 Windows 2000,可以在 S t a r t菜单处,选择 P r o g r a m s |
A d m i n i s t r a t i v e Tools|Configure Server,打开这个页面。
在图 1 - 7中,选择 A d v a n c e选项,点击 Optional Components。在右侧的页面,点击 Start the
Windows Components wizard,将打开显示一系列可供安装的组件的对话框 (类似 NT 4中的
Option Pack)。
图 1-7 在 Windows 2000安装 I I S的屏幕 1
也可以在控制面板中使用 Add/Remove Programs打开这个对话框。
在图 1 - 8中,选择 Internet Information Services (IIS)选项,点击 D e t a i l s按钮。
图 1-8 在 Windows 2000安装 I I S的屏幕 2
出现的窗口中列出了 IIS 5.0的一些子组件,这些子组件多数已被缺省选中,包括 F T P和第 1章 ASP 基 础 计计 13下载
W W W ( World Wide Web Server)服务,如图 1 - 9所示。
图 1-9 在 Windows 2000安装 I I S的屏幕 3
在学习 A S P时,值得把 I I S全部 (或大多数 )子组件安装在计算机上,这样当研究
A S P和使用 Wi n d o w s其他服务的应用程序时,能够获得这些子组件的所有文档。
完 成 设 置 后,可 通 过 S e r v i c e s对 话 框 (Start|Programs| Administrative
To o l s | S e r v i c e s )关闭不需要的子组件服务,以减少服务器的负载。
假如想通过 I I S提供邮件服务,必须选择 SMTP Service选项。在本书后面将看到,这将安装在创建 A S P邮件应用程序时所需要的各种文件。根据需要也可安装网络新闻传输协议
(Network News Transfer Protocol,N N T P )服务,提供“新闻组”功能。
确保选择 Internet Information Service Manager Snap-in选项,这可通过 S t a r t菜单中的
Internet Services Manager来从 M M C管理 We b服务器。如果想使用 Visual InterDev或 F r o n t P a g e
访问在服务器上的网页,可以安装 FrontPage 2000 Server Extensions。
在设置过程中需要提供给 I I S的唯一信息是缺省的 We b和 F T P站点路径。设置程序建议用户采用 \InetPub\WWW Root和 \ I n e t P u b \ F T P R o o t。如果你有多个驱动器,你可能只想改变驱动器。也可以把它们放在与包含 Wi n d o w s系统文件的驱动器不同的另外一个物理驱动器上,以提高对文件的访问速度。
其他有用的 Wi n d o w s组件回到主 Windows Component Wi z a r d对话框,如图 1 - 1 0所示,可选择其他想安装的
Wi n d o w s服务。在本书中,我们将要用到 Message Queuing Services(MSMQ)和 M i c r o s o f t
Indexing Service(NT 4 Option Pack中的 Index Server)。可以马上安装它们,对这两个均选择缺省选项安装。可以在这个向导中安装的一个有用工具是 Microsoft Script Debugger。我们将在第 7章中介绍这个工具,你可以看到该工具使调试页面非常方便。然而确保不要在一个公用服务器或“生产”服务器上安装 Script Debugger,而仅安装在试验或开发用的服务器上。
安装 I I S以后,可以直接使用它们,安装的缺省页面指出了此站点正在建设中。还有一个页面描述了 I I S的功能和用途,并且有与各个管理程序的链接。这个页面在 h t t p,/ /S e rv e r
14计计 ASP 3 高级编程 下载
_ n a m e _ o r _ u r l/ l o c a l s t a r t,a s p中,只有在站点根目录下没有 D e f a u l t,a s p或 D e f a u l t,h t m页时才加载。
图 1-10 在 Windows 2000安装 I I S的主屏幕需要记住,访问 A S P页使用的是 H T T P协议。假如想在 E x p l o r e r中查看 We b目录的内容,即使是在作为 We b服务器的同一个机器上或通过一个局域网,也不能通过双击它们来加载,必须在浏览器的地址栏中键入机器的 U R L (以 h t t p,/ /开始 )。
1.3.2 IIS管理工具安装的各种服务后,Windows Components Wi z a r d允许安装用来管理 I I S的工具。其中一个是已经提到过的 Internet Services Manager(ISM),这是 Microsoft Management Console(MMC)的一个插件。还有一组 H T M L页面能够用来管理 I I S,它们是 Windows 2000的可选子组件。
这些页面和 I S M都能提供远程管理功能,差别在于 I S M必须安装在远程计算机上,而
H T M L管理页面只要求远程计算机安装浏览器 (最好安装 IE 4.0或更高版本 )。
I S M的 H T M L版本
H T M L管理网页为远程管理 I I S提供真正简便的方式,而且更快、更有效。在服务器上,
可以通过选择 S t a r t菜单中的 Internet Services Manager(HTML)来打开它。图 1 - 11为缺省 We b站点的内容。
注意,这个页面的 U R L包含了一个端口号,这个端口号是 6 3 6 9。安装程序产生一个介于 1 0 0 0? 9 9 9 9之间的随机端口号,并将之分配给安装 H T M L管理页面时所创建的管理 We b站点 (Administration Web Si t e )。必须在 U R L中指定这个端口号,它被自动加到 S t a r t菜单项中。这个初步的安全措施防止不知道端口号的人员的访问。
从远程的计算机上访问 H T M L管理页面,必须知道端口号。这可以从 Administration We b
Si t e的 P r o p e r t i e s对话框中得到。这个 T C P的端口号显示在这个对话框的 Web Si t e选项卡上,如图 1 - 1 2所示。
第 1章 ASP 基 础 计计 15下载图 1 - 11 缺省 We b站点的内容图 1-12 Administration Web Site Properties对话框
16计计 ASP 3 高级编程 下载然而,那还不是全部。缺省时,只有安装在 We b服务器上的浏览器能够调出这些页面,
这是因为也设置了 I P限制。在 Administration Web Site,选择 I I S A D M I N虚拟应用程序,打开这个程序的 P r o p e r t i e s对话框,然后在 Directory Security(目录安全 )选项卡上,在,IP address
and domain name restrictions” ( I P地址和域名限制 )框中选择 E d i t按钮,如图 1 - 1 3所示。
图 1-13 Directory Security选项卡这时打开一个对话框,可以看到这个限制,见图 1 - 1 4。只有 I P地址为 1 2 7,0,0,1 (本地服务器 )才能访问这个页面,即使从其他 I P地址传来的请求包含正确的端口号,也不能访问。
图 1-14 显示 I P限制的屏幕可根据需要改变这个设置,既可删除这个限制 (如果与 I n t e r n e t相连,则这是一个危险的方法 ),也可在列表中增加自己的 I P地址。该地址可以是局域网上远程计算机的 I P地址,或者是代理服务器或 I S P的 I P地址 (如果通过网络连接 )。然而,为了安全,应该通过证书为此应用程序建立一个安全的目录,并通过 h t t p s ( h t t p s e c u r e )访问而不是通过 h t t p访问,即使用 S S L或类似第 1章 ASP 基 础 计计 17下载的方法。我们在后面讨论这些主题内容。
1.3.3 常见的管理任务
I I S的缺省配置对于大多数的应用是合适的。在开始建立站点时,当然可以改变这种配置,
使 A S P与 I I S以不同方式工作。我们已经看到过一些缺省 We b站点的 P r o p e r t i e s对话框。假如你习惯于在 IIS 4.0上使用 ASP 2.0,就会发现多数的设置是相当熟悉的。许多新设置选项的意义可以通过控件标签理解。
在 P r o p e r t i e s对话框中最可能需要改变的设置,显示在图 1 - 1 5中。多数情况下,对于一个完整的 We b站点,可通过这个站点的 P r o p e r t i e s对话框进行这些设置。而对站点内的各个目录进行设置时,要打开目录的 P r o p e r t i e s对话框。
图 1-15 Properties对话框
1,Home Directory 选项卡站点的文件或目录方面的设置要在 Home Directory选项卡中设置。注意,最上面的选项允许指定用户请求应被定向到哪儿,这可以是在本地计算机的一个目录,远程计算机上的一个共享目录,甚至可以是一个 U R L。最后一种选择允许将浏览者重定向到另外一台计算机上。
中间部分的选项,包含控制这个站点或目录上什么功能被启用的设置。可以打开或关闭
“写”和“读”权限;可浏览这个目录 (没有缺省的 We b页时 );可通过 Microsoft Indexing
S e r v i c e ( M I S )建立页面索引,记录访问和用户。也可以允许访问源文件,有些 Windows 2000
新增选项用于使用 Distributed Authoring and Versioning (DAV )等远程编辑技术。
此选项卡的下部是设置的虚拟应用程序的地方。缺省 We b站点 (图 1 - 1 5中所示 )被自动安装为一个虚拟的应用程序,与由安装程序创建的用于管理的目的或由其他服务使用的其他目录一样。在页面中开始使用 Active Server Component时,将详细讨论虚拟应用程序。
18计计 ASP 3 高级编程 下载
2,Web Site选项卡
Web Site选项卡用来向外界标识此 We b站点,管理并发连接的数量及控制访问日志。
上部的选项设置站点的 I P地址和 I C P端口。对于缺省站点,We b服务将响应对于服务器来说可用的所有 I P地址 (假如有多个网络适配器或一个网络适配器中多个地址 ),除非它们被分配给另一个站点。缺省的 W W W访问端口是端口 8 0,如图 1 - 1 6所示。使用这个端口号意味着浏览者在他们请求中不需指定端口号。
图 1-16 Web Site选项卡中间的选项控制可接受的并发连接数目和长时间运行 A S P脚本而不能完成执行的中止时限。也允许指定是否使用 HTTP Keep-Alives,这可为浏览器提供更好的性能,支持它们为多个请求保持连接打开状态。
在下部可设置想采用的访问日志的格式。缺省的是 W 3 C扩展日志文件格式 (W3C Extended
Log File Format)。也可以用 P r o p e r t i e s按钮,打开一个对话框,进一步指定记录信息的细节。
如果要记录到一个数据库,需要选择 ODBC Logging选项,并且为所使用的数据库表提供的
ODBC 系统数据源名称 (一个系统 D S N,见第 8章 )。
3,Documents选项卡此选项卡比上面提到的两个选项卡要简单得多。如果访问一个目录而没有指定文件名,
将显示它指定的缺省页。例如,按图 1 - 1 7中所示的设置,对于对 http://stone broom.com的请求,
将返回给用户的网页是 h t t p,/ / s t o n e b r o o m,c o m / D e f a u l t,a s p。
在 Windows 2000中,不像早期版本,设置程序把 D e f a u l t,a s p放在列表的第一位,后面是
D e f a u l t,h t m。这是因为不包含 A S P脚本的,a s p页面的处理速度几乎与纯 H T M L一样快,因此微软推荐所有的页面均采用,a s p文件扩展名。
这个列表下面的复选框允许我们指定,将加到每个响应末尾的文本或 A S P文件的名称,
这样可以为从这个站点或目录发送的所有页面加上一个标准的页脚。
4,HTTP Headers选项卡第 1章 ASP 基 础 计计 19下载图 1-17 Documents选项卡先讨论一下什么是 H T T P报头,如何和为什么使用它们,细节在下一章中讨论。先看一下
HTTP Headers选项卡,对其所能完成的工作有一个感性认识,并说明如何找到相应的控件以改变相应的设置。
HTTP Headers选项卡如图 1 - 1 8所示,上部选项是设置这个站点或目录中每一个文档的有
20计计 ASP 3 高级编程 下载图 1-18 HTTP Headers选项卡效期的日期和时间。在这个时间后,在浏览器或代理服务器的缓存中的任何页面拷贝将变成无效的,并且不能显示。这个选项允许用户控制在必须从站点载入新页面之前缓存中的页间
“保存”多长时间。
中间的选项允许在从这个站点或目录返回的所有页面响应中增加定制的 H T T P报头。这主要应用于定制的客户端应用程序,或特定的定制的数据管理。
下部的两个选项允许设置这个站点或目录页内容的等级划分,以及服务器发回客户端的
MIME 类型报头。内容等级划分用来描述页面上的内容的等级,如“性”,,暴力”,,恶性语言”等内容级别。 M I M E类型报头用来指明客户期望从服务器上得到的数据类型。
5,Server Extensions选项卡这里要讨论的最后一个选项卡是 Server Extensions 选项卡。 I I S的一个令人激动的新功能是
Distributed Authoring and Ve r s i o n i n g ( D AV ),尽管在 Windows 2000没有完全实现,但 D AV最终将提供一个良好环境允许用户在他们各自的浏览器上编辑存放在 We b服务器上的文档。 D AV扩展了目前由微软的 Visual InterDev和 F r o n t P a g e提供的功能,它允许编辑非 We b文档如 Wo r d文档或 E x c e l电子表格,对于一个 I n t r a n e t环境,这些特征为用户提供了更加灵活和易于交互的系统。
D AV可使用一系列驻留 We b服务器上的软件扩展,类似于 F r o n t P a g e扩展 ( F r o n t P a g e扩展用来使 I n t e r D e v和 F r o n t P a g e能够访问和下载服务器上的文件 )。我们将在后续章节详细研究 D AV,
先看一下 Server Extensions选项卡,如图 1 - 1 9所示。
图 1-19 Server Extensions选项卡这个选项卡允许控制这个虚拟应用程序所用到的著作和版本控制特性也包括指定用于网页编辑命中次数这种扩展功能的方式 (协调服务器和控制页面的缓存从而得到最佳的性能 )。当使用 D AV时,还可提供从页面上发送电子邮件的缺省设置,并设定安全性限制来保护内容。
第 1章 ASP 基 础 计计 21下载
1.4 ASP 3.0对象模型概要在从编程的角度研究 A S P的细节之前,必须看一下 A S P对象模型。这是非常重要的。因为如果你没有在 ASP 2.0上做过同样的工作,必须考虑 A S P产生页面的方式。
1.4.1 对象环境概念在版本 1,0中,把能够为 We b页面增加一些动态内容当作是一个令人激动的新方法。可以使用它从数据库读取数据,或操作从浏览器发来的数值。在 ASP 2.0中,发生了很多非常引入注目的变化,增加了 Microsoft Transaction Server(MTS),它能够处理多个并发组件实例并提供进一步的扩展能力。这意味着动态 We b页工作的整个概念发生了变化。
在此基础上,M T S允许使用分布在多个组件、应用程序和服务中的事务。例如,当通过
Message Queue Service(以前是 M S M Q )向远程计算机发送消息时,一个 A S P页能够更新本地数据库。假如整个事务中的一部分失败,整个处理过程将被恢复到系统原来的状态。
M T S,以及组件的使用日益广泛,导致了使用 A S P的 We b应用程序的发展,而不再是单独的简单动态页。在由 A S P脚本实例化的组件内,这个 A S P页的环境是可用的。环境包含了所有内部的 A S P对象 (我们很快要遇到的 )。因此,可以使用它获得用户请求的信息并创建相应的响应。
由于这个环境包含了整个 A S P的对象模型,因此,它允许程序员对 A S P以及所使用的各组件所执行的复杂处理进行更多的控制。通常认为对象模型的“根”是请求、响应和其他内部对象;而真实情况是 (自从 ASP 2.0以来就已经是 ),这个根是一个称为 O b j e c t C o n t e x t的对象。
1.引用 A S P页面的环境在 ASP 1.0中,引用环境的唯一方式是通过每次开始执行 A S P页时由 A S P引发的事件:
O nSt a r t P a g e。这个事件以一个参数为 A S P页提供 O b j e c t C o n t e x t对象。在一个组件内,能够在一个全局变量中捕获对 O b j e c t C o n t e x t的一个引用,以供代码使用。例如,下面这段 V B代码把环境存储在一个称为 o b j C o n t e x t的局部变量中。
从上面的代码中看出,在 ASP 1.0中,对象的环境是 S c r i p t i n g C o n t e x t类型,这是一种在
ASP DLL中定义的对象类型并为创建引用文件 a s p,d l l的代码所用。然而很明显,控制事务并提供高效的进程外的组件执行 (ASP 2.0中 M T S管理的一个任务 ),必须采取不同的做法。页环境必须是显式可用的,无须在每个页面的开始处保留对它的引用。
因此,在 ASP 2.0中,微软引入了 O b j e c t C o n t e x t对象。然而,由于 S c r i p t i n g C o n t e x t仍然通过 O n S t a r t P a g e事件起作用,许多组件的创作者考虑到程序的向后兼容性,避免使用
ObjectContext 对象,甚至宁愿以降低性能为代价。现在,由于有了 ASP 3.0,情况发生了变化。
22计计 ASP 3 高级编程 下载在 Windows 2000中,M T S做为 C O M +技术的一部分被融入操作系统中,除非明确决定避免它,
否则将在缺省状态时被用于在 A S P中实例化的任何一个组件。
2,引用 ObjectContext 对象从 ASP 2.0开始,已经能够通过 A S P提供的 G e tObjectContext 方法获得一个对当前页面环境的引用。这就意味着不必再通过一个页面存储对环境的引用,可以在任何需要的时候得到它。
这允许我们的对象变成无状态的 ( S t a t e l e s s ),换句话说,当完成执行一个特定的方法后,
不需要保留对任何数值或对象的引用。假如以前你没有使用过 ASP 2.0和 M T S,这看起来也许是一个有些深奥的概念。然而它是极其重要的,我们将在后续章节讨论关于这个问题的大量细节。
1.4.2 ASP内置的对象看到了 A S P如何以 O b j e c t C o n t e x t对象的形式提供一个“根”对象,就可以来了解其他的内置对象如何构建在它上面,以提供对客户端请求、我们所创建的响应和其他使编写脚本更容易的对象的访问。
原来的 S c r i p t i n g C o n t e x t对象仍然在使用,并且 O nStartPage 事件也是可用的,但现在已经陈旧了,应该只用于在有 ASP 1.0的 IIS 3.0上执行的页面,或在需要绝对的向后兼容性时使用。
由 A S P提供的两个主要内置对象,直接映射访问 We b服务器时客户端的两个行为。另外 4
个提供了附加功能,对编写脚本是非常有用的。每个对象都提供了一系列的集合、属性和方法,这在后续章节将加以介绍。
R e q u e s t对象为脚本提供客户端在请求一个页面或传送一个窗体时提供的所有信息,这包括能够标识浏览器和用户的 H T T P变量,存储他们的浏览器对应于这个域的 c o o k i e,以及附在
U R L后面的值 (查询字符串或页面中 < F o r m >段中的 H T M L控件内的值 )。它也给我们提供了通过 Secure Socket Layer(SSL),或其他的加密通信协议,访问证书的能力并提供有助于管理连接的属性。
R e s p o n s e对象用来访问所创建的并返回客户端的响应。它为脚本提供了标识服务器和性能的 H T T P变量,发送给浏览器的信息内容和任何将在 c o o k i e中存储的信息。它也提供了一系列用于创建输出页的方法,如无所不在的 R e s p o n s e,Wr i t e方法。
A p p l i c a t i o n对象是在为响应一个 A S P页的首次请求而载入 ASP DLL时创建的,它提供了存储空间用来存放变量和对象的引用,可用于所有的页面,任何访问者都可以打开它们。
独特的 S e s s i o n对象是在每一位访问者从 We b站点或 We b应用程序中首次请求一个 A S P页时创建的,它将保留到默认的期限结束 (或者由脚本决定中止的期限 )。它与 A p p l i c a t i o n对象一样提供一个空间用来存放变量和对象的引用,但只能供目前的访问者在会话的生命期中打开的页面使用。
S e r v e r对象提供了一系列的方法和属性,在使用 A S P编写脚本时是非常有用的。最常用的第 1章 ASP 基 础 计计 23下载是 S e r v e r,C r e a t eObject 方法,它允许我们在当前页的环境或会话中在服务器上实例化其他
C O M对象。还有一些方法能够把字符串翻译成在 U R L和 H T M L中使用的正确格式,这通过把非法字符转换成正确、合法的等价字符来实现。
A S P E r r o r对象是 ASP 3.0中的一个新的对象,通过 S e r v e r对象的 G e t L a s t E r r o r方法使用。它提供了发生在 A S P中的上一次错误的详细信息。
可以把这些对象看作是基于 O b j e c t C o n t e x t对象的一个层次关系的成员,这有助于理解它们与接受和响应客户请求的过程之间的关系,如图 1 - 2 0所示。图中表现了 A S P和创建及服务于
A S P页的过程之间的关系。
我们将在后续章节详细研究每一个对象,以及使用它们的方式。
图 1-20 各种对象之间的关系
1.5 ASP 3.0中的新特性假如读者已经熟悉了 ASP 2.0,并正在寻找 3,0版本中的实际改变的列表,那么将在下面发现这些信息。假如读者是一个 A S P的初学者,可以越过本章到下一章,那里循序渐进地介绍了 A S P对象和它们的用法。
1.5.1 ASP 3.0新特性概要在 ASP 3.0中,有一些新的特性或经历较大的变化或改进的特性。
1,无脚本的 A S P
如早先提到的,A S P处理不包括任何脚本的,a s p页的速度是很快的,假如你正在创建的站点或 We b应用程序文件最终可能使用 A S P,最好让这些文件使用,a s p文件扩展名,而不用考虑它们是包含服务器端脚本还是仅仅包含静态 ( H T M L和文本 )内容。
2,新的流向控制能力
24计计 ASP 3 高级编程 下载客户请求
Session对象
Session对象
Request
对象
Request
对象
Response
对象
Response
对象
Application对象客户请求客户客户服务器响应
Server
对象
ASPError
对象服务器服务器响应到目前为止,假如想把执行转向另外的一个 A S P页,不得不使用 R e s p o n s e,R e d i r e c t语句,
这个工作通过向客户端发送一个响应来指示其载入新的页面来实现。然而这对客户端来讲是费事的。而且当代理服务器用于客户端时,会引起错误的消息。 ASP 3.0为 S e r v e r对象提供了两个新的方法,允许在服务器上转换页面而不需要新的客户端的请求。
S e r v e r,Tr a n s f e r是转换执行到另一个页面;而 S e r v e r,E x e c u t e是执行另一个页面,然后将控制返回原来的页面。在新的页面里可访问原来页面的环境,包括 Response 和 R e q u e s t等所有
A S P对象,但是不能访问页面范围的变量。假如原始的页面使用了一个事务标志 (在开放的
< % @,,,% >元素中 ),事务的环境被传递到新的页面。假如第二个 A S P文件的事务标志表明事务是受到支持的或需要的,则现有的事务将被使用,而不会开始一个新的事务。
3,错误处理和新的 A S P E r r o r对象通过提供一个用 S e r v e r,Tr a n s f e r方法自动调用的定制的 A S P页面,提供了可配置的错误处理。在这个 A S P页面中,S e r v e r,G e t L a s t E r r o r可被用来返回一个 A S P E r r o r对象的实例,其中包含了错误的细节,例如错误的描述和相关的行号。
4,编码后的 A S P脚本
A S P脚本和客户端脚本现在可以使用 B A S E 6 4加密法进行编码。更高水平的加密计划将出现在 A S P的未来新版本里 (注意,这个特征是由 VBScript 5.0和 JScript 5.0脚本引擎实现的,因此在脚本被执行时要求这些引擎存在 )。编码后的脚本将在运行时由脚本引擎解码。因此不必使用别的工具,尽管这不是很安全的加密方法,但能够保护脚本不被一般的用户浏览和拷贝。
5,包含脚本文件的一种新方式除了使用 < ! - - # I n c l u d e,,,- - >元素使服务器端的 I I S包含脚本代码文件,ASP 3.0也能够“包含”其自己。 < S C R I P T >元素与 R U N AT =,S E RV E R”和 S R C =,p a t h _ a n d _ f i l e n a m e” 属性共同使用,来包含基于服务器的脚本代码文件。相对的物理路径或虚拟路径也可以用在 S R C属性中:
6,Server Scriptlets
ASP 3.0支持一种强有力的新的脚本技术,称之为 Server Scriptlets。这些是驻留在服务器上的 X M L格式的文本文件,可以像一般的 C O M对象 (即 A c t i v e服务器组件 )为 A S P所用。这样可以把 We b应用程序的业务逻辑脚本过程更容易地实现为一个可重用的组件。
7,增强性能的 A c t i v e服务器组件
A S P中的许多 A c t i v e服务器组件得到了改进,能够提供更好的性能和附加的功能,一个例子就是新的 Browser Capabilities组件。除此之外,还有一些新的组件。例如,X M L分析器使应用程序可以处理服务器上的 X M L格式的数据。同时,提供了 A D O与 X M L更加紧密的集成
(通过 Windows 2000所提供的新的 ADO 2.5版 ),这为以 X M L格式存贮和获取数据,提供了新的机会。
8,性能为改善 A S P和 I I S的性能和可扩展性,新版本做了大量的工作。这包含 A S P中的自我调整特征,它可以检测阻塞情况并自动增加可用线程的数量。当请求在执行中受到外部资源的阻塞时,A S P能够检测出来,并为同时执行附加请求和继续正常处理提供更多的线程。但是,
假如 C P U变得超负荷,A S P会减小可用线程的数量,以便当过多的非阻塞请求同时执行时,
第 1章 ASP 基 础 计计 25下载将线程切换次数最小化。
1.5.2 对 ASP 2.0的改进下面的一些特征是从 2,0版本中改进或升级来的。
1,缓冲缺省为打开状态
A S P提供可选的输出缓冲。从 IIS 4.0开始,这使得脚本执行得更快,并提供对流向浏览器的输出的控制能力。在 ASP 3.0这个改进的性能通过改变 R e s p o n s e,B u ff e r属性的缺省设置为
Tr u e而反映出来。缺省状态下缓冲是打开的,这意味着最终的输出只有在进程完成时,或脚本调用 R e s p o n s e,F l u s h或 R e s p o n s e,E n d方法时,才送至客户端。
注意,可以通过设置 R e s p o n s e,B u ff e r属性为 F a l s e,关闭缓冲。只有这样,才能发送 X M L格式化输出给客户端,让 X M L分析器在收到输出后开始工作。也可以使用
R e s p o n s e,F l u s h发送大页面的一部分,这样使用户可以很快看到部分输出。
2,Response,IsCl i e n t C o n n e c t e d的变化
R e s p o n s e,I sCl i e n t C o n n e c t e d属性可以在没有任何内容发送给客户端的情况下被读取到。
在 ASP 2.0中,这只在至少有一部分内容被发送后才能返回准确的信息。这一改进解决了 I I S必须响应每个客户的请求 (即使客户可能已经转移到另一个页面或站点 )的问题。同时如客户在 3
秒内没有再连接,服务器上创建的完整的输出信息将被丢弃。
3,带有默认文档的查询字符串假如一个用户访问一个站点而不提供所请求页面的名字,默认的文档 (如存在的话 )将被送往客户端。然而假如他们提供了附在 U R L后面的查询字符串,这在早先的 A S P版本中是被忽略的,而在 IIS 5.0和 ASP 3.0中这个查询子符串将被送到缺省页面。例如,在一个 U R L为:
h t t p,/ / w w w,w r o x,c o m / s t o r e /的目录中缺省页面为 d e f a u l t,a s p,则下面这两种情况都将名称 /值对
C o d e = 1 2 7 4送往 d e f a u l t,a s p页面:
4,服务器端包含文件的安全性服务器端的包含文件常用于一些敏感的信息,如数据库连接字符串或其他访问细节。一个虚拟的路径 (即 U R L而不是完整的物理磁盘文件路径 )可以用来指定这些文件。 在这种情况下,
早先的 A S P版本不核对文件的安全设置和用户的证书;换句话说,授权 (验证后 )的用户和匿名的 We b服务器帐号都没有与文件的访问控制列表相比较。在 IIS 5.0和 ASP 3.0,这些证书将被检查以防止非授权访问。
5,可配置项移到元数据库中在 IIS 5.0中 P r o c e s s o r T h r e a d M a x和 E r r o r s To N T L o g的注册项被移到元数据库中,所有的
A S P可配置参数能够通过 Active Directory和 Active Directory服务接口 ( A D S I )在元数据库中修改。
6,应用程序中的双线程对象的性能为了在常有多个并发请求的 A S P中获得最佳性能,组件应是双线程的 ( B o t h - T h r e a d e d )—
即单线程单元 (Single Threaded Apartment,S TA )和多线程单元 (Multi-Threaded Apartment,
M TA ),并且支持 COM Free-Thread Marshaller(FTM)。不支持 F T M的双线程的 C O M对象假如
26计计 ASP 3 高级编程 下载被存储在 ASP Application状态对象中,将导致运行失败。
7,更早释放 C O M对象在 IIS 5.0中,实例化的对象或组件可更早释放。在 IIS 4.0中,C O M对象只有在 A S P处理完一个页面时才能释放。在 IIS 5.0中,假如一个 C O M对象不使用 O n E n d P a g e方法,且对象的引用计数达到零,则这个对象在处理完成之前就被释放了。
8,缺省时 A S P允许进程外组件定制的本地服务器组件现在可以从 I I S中被实例化,而不需要改变元数据库的设置。控制本地服务器实例化的元数据库属性 A s p A l l o w O u t O f P r o c C o m p o n e n t s缺省值为 1,在 I I S早期版本为 0。
9,COM对象的安全性
I I S使用了新的由 C O M +提供的 c l o a k i n g特性,因此,从 A S P实例化的本地服务器应用程序可以运行在原始的客户的安全环境中。在早期版本中,安全环境被指派到本地服务器 C O M对象,依赖于调用进程的身份。
10,缺省时组件运行在进程外在 A S P早期版本中,所有在 A S P页面环境中创建的组件缺省时运行在进程内。
为在组件的性能和 We b服务器安全性之间折衷,对于一个虚拟的应用程序,可以从
P r o p e r t i e s对话框中 Application Protection的三个选项中选择:
Low (IIS Process)
这种设置的 A S P虚拟应用程序的所有应用程序可执行文件和组件都运行在 We b服务器可执行文件 ( I n e t i n f o,e x e )的进程 (即内存空间 )中。因此,We b服务器就有受到可执行文件或组件失败影响的风险,然而这提供了最快的和最少资源浪费的应用程序执行选项。
Medium (Pooled)— 这是缺省设置这种设置的 A S P虚拟应用程序的所有应用程序可执行文件和组件都运行在单个共享的
D L L H o s t,e x e实例的进程 (即内存空间 )中。这保护了 We b服务器可执行文件 ( I n e t i n f o,e x e )免受任何一个可执行文件或组件失败带来的风险。然而,可执行文件或组件的失败会引起
D L L H o s t,e x e进程失败,进而所有其他驻留其中的可执行文件和组件也会失败。
High (Isolated)
这种设置的 A S P 虚拟应用程序的所有应用程序可执行文件和组件都运行在单个
D L L H o s t,e x e实例的进程 (即内存空间 )中,但是每个 A S P应用程序都有自己的 D L L H o s t,e x e实例。 D L L H o s t,e x e对应用程序而言是独有的,这保护 We b服务器可执行文件免受任何一个可执行文件或组件失败带来的危险,同时也保护了虚拟应用程序,免受因其他虚拟应用程序的可执行文件或组件失败带来的问题。微软建议在任何一个 We b服务器上最多驻留 1 0个隔离的虚拟应用程序。
推荐的配置是:在它们自己的进程中运行对于任务关键的应用程序,即 H i g h ( I s o l a t e d );
余下的所有应用程序在一个共享的进程中运行,即 Medium (Pooled)。也可设置组成每个虚拟应用程序的脚本和组件的执行权限 (Execute Permission),三个选项是:
1) None:在这个虚拟的应用程序中不能运行脚本或可执行文件。在实际效果上,这提供了一个在必要时快速和简便地禁止一个应用程序的方式。
2) Scripts only:仅允许脚本文件,诸如 A S P,I D C或其他,能够在这个虚拟应用程序中运第 1章 ASP 基 础 计计 27下载行,可执行文件不能运行。
3) Scripts and Executables:允许任何脚本和可执行文件在这个虚拟应用程序中运行。
1.5.3 VBScript 5.0中的新特性能够在 A S P中应用的特性包括了那些由脚本引擎所提供的特性,这意味着 V B S c r i p t的改进也可在 A S P中应用。 V B S c r i p t的改进如下所述。
1,在脚本中使用类在 V B S c r i p t中实现完整的 V B类 ( c l a s s )模型,但明显的例外是在 A S P服务器端的脚本事件。
可以在脚本中创建类,使它们的属性和方法能够用于页面的其余代码,例如:
这段代码产生如下结果:
2,Wi t h结构
VBScript 5.0支持 Wi t h结构,使访问一个对象的几个属性或方法的代码更加紧凑:
3,字符串求值
E v a l函数 (过去只在 J a v a S c r i p t和 J S c r i p t中可用 )目前在 VBScript 5.0中已经得到了支持。它允许创建包含脚本代码的字符串,值可为 Tr u e或 F a l s e,并在执行后可得到一个结果:
28计计 ASP 3 高级编程 下载
4,语句执行新的 E x e c u t e函数允许执行一个字符串中的脚本代码,执行方式与 E v a l函数相同,但是不返回结果。它可以用来动态创建代码中稍后执行的过程,例如:
一个回车返回 (如程序中示 )或冒号字符“:,可用来分隔一个字符串中的各条语句。
5,设置地区新的 S e t L o c a l e方法可以用来改变脚本引擎的当前地区,可正确显示特殊的地区特定字符,
如带重音符的字符或来自不同字符集的字符。
6,正则表达式
VBScript 5.0现在支持正则表达式 (过去只在 J a v a S c r i p t,J S c r i p t和其他语言中可用 )。
R e g E x p对象常用来创建和执行正则表达式,例如:
执行结果如下:
第 1章 ASP 基 础 计计 29下载
7,在客户端 V B S c r i p t中设置事件处理程序这不是直接应用于 A S P的脚本技术,这个新的特性在编写客户端的 V B S c r i p t时是很有用的。
现在可以动态指定一个函数或子程序与一个事件相关联。例如,假设一个函数的名称为
M y F u n c t i o n ( ),可把它指定给按钮的 O nCl i c k事件:
这提供了 J a v a S c r i p t和 JScript 中的类似功能,函数可以被动态地指定为一个对象的属性。
8,VBScript中的 On Error Goto 0
尽管这个技术早先没有被文档记载,但在现有的 V B S c r i p t版本中能够使用 (有着 V B背景并且有好奇心的人可能早已发现这个秘密 )。它现在已被记录在文档中,并且在执行 On Error
Resume Next后能够用来“关闭”页面中的定制错误处理。结果是任何后来的错误将引发一个浏览器级或服务器级的错误及相应的对话框/响应。
1.5.4 JScript 5.0中的新特性
JScript 5.0唯一的改变是引入了错误处理。
J a v a风格的 t r y和 c a t c h结构在 JScript 5.0中得到了支持。例如:
内建的 JScript Error对象有 3个属性,它们定义了上次的运行期错误。可在 c a t c h块中使用它们获得有关错误的更多信息。
假如你想抛出自己的错误,可用一个定制的异常对象引发一个错误 (或异常 )。然而,由于
30计计 ASP 3 高级编程 下载没有内建的异常对象,必须自己定义一个结构:
这样的对象可用来在页面中引发定制的异常。这通过使用 t h r o w关键字,然后检查 c a t c h块中的异常类型来实现:
1.5.5 其他的新特性还有几个新特性已经能够在 IIS 5.0中使用了。
1,DAV(Distributed Authoring and Ve r s i o n i n g )
这个标准由 Internet Engineering Task Force (IETF)创建,目前为 1,0版本。它允许作者在几个不同的位置共同创建和维护 We b页和其他的文档。它用于提供上载 ( u p l o a d )和下载访问,并控制版本号使工作过程能够得到相应的管理,I E包含与 IIS 5.0中的 D AV的集成的特性。但是,
在 I E T E标准和当前的 IIS 5.0版本中,尚未实现版本控制能力。
2,引用类型库在过去,常常使用服务器端的包含文件,把常数从一个类型库 (例如脚本对象,A D O或
M S M Q )增加到 A S P页面。这是必须的,因为 A S P不能像 V B那样创建对类型库或组件 D L L的引用。在 IIS 5.0中,不必再为常数使用包含文件。可以在 < H E A D >部分放一个 H T M L注释风格的元素,来直接访问一个组件的类型库。
第 1章 ASP 基 础 计计 31下载这将使指定文件中的常量在当前 A S P页面中都可用 (尽管这是 IIS 5.0中的一个新特性,但在 IIS 4.0中虽没有记入文档,但已经可以使用了 )。
3,FTP下载续传
F T P服务现在终于提供了下载的续传功能。假如一个文件部分下载后停止,它能够从断点处继续下载。这意味着没有完成下载的文件不需要再次下载整个文件。
4,HTTP压缩
I I S现在能够自动实现对静态或动态产生的文件的 H T T P数据流压缩并高速缓存压缩的静态文件。在与适当地准备好的客户端通信时,这会提供更快的响应并减少网络的负载。
1.6 小结本章简单地讨论在使用 ASP 3.0时需要注意的主要问题。主要从有经验的 We b开发人员的角度来讨论,并假设读者通过使用早先版本的 A S P,有了 A S P方面的经验,或者至少了解当客户机与服务器交互时 We b是如何工作的。
至此,读者应该对 A S P能够提供的功能有了一个大致的了解,即早先版本已有的特性,
以及 ASP 3.0的新特性。假如感觉到自己还不能完全理解 A S P对象模型的概念,或从其他来源访问这个对象模型的方式,不用担心这个问题。现在只要对这里所讨论的问题有一个大致全面的了解,在后续章节中详细研究相关问题时,再进一步加深理解。
事实上,下一章将研究两个主要对象 R e q u e s t和 R e s p o n s e。在后面章节中,将陆续研究其他对象,然后将研究在页面中如何使用 A c t i v e服务器组件,包括通过 V B S c r i p t和 J S c r i p t脚本引擎可用的脚本对象。在第 7章,将研究错误的处理 (这在 ASP 3.0中改进很大 ),以及如何调试
A S P页。
本章主要讨论了下列重要题目:
什么是 A S P。
ASP如何与 I I S连接。
安装问题与管理。
对象环境的概念。
ASP 3.0对象模型。
ASP 3.0版本中的新特性。
不要犹豫,马上进入第 2章吧,开始学习关于客户端的请求和服务器的响应的知识。
32计计 ASP 3 高级编程 下载