快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

准确使用ASP中的GLOBAL.ASA

准确使用global.asa是ASP开发者的一个共同问题。最主要的是要知道什么时候该用Virtual Application,什么时候该用Virtual directory,并且知道他们的不同。

  Virtual Directories(虚拟目录)
  简而言之,virtual directories是虚拟出来的,不一定跟web root在同一个的目录上,可以是其他的。但是你可以像使用web root上的其他目录相同使用它。当运行global.asa以后,ASP就把所有的虚拟目录看成是应用程序根目录上的子目录。
  值得注重,假如你的目录已经是website root上的一个物理目录,那就没有必要再去为那个目录做虚拟目录了。当然,你有也可以这样做。假如你的目录的路径实在是太长,长到你无法忍受,想它短一点。你可以用建虚拟目录的方式。使它短些,轻易记住。例如:原来的目录http://mysite.com/directory1/directory 2/file.asp,你可以为它建一个虚拟的目录,http://mysite.com/directory2/file.asp。这样就方便多了了。
  
  Virtual Applications(虚拟应用程序)
  Virtual Applications 是一个独立于website的web applications,而它跟Virtual Directories相同,不一定是web root上的一个目录。可以是从其他的目录虚拟出来的。ASP不答应应用程序共享他们的application和session变量,换句话说,就是应用程序A不能访问应用程序B(包括web root,因为web root也是看作一个应用程序的根。)的application和session变量,他们是私有的。反之亦然。当你确信这个应用程序不需要与整个website、website上其他子目录上的ASP脚本共享application和session变量,或者你想在同样的内存空间里隔离一个进程来运行应用程序时。你使用Virtual Applications是准确的。
  要注重的一点是:在IIS 4.0里面的“新虚拟目录向导” 所建立的virtual directory(虚拟目录)缺省就是一个virtual application(虚拟应用程序)。要把它变回virtual directory的话,你可以在目录的“属性”里,选择“目录”标签,单击“卸载”。

  小心使用多个 Global.asa
  在一个website里面使用多个Global.asa,我们必须要注重,因为那是很轻易导致变量超出范围而丢失的。通常我们必须限制在整个website上的Global.asa的树木,在每一个应用程序的的根目录里面放一个。这是保持session和application变量比较好的方式,不至于它们会丢失。通过在各个目录上放置global.asa文件,我测试的asp文件,可以帮助我们理解它们的关系。

  例子,下面是一个website的设置。在这个website下面有两个目录。一个Virtual Application(虚拟应用程序)叫admin,一个Virtual Directory(虚拟目录)叫images。在每一个目录下有2个文件:global.asa和default.asp。每一个目录里的default.asp都是相同的,global.asa则根据不同的目录有所改变。
  这个是default.asp的内容:
<%
Response.Write "Session Application_Directory = <b>" &
Session("application_directory") & "</b><br>"
Response.Write "Session Virtual_Directory = <b>" &
Session("virtual_directory") & "</b><br>"
Response.Write "Session Directory = <b>" & Session("directory") & "</b><br>"
%>

website root上global.asa的内容:
SUB Session_OnStart
Session("virtual_directory") = "Executed"
Session("directory") = "Executed"
END SUB

当你用浏览器浏览default.asp时,得到的结果是:
Session Application_Directory =
Session Virtual_Directory = Executed
Session Directory = Executed

  Virtual directory(虚拟目录) images 上global.asa的内容是(把websiteroot上的global.asa轻微做修改):

SUB Session_OnStart
Session("virtual_directory") = "Virtual Directory"
Session("directory") = "Virtual Directory"
END SUB

  用浏览器浏览default.asp(images上的default.asp)时,得到的结果是:
Session Application_Directory =
Session Virtual_Directory = Executed
Session Directory = Executed

  虽然在这个目录上的global.asa文件里,我们为session变量赋了新的值。但是显示的仍旧是website root上global.asa所设的值。

Virtual Application(虚拟应用程序) Admin 上 global.asa的内容:

SUB Session_OnStart
Session("application_directory") = "Executed"
END SUB

  用浏览器浏览default.asp(admin上的default.asp)时,得到的结果是:
Session Application_Directory = Executed
Session Virtual_Directory =
Session Directory =

  正如你所看到的,Session("virtual_directory")和Session("directory") 的值不能从root web 那里“带”过来。

  Global.asa 参考
  Global.asa 文件是一个可选文件,用户可以在该文件中指定事件脚本,并声明具有会话和应用程序作用域的对象。该文件的内容给用户显示的,而是用来存储事件信息和由应用程序全局使用的对象。该文件的名称必须是 Global.asa 且必须存放在应用程序的根目录中。每个应用程序只能有一个 Global.asa 文件。
  Global.asa 文件只能包含如下内容:
  用程序事件(Application_OnStart、Application_OnEnd)
  会话事件(Session_OnStart、Session_OnEnd)
  <OBJECT> 声明
  TypeLibrary 声明
  假如包含的脚本没有用 <SCRIPT> 标记封装,或定义的对象没有会话或应用程序作用域,则服务器将返回错误。服务器会忽略已标记的但未被应用程序或会话事件使用的脚本以及文件中的 HTML 语句。
  可以用任何支持脚本的语言编写 Global.asa 文件中包含的脚本。假如多个事件使用同一种脚本语言,就可以将它们组织在一组 <SCRIPT> 标记中。
  当用户保存对 Global.asa 文件所做的更改时,在重新编译 Global.asa 文件之前,服务器会结束处理当前应用程序的所有哀求。在此期间,服务器拒绝其他哀求并返回一个错误消息,说明正在重启动应用程序,不能处理哀求。
  当用户当前的所有哀求处理完之后,服务器对每个会话调用Session_OnEnd 事件,删除所有活动会话,并调用 Application_OnEnd 事件关闭应用程序,然后编译 Global.asa 文件。接下来,用户的哀求将启动应用程序并创建新的会话,触发 Application_OnStart 和 Session_OnStart 事件。
  但是,保存 Global.asa 文件中所包含的文件的更改并不能使服务器重新编译 Global.asa。为了让服务器识别包含文件的改动,必须再保存一下Global.asa 文件。
  在 Global.asa 文件中声明的过程只能从一个或多个与Application_OnStart、Application_OnEnd、Session_OnStart 和Session_OnEnd 事件相关的脚本中调用。在基于 ASP 的应用程序中的 ASP 页中,它们是不可用的
返回类别: 教程
上一教程: 用ASPMAIL组件实现E_MAIL自动反馈
下一教程: 使用ASP+JMAIL进行邮件群发

您可以阅读与"准确使用ASP中的GLOBAL.ASA"相关的教程:
· XMLHTTP组件在ASP开发中的使用
· ASP进阶:VB中的模块,类,ACTIVEX与API的使用
· 使用ASP中的VB ACTIVEX.DLL文件
· ASP中使用Office2000中的图表控件
· 借助组件使用ASP连接INFORMIX全方案
    微笑服务 优质保证 索取样品