日期:2011-12-06  浏览次数:21160 次


     前面的章节中已经多次使用过Web应用程序(Web Application)术语,所指的既不是一个真正意义上的Web网站,又不是一个传统的应用程序。换句话说,而是认为它是一些Web网页和用来完成某些任务的其他资源的一个集合。它隐含这样一层意思:有一个预定义的路线贯穿于网页之中,用户可做出选择或提供信息使任务能够完成。
     例如,一个在线商店,你为了购买货物,进行反复的观察和选择,浏览一系列网页,收集所需要的信息,支付相应的费用,最后发出定单。也可能是一个“软件升级向导”,指导用户完成下载和安装新软件的过程,或者可能是一个基于Intranet的报价单或销售报告的生成工具。
     所有这些不同于“标准”的Web网站,一般的Web站点使用一系列菜单或导航栏以预先未定义的路径漫游该站点。但是一个Web应用程序远不只是受控制的导航器。自由地漫游于一个Web网站时,可以进行无状态的和匿名的访问,但Web应用程序一般不接受。

     3.2.1 ASP应用程序的定义
     上述内容可以认为是术语“Web应用程序”的一个合理的一般定义,但遗憾的是,在谈论有关“ASP应用”时,仅这些还不够。回答什么是“Web应用”可以是主观的,而回答什么是“ASP应用”则需要从技术上的解释。在ASP中术语“应用程序”有自己特定的含义,在讨论如何实现之前,弄懂这个概念至关重要。
     ASP应用程序与两个主要的内容有关:
     · 全局范围的规定,具有一个全局可访问的变量存储区域。
     · 通过COM+与IIS的集成,可更好地管理组件。
     下面讨论这些内容。第二个内容涉及到其他ASP对象,其覆盖范围相应广泛。在下一章研究ASP Server对象时,将对这部分内容进行详细地讨论。
     1. 提供Web应用程序的全局范围
     ASP提供一个Application对象,基本上与前面讨论的Session对象相当。但是,这是在应用程序层而不是在用户层。换句话说,该对象是全局的,不是对单独用户的,而是对应用程序的所有用户,其作用域不限制为单独用户的访问。这与在一个正常的可执行应用程序中的全局(或Public)变量相同。Application对象可用于在全局环境中存储变量和信息(即状态),该应用程序内的任何ASP网页中运行的脚本都可访问这些值,而不管是哪个访问者发出的请求。
     但是,这没有回答主要问题:什么是一个ASP应用程序?为此,需要研究ASP内部的一些情况。
     当用户请求一个ASP网页时,IIS通过实例化asp.dll(用来实现ASP)创建一个环境(如第1章所述)。将该页面解释为服务器端脚本,相应的脚本引擎的实例用来执行该脚本。
     实例化的asp.dll初如事件启动一个ASP应用程序,创建一个Application对象。然后,为这个用户启动一个会话,并创建单独的Session对象。当更多的会话启动时,这个Application对象保留在作用域中(即已经实例化和可用)。一旦最后保持活动的会话结束,该应用程序就结束,并取消相应的Application对象。
     (1) 缺省的ASP应用
     Windows 2000在安装IIS和ASP时,创建一个缺省的Web站点。它被配置成一个ASP应用程序,涉及到在Properties对话框中针对站点根目录文件夹(缺省为C:InetpubWWWRoot)的一些设置。图3-2所示是缺省Web站点的Properties对话框的屏幕。

     涉及到ASP应用程序的文件之一是global.asa。这个文件用于定制应用程序行为的方式。放置在应用程序的根目录下,可用于该目录下的所有子目录。因此,如果它放置在整个Web站点的根目录下,则定义整个网站作为缺省的ASP应用程序的一部分。
     在本章后面有关应用程序和会话事件的部分中,将看到这个文件及其使用方法。
     (2) ASP虚拟应用程序
     如同在设置过程中创建缺省的应用程序一样,可以在该Web网站的任何子目录中创建属于自己的ASP虚拟应用程序。这个应用程序包含作为“应用程序目录”而定义的目录中所有的子目录。并且,这个目录和子文件夹也都是缺省应用程序的一部分,共享由缺省的Application对象创建的全局空间。
     事实上,在缺省的应用程序中存储的所有变量在子目录中的应用程序中也都是可用的。然而,如果该子目录应用程序中的一个ASP网页把一个值写入Application对象,而Application对象与缺省(根)应用程序中已存在的一个值有相同的名字,那么,原先的值在子目录应用程序中就不能再用。但是在其他的应用程序或ASP网页中,将保留原有的值,因为根目录的应用程序不能访问子目录应用中的值。
     从一个子程序或函数的变量的角度考虑这个问题。如果定义一个变量intMyValue为Public或全局的变量,可以从任何的子程序或函数内部访问该变量。但是,如果又声明一个具有相同名字的局部变量,并在该子程序或函数内对该变量进行引用,则得到此变量的局部值。不能再访问原先的值。当子程序或函数结束,局部值被撤消,全局变量原有的值仍然保留着:
Public intMyValue = 42
Function DoSomething()
Response.Write intMyValue ‘Gives 42 from global variable
Dim intMyValue
IntMyValue = 17
Response.Write intMyValue ‘Gives 17 from new local variable,but
‘the global value of MyValue is still 42
End Function
     (3) 创建自己的ASP虚拟应用程序
     为了建立一个新的虚拟应用程序,使用Internet Services Manager应用程序或具有相同功能的HTML Web Manager网页。在Internet Services Manager中,在要创建的虚拟应用程序的目录上单击右键,并选择New,接着选择Virtual Directory,屏幕如图3-3所示:

     这个操作启动New Virtual Directory Wizard,该向导的开始屏幕提供有关向导的操作信息。单击Next,在第二页中键入新的虚拟应用程序的名字(或别名)。这个名字与Internet Services Manager中选择的目录的路径联合起来,将成为该应用程序的URL。屏幕如图3-4所示: