|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
(4) 删除虚拟应用程序 单击“Remove”按钮不会真正地删除Internet Services Manager中的该条目。而是把现有的虚拟应用程序转变为一个虚拟目录。这个目录有一个带有蓝色球的“文件夹”图标,该图标表示这并不是Web网站中一个真正的目录,而是对磁盘上另一个文件夹的一个重定向。对它进行的访问方法与创建它的虚拟应用程序一样(即使用一样的URL),但是不作为一个应用程序。换句话说,它不支持自己的Application对象,而是继续缺省Web网站的Application对象,或者是在该目录的父目录中的另一个应用程序的Application对象。 为了删除一个虚拟应用程序,可简朴地在Internet Services Manager中的对象上单击右键,在弹出的菜单中选择Delete。 (5) 应用程序存储的内容 ASP Application对象提供的全局存储空间可以用来存储下列内容: ・ 简朴变量,例如字符串和数字(存储为Variant,类似于ASP脚本变量)。 ・ Variant类型数组,一维或多维。 ・ 对一个COM对象实例的变量引用(类型于Variant)。 (6) Variant的定义 Variant是在VBScript脚本引擎中为ASP(和Internet Explorer)提供的唯一变量类型,与在VB和VBA中定义的数据类型 Variant相类似。与大多数常用的基本数据类型(例如字符串或整数)相比,尽管它不能使存储单元最高效地存储变量,需要进行额外的处理,但Variant提供许多用处。 从内部来Variant数据类型存储数值作为独立的子类型。它能自动地处理隐含的类型转变,答应使用如下的代码: strString = ”30” intInteger = 12 Response.Write strString & intInteger ‘Writes 3012 in the resulting page Response.Write strString + intInteger ‘Writes 42 in the resulting page 隐含的数据类型转变答应忽略HTML广西的值和列表控件是字符串的情况,并且假如需要的话可以把它们当成数字(假设字符串确实包含一个有效的数字)。也可以随意地做一些其他的事情,诸如使用VBScript的Len方式检查Request.Form集合中并不存在的一个值的长度。Len函数试图把从Request.Form的调用的值转变成一个字符串。假如该值丢失,返回空(Empty),转变为带有””的一个字符串,因此长度是零。 (7) VBScript数据类型及转变 也可以进行显式的数据类型转变。在VBScript中,VarType方式返回一个整数,表明Variant当前保存的子类型: Select Case VarType(varMyValue) Case 0: Response.Write “Empty (uninitialized)” Case 1: Response.Write “Null (no valid data)” Case 2: Response.Write “Integer” Case 3: Response.Write “Long integer” Case 4: Response.Write “Single-precision floating-point number” Case 5: Response.Write “Double-precision floating-point number” Case 6: Response.Write “Currency” Case 7: Response.Write “Date” Case 8: Response.Write “String” Case 9: Response.Write “Automation Object reference” Case 10: Response.Write “Error” Case 11: Response.Write “Boolean” Case 12: Response.Write “Variant (used only with items in arrays of Variants)” Case 13: Response.Write “Data-access Object” Case 17: Response.Write “Bytes” Case 8192: Response.Write “Variant Array” End Select 还有一些函数,如IsArray、IsDate、IsEmpty、IsNull、IsNumeric和IsObject,对于特定的子类型返回一个Boolean结果。一旦知道了数据的子类型,假如包含的数据合适的话,就可以将之转变成不同的Variant子类型。这对代码的透明性和检查变量是否包含合法值都是有用的,非法的转变将导致运行期错误,转变如下所示: blnBoolean = Cbool(varVariant) ‘Converts to a Variant of subtype Boolean bytByte = Cbyte(varVariant) ‘Converts to a Variant of subtype Byte curCurrency = CCur(varVariant) ‘Converts to a Variant of subtype Currency dtmDate = CDate(varVariant) ‘Converts to a Variant of subtype Date dblDouble = CDbl(varVariant) ‘Converts to a Variant of subtype Double intInteger = CInt(varVariant) ‘Converts to a Variant of subtype Integer ingLong = CLng(varVariant) ‘Converts to a Variant of subtype Long sngSingle = CSng(varVariant) ‘Converts to a Variant of subtype Single strString = CStr(varVariant) ‘Converts to a Variant of subtype String (8) JScript数据类型及转变 在JScript中,其他一些变量类型类似于VBScript,但是没有代表对象的Variant。所有值都是对象,类型是下列六种数据类型之一: ・ undefined:只有单个值,用于表明哀求中的变量没有声明和创建,或者若是隐含创建但还未分配任何值。类似于 VBScript的Empty。 ・ Null:变量不包含一个有效的值。类似于VBScript的Nothing。 ・ Boolean。 ・ String。 ・ Number。 ・ Object。 JScript提供了一个typeof函数,返回表示数据的类型的字符串,例如: StrString = ‘30’; IntInteger = 12; Response.Write(typeof(strString)); //Write ‘string’ in the resulting page Response.Write(typeof(intInteger)); //Write ‘number’ in the resulting page 每种数据类型都有toString方式和valueOf方式,toString方式将变量的值转为一个字符串返回,valueOf方式把变量的值作为它的原有数据类型返回。 (9) JScript的级联和加法问题 JScript在许多方面不同于VBScript,在一定程度上是因为没有“&”级联运算符可用。当使用加法运算符时,它先检查变量的数据类型以决定要做什么。假如两个变量都是数值,结果是数值的和。假如一个或两个是字符串,结果是字符串的级联: strString = ‘30’; intInteger = 12; Response.Write(intInteger + intInteger); //Writes 24 in the resulting page Response.Write(strString + intInteger); //Writes 3012 in the resulting page Response.Write(intInteger + strString); //Writes 1230 in the resulting page 假如进行加法的值超过两个,要看执行的顺序。下面的代码进行相应的示范: intInteger = 12; Response.Write(intInteger + intInteger + “<P>”); //Result is ‘24<P>’ Response.Write(“<P>” + intInteger + intInteger + “</P>”); ; &nbs p; //Result is ‘<P>1212</P>’ 在第一种情况下,两个数相加,结果被转变为一个字符串并与“<P>”字符串进行级联。在第二种情况下,第一个运算符是一个字符串和一个数的级联,所以数被转变为一个字符串。而后,所有的运算符都是级联运算符。为了避免这个问题,可以使用括号强制第一个运算符是两个数值的加法: Response.Write(“<P>” + (intInteger + intInteger) + “</P>”); ; &nbs p; //Result is ‘<P>24</P>’ 1. Web应用程序中的组件治理 在ASP中使用虚拟应用程序的第二个主要方面是:具有较好的对在脚本代码内实例化和执行的组件进行治理的能力。先不讨论有关它怎样进行工作以及为什么会如此有用的具体情况,在学习ASP组件的部分时再讨论相关内容。 这里异常简要地介绍在ASP网页(此ASP网页在该应用程序中)中使用组件时,如何对一个虚拟应用程序在Properties对话框(在Internet Services Manager中)进行设置。 在一个虚拟应用程序的Properties对话框的Home Directory页的底部,有两个组合框,为Execute Permissions和 Application Protection,如图3-9所示: 图3-9 Execute Permissions和Application Protection组合框 应用的保护和执行设置 因为在本章中,不讨论在一个Web网页内如何创建组件的实例,因此这里先列出这些选项,在创建应用程序时可能要对此进行设置。Execute Permissions 选项如表3-1所示: 表3-1 Execute Permissions的选项及说明 选 项 说 明 None 在这个虚拟应用程序中不能运行脚本或可执行文件。实际上,提供了禁止一个应用程序的迅速和简朴的方式 ScriptsOnly 只答应脚本文件(例如ASP、IDC或其他的)在这个虚拟应用程序中运行,不能运行可执行文件 Scriptsand Executables 答应任何的脚本和可执行文件在这个虚拟应用程序内运行 Execute Permissions选项控制可在该虚拟应用程序中执行的类型,而Application Protection选项影响可执行文件和组件运行的方法。在第1章中已经讨论过可用的选项,但是在这里再重复一次,Application Protection选项如表3-2所示: 表3-2 Application Protection的选项及说明 选 项 说 明 Low(IIS Process) 带有这种设置的ASP虚拟应用程序的所有可执行文件和组件运行在Web服务器的可执行文件(Inetinfo.exe)的进程(即内存空间)中。因此,假如可执行文件或组件之一失败的话,Web服务器处于危险状态。这提供了最快和以最少的资源执行的选项 Medium(Pooled) (缺省)带有这种设置的ASP虚拟应用程序的所有应用程序的可执行文件和组件是运行在DLLHost.exe的单个共享实例的进程(即内存空间)中。这就防止了Web服务器可执行文件(Inetinfo.exe)受可执行文件或组件失败的影响。然而,一个失败的可执行文件或组件可能引起DLLHost.exe进程失败,以及所有其他驻留其中的可执行文件和组件失败 High(Isolated) 带有这种设置的ASP虚拟应用程序的所有应用程序的可执行部分和组件是运行在DLLHost.exe的单个共享实例的进程(即内存空间)中,但是每个ASP应用程序都有自己的DLLHost.exe实例,该实例对该应用程序是独占的。这就防止了Web服务器可执行文件(Inetinfo.exe)受可执行文件或组件失败的影响,并防止虚拟应用的单个共享实例受另一个虚拟应用程序的一个可执行文件或组件失败的影响。Microsoft建议最多有十个这样的虚拟应用程序驻留在一个Web服务器上 3.2.2 ASP会话的定义 ASP会话引入了一个Web应用程序中粒度的下一层。ASP的Application对象可用来存储对于“正在运行此应用程序”的所有用户都是全局的和可访问的状态(即简朴变量、对象、数组等)。换句话说,用于响应这个应用程序内所有访问者的哀求的全部ASP代码能够对这些值进行访问(假设已经建立了一个有效的会话,稍后将看到)。 但是在多数情况下这还不够。需要具备存储指定给每个用户的值的能力,而不必通过给这些值分配名字指明其隶属于哪个用户。例如,下列值很可能弄乱应用程序的全局存储空间: MikeJones003PrefFGColor = “darkblue” MikeJones003PrefBGColor = “white” MikeJones003PrefLinkClolr = “green” PriscillaDelores001PrefFGColor = “red” PriscillaDelores001PrefBGColor = “darkgrey” ... etc. 从载入系统资源和要求一些代码访问每个用户的相应会话的角度来看,还有另外的不足之处。只要有访问者,该应用程序就一直存在,这意味着应用程序的全局存储空间需要不断增大,除非在用户离开该网站时采取步骤删除这些值。 在Web应用程序中提供用户层作用域 除了使用全局变量的存储以外,应该为每个访问者分配他们自己的私有变量存储空间,使其对指定访问者载入的所有页面都可用的。这种情况下,可以对每个变量使用一样的名字,使ASP代码异常简朴地得以实现。这些一样的代码对每个用户将透明地进行工作,因为访问的只是访问者拥有的私有存储区域: PrefFGColor = “darkblue” PrefBGColor = “white” PrefLinkColor = “green” 这就是Session对象产生的地方。 (1) 会话存储的内容 会话存储的内容对指定的访问者是全局的,而对其他访问者来讲是私有的,这使得ASP的会话异常有用。可以用来存储在 ASP Application对象中存储的一样类型的数据,即: ・ 简朴变量,例如字符串和数值(像所有的ASP脚本变量相同存储为Variant)。 ・ Variant数组,一维或多维。 ・ 对一个COM对象的实例的变量引用(犹如Variant)。 (2) 会话带来的问题 会话提供了一个存储每个用户特定的值的方式。然而有几个意想不到的问题要注重: ・ 记住一些浏览器和Web服务器对URL、路径和文件名的大小写形式是敏感的(例如Navigator和基于UNIX/Linux的服务器)。假如把一个超级链接放置在网页的一个URL上,并且它们不是同样的书写形式,则在浏览器中被认为是不一样的。同样,假如路径和文件名的书写形式不是一样的,则浏览器认为是不同的路径或文件。对于在服务器上的定位资源来讲,这并不重要,因为IIS对书写形式不敏感,可以接受大写形式和小写形式的任何组合,并返回书写形式不同的具有一样字符的文件。然而,假如一个cookie已经指定了一个路径,而且与在超级链接中所指定的路径在书写形式上不同,浏览器可能不会把它以及相应目录的页面一起返回给服务器。这有可能找不到依靠于这个cookie的一个用户会话,并且Session对象将不会在作用域中(即其中的任何变量都是不可用的)。因此,在所有的目录和网页名字中,坚持都采用小写形式或者是比较明显的混合字母形式,是一个好办法。 ・ 在IIS和ASP的早期版本中,对于嵌套的应用程序还有一些小的“Bug”,有时,当用户离开嵌套的ASP虚拟应用程序并返回到缺省的ASP应用程序层时,与嵌套应用程序内部已经定义的局部变量一样的名字的任何全局变量不能重新显现。还有,当会话使用Session.Abandon方式(稍后将会看到)终止时,global.asp文件中的代码将执行失败。在ASP 3.0中已经解决了这些问题。 ・ 记住会话依靠于cookie。假如访问者已经禁止使用cookie或者浏览器不支持cookie,将不能启动一个会话,并且不能访问Session对象。 (3) 禁止会话 虽然状态提供了有益环境,但让用户门户大开。假如不需要保留状态,可以禁止会话以节约计算机的处理时间。例如,在一个不需要跟踪访问者或不需要为访问者保留全局值的Web网站上,可以防止会话启动,通过在Internet Services Manager中设置属性,或为不需要状态的独立网页增加代码(稍后将看到)。 为了禁止整个Web网站的所有会话,可编辑缺省Web网站应用程序的属性。为了禁止一个指定应用程序的会话,可编辑相应虚拟应用程序的属性。打开相应的应用程序的Properties对话框,在Home Directory页上单击Configuration按钮,如图3- 10所示: 图3-10 Home Directory页 在出现的Configuration对话框中,打开App Option。这里可以答应或禁止整个应用程序的会话(在本例中是整个缺省Web 站点),也可以修改缺省的会话Timeout值。在图3-11中可以看到Timeout设置为20min。在ASP的早期的版本中这是缺省值,可根据要求设置相应的值(在ASP 3.0中,缺省值是10min)。 图3-11 App Options页 假如要禁止一个指定网页的会话,同时答应它们在同一个应用程序的其他网页中创建和使用,可为该页面增加一条ASP处理指令。它跟在指定缺省语言的语句后(假如没指定一个缺省语言,可单独使用该指令): <%@LANGUAGE=”VBScript” ENABLESESSIONSTATE=”False”%>到此为止,大致介绍了ASP应用程序和Session对象的一些情况,下面具体地进行讨论。 返回类别: 教程 上一教程: 提高ASP性能的最佳选择(续二) 下一教程: ASP组件高级入门与精通系列之二 您可以阅读与"ASP 3.0高级编程(七)"相关的教程: · ASP 3.0高级编程(三十九) · ASP 3.0高级编程(八) · ASP 3.0高级编程(三十三) · ASP 3.0高级编程(三十) · ASP 3.0高级编程(二十九) |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |