快捷搜索:

ASP教程_百度文库

ASP教程_百度文库

  语法错误是经常碰到的错误,它是由不正确的脚本语法导致的。例如,命令拼写错误或传递给函数的参数不正确都将产生错误。语法错误可能导致您的脚本不能运行。

  运行时错误是脚本在执行过程中脚本指令试图执行不可能的动作而导致的。例如,下面的脚本中包含一个被零除(一种非法的数学运算)的函数,将产生运行时错误:

  在本模块中,通过创建自己的ASP页(.asp文件),您将学习一些ASP的基本知识。在这些课程中用到的示例文件,可以在localhost Web服务器的Tutorial目录(C:\WINNT\Help\iis\htm\tutorial)中找到。请将您创建的文件也保存到Tutorial目录中。

  其中ScriptingLanguage就是您所设置的页的主脚本语言。如果对某页进行了设置,那么该页将忽略在应用程序中对所有页的全局设置。

  注意要将不支持hod语法的语言作为主脚本语言使用,必须先创建LanguageEngines注册表键。详细信息,请参阅注册表。

  为了防止计算机黑客猜中SessionID cookie并获得对合法用户的会话变量的访问,Web服务器为每个SessionID指派一个随机生成号码。每当用户的Web浏览器返回一个SessionID cookie时,服务器取出SessionID和被赋予的数字,接着检查是否与存储在服务器上的生成号码一致。若两个号码一致,将允许用户访问会话变量。这一技术的有效性在于被赋予的数字的长度(64位),此长度使计算机黑客猜中SessionID从而窃取用户的活动会线。

  从一个远程服务器对数据库的更新可能因为网络延迟或故障而导致事务延迟或终止。因为事务的所有部分都必须提交,所以应用程序将可能挂起,等待远程服务器的提交或终止消息,也可能由于无法发送数据库更新而导致事务被放弃。

  对于必须同时完成的更新,正确的做法是在事务的所有参与者都能够提交之前,终止事务或推迟完成事务。例如,航空公司的定票程序应该同时完成对客户的银行帐号计入借方和对航空公司的银行帐户计入贷方。如果一个更新属于事务整体的一部分,但可能晚于其他更新,您可能不希望让客户等待整个更新过程的完成。例如,机票预定事务可能也要向食品供应商发送食品订单或更新客户的旅程津贴。这些操作虽然也必须完成,但可以晚一些。

  要为变量赋予应用程序作用域,将该变量存储到Application对象中即可,方法是为该对象的已命名条目指派一个值。例如,以下命令将一个应用程序特定的问候语存储到Application对象中:

  除了SQL INSERT命令以外,您也可以使用SQL UPDATE和DELETE命令更改和删除数据库信息。

  仅当需要时,才能为对象赋予会话或应用程序作用域。因为在会话或应用程序结束运行之前,这些对象会一直保留。它们会占用内存或数据库连接等资源,这些资源可能会在其他方面更有用。另外,组件的线程模型会影响您从中所创建的对象的性能,尤其是那些具有会话或应用程序作用域的对象。

  在很多情况下,比创建应用程序或会话作用域对象更好的方法就是利用会话或应用程序作用域变量,将信息传递给在网页一级创建的对象。例如,不要为ADO Connection对象赋予会话或应用程序作用域,因为它创建的连接会在相当长的一段时间一直保持打开而此时脚本已不再使用ODBC连接共享。但您可以将ODBC连接字符串存储在Session或Application内建对象中,并在网页上从创建的Connection对象实例中获取该字符串。通过这种方式,您可以存储在会话或应用程序名称空间中频繁使用的信息,但只有在需要时才创建用该信息的对象。关于作用域变量的详细信息,请参阅“使用变量和常量”。

  如果正在使用JScript命令,可以插入花括号指示语句块直接进入ASP命令,而不用考虑它是否夹杂着HTML标签和文本。例如:

  事务不能跨越多个ASP页。如果一个事务需要来自多个组件的对象,则须将使用这些对象的操作组合在一个ASP页中。例如,假定有一个组件用于更新工资单数据库,还有一个组件用于更新人力资源数据库中的员工记录。为了记录一个员工的新的工资信息,您需要编写这样一个脚本,该脚本在一个事务环境中调用这两个组件,一个用于更新工资单数据库,另一个用于更新人力资源数据库中的员工等级。

  总的来说,应该尽量避免在一个循环内部创建对象。如果无法避免,您应该手工释放被对象使用过的资源。如果Connection对象仅被创建一次,且数据资源的物理连接在每个循环中被打开然后关闭,那么上例将会正常运行:

  ASP使用定界符%和%括入脚本命令。您可以在定界符中括入任何命令,只要这些命令对正在使用的脚本语言有效。下面的例子展示了包含脚本命令的简单的HTML页:

  VBScript函数Now返回当前的日期和时间。Web服务器处理该页时,会使用当前的日期和时间替换%= Now %并且将该页返回到浏览器:

  当一个运行时错误中断了ASP脚本的执行时,Microsoft脚本调试程序自动启动,显示.asp文件,将语句指针指向导致错误的行,并产生错误消息。这种调试方式称为实时(JIT)调试,计算机将暂停程序的执行。必须用编辑程序纠正这些错误,保存所做的修正,然后再运行脚本。

  ASP支持共享文件数据库(如Microsoft ? Access或Microsoft ? FoxPro)作为有效的数据源。尽管在ASP文档中的一些示例使用共享文件数据库,但我们建议只将此类数据库引擎用于开发或有限的配置方案。共享文件数据库可能无法很好地适用于可满足高需求、高质量的Web应用程序的客户-服务器数据库。

  为了参与一个事务,组件必须在MTS包中登记,而且必须被配置为需要事务。例如,如果您的脚本是通过调用两个组件来处理订单的,一个更新库存数据库,另一个更新付款数据库。那么,这两个组件就要在同一个事务环境中运行。Transaction Server保证如果任意一个组件失败,那么将不会有数据库被更新。某些组件不需要事务;例如,Ad Rotator组件。

  连接方案-您可以选择TCP/IP套接字和命名管道的方法访问远程的SQL Server数据库。当使用命名管道时,因为在建立连接之前,数据库用户必须被Windows NT确认,所以对只有适当的SQL Server访问身份而在该计算机上没有Windows NT用户帐号的用户可能会被拒绝访问命名管道。作为一种替代方案,使用TCP/IP套接字的连接可直接连接到数据库服务器,而不必通过使用命名管道的中间计算机。因为使用TCP/IP套接字连接可直接连接到数据库server,所以通过SQL Server的确认,用户就可以获得访问权,而不必通过Windows NT的确认。

  如果您熟悉其他脚本语言,例如REXX或Perl,您可获取和安装相应的脚本引擎,这样就可以使用您熟悉的脚本语言了。Active Server Pages是ActiveX脚本的宿主。要使用一种语言,必须安装脚本引擎,该引擎必须遵循ActiveX脚本标准并作为一个COM(组件对象模型)对象驻留在Web服务器上。

  SessionID与钥匙很相似,当会话期间用户与应用程序交互时,ASP可以将用户信息存储在服务器的一个“保险箱”中。正象用钥匙能存取保险箱中物品一样,通过在HTTP请求标题中发送的用户SessionID cookie,就能够对该“保险箱”中的内容进行访问。每当ASP收到一个页请求时,就检查HTTP请求标题,以获得SessionID cookie。

  变量的作用域即生命期,决定哪些脚本命令可访问变量。在过程内部声明的变量具有局部作用域。每执行一次过程,变量就被创建然后消亡。而过程外部的任何命令都不能访问它。在过程外部声明的变量具有全局作用域,其值能被ASP页上的任何脚本命令访问和修改。

  声明变量时,局部变量和全局变量可以有相同的名称。而改变其中一个的值并不会改变另一个的值。如果没有声明变量,则可能不小心会改变一个全局变量的值。例如,以下脚本命令返回值1,虽然有两个名为Y变量:

  ASP主脚本语言是用来处理在分界符%和%内部的命令的语言。默认时,主脚本语言是VBScript。您可以将任何一种具有脚本引擎的脚本语言作为主脚本语言。您可以逐页设置主脚本语言,也可以在ASP应用程序中设置所有页的主脚本语言。

  要设置单个页的主脚本语言,可将%@ LANGUAGE %指令添加到.asp文件的开头。该指令的语法是:

  要想从数据库表中删除特定的记录,可使用SQL DELETE命令。下面的脚本从Customers表中删除了所有姓Smith的行:

  在过程外部,不必使用Response.Write将内容送回用户。不在脚本定界符内部的内容被直接发送给浏览器,浏览器将其格式化和显示。例如,下面的脚本过程与上面的脚本输出相同:

  默认情况下,缓冲区对于ASP应用程序是关闭的。可以使用Internet服务管理器为整个ASP应用程序打开缓冲区。详细信息,请参阅配置ASP应用程序。

  通过代理服务器,应用程序可以发送页给用户。代理服务器代替用户浏览器从Web站点请求网页。代理服务器缓存HTML页以便相同页的重复请求能够快速有效地返回给浏览器。代理服务器执行请求并缓存网页,并减轻网络和Web服务器的负荷。

  脚本是一系列的命令和指令。与HTML标签不同,script命令指示Web服务器执行操作,而HTML标签只是简单地格式化文本或读取图形、视频及音频文件。Script命令可以在变量中存储用户名,在返回到浏览器的页中显示用户名或将用户名存储在数据库中。

  脚本命令通过定界符与文本区别开来。定界符是字符或一串字符,它标志单元开始或结束。HTML使用定界符棗小于号()和大于号()括入HTML标签。

  相似的,要从带索引的cookie中获取关键字值,可使用关键字名。例如,如果用户发出下列的HTTP请求:

  应用程序作用域对象。一般来说,应避免在Application对象中放置对象。如果确需使用应用程序作用域对象,您会从结合了FreeThreadedMarshaler的带有Both标记的对象中获得最佳性能。您既可以用OBJECT标记也可以用Server.CreateObject方法在Application对象中存储带有Single、Free或Both标记的对象。您必须用单元线程对象来使用OBJECT标记。

  ActiveX组件作为基于Web的应用程序部分在Web服务器上运行。组件提供了应用程序的主要功能(如访问数据库),这样就不必创建或重新创建执行这些任务的代码。

  可以使用Database Access组件在应用程序中访问数据库。然后可以显示表的整个内容、允许用户构造查询以及在Web页执行其他一些数据库查询。

  如果希望将ODBC驱动程序加入到连接共享中,则必须配置数据库驱动程序并在Windows NT注册表中设置驱动程序的CPTimeout属性。当ODBC断开连接时,连接被存入池中,而不是被断开。CPTimeout属性决定在连接池中的连接保留的时间长度。如果在池中连接保留的时间比CPTimeout设置的时间长,则连接将被关闭并且从池中删除。CPTimeout的默认值是60秒。

  如果您只希望cookie在当前的用户会话中被使用,则只需向浏览器发送cookie。但是,如果要在用户已经终止或重新启动浏览器之后确认用户,就必须强制浏览器将cookie存储在计算机的硬盘上。要保存cookie,可使用Response.Cookies的Expires属性并将日期设置为此后的某一天:

  为了在一个负载被平衡的站点上使用ASP会话管理,必须保证用户会话的所有请求都被定向到同一个Web服务器。一种做法是编写一个Session_OnStart过程,此过程使用Response对象将浏览器重定向到运行该用户会话的Web服务器。如果在您的应用程序页中的所有链接都是相对的,那么以后对某一页的所有请求都将被路由到同一个服务器。

  对于一个特定的会话,如果您想设置一个小于默认超时值的超时值,可以设置Session对象的Timeout属性。例如,下面这段脚本将超时值设置为5分钟。

  您也可以通过Session对象的Abandon方法显式结束一个会话。例如,在表格中提供一个“退出”按钮,将按钮的ACTION参数设置为包含下列命令的.asp文件的URL。

  可以在Session对象中存储用户的首选项,然后通过访问首选项来决定将哪一页发送给用户。例如,可以允许用户在您的应用程序的第一页中指定纯文本版本的内容并将这一选择应用到用户此后对该应用程序的所有页的访问上。

  可以使用Request对象访问任何用HTTP请求传递的信息,包括从HTML表格用POST方法或GET方法传递的参数、cookie和用户认证。Request对象使您能够访问发送给服务器的二进制数据,如上载的文件。

  可以使用Response对象控制发送给用户的信息。包括直接发送信息给浏览器、重定向浏览器到另一个URL或设置cookie的值。

  Active Server Pages提供内建对象,这些对象使用户更容易收集通过浏览器请求发送的信息、响应浏览器以及存储用户信息(如用户首选项)。本文简要说明每一个对象。有关每个对象的详细信息,请参阅内建对象参考。

  在“创建SQL Server的新数据源”对话框中,设置默认数据库、存储过程设置的驱动程序和ANSI标识,然后单击“下一步”。(要获取详细信息,请单击“帮助”。)

  在对话框(同样名为“创建SQL Server的新数据源”)中,选择一种字符转换方法,然后单击“下一步”。(详细信息,请单击“帮助”。)

  注意在将ConnectionTimeout属性合并到数据库应用程序之前,一定要确保连接提供程序和数据源支持该属性。

  必须将Web服务器配置为接受或需要客户资格,然后才能通过ASP处理客户资格;否则,ClientCertificate集合将为空。

  本部分概述了Active Server Pages(ASP)中的ActiveX组件。有关这些组件的完整介绍及其对象、属性和方法的列表,请参阅可安装的ASP组件。

  使用ASP进行计算的Web可转化为有形的利益,它使Web供应商能够提供交互的商业应用而不仅仅是发布内容。例如,旅行社能够比公布航空时刻表做得更多;用ASP脚本可以让客户察看现有的航班、比较费用并预定座位。

  包含在Windows NT Option pack中的Microsoft Transaction Server(MTS)可以降低在服务器上构造程序的复杂性和费用。MTS可以解决开发那些保密性强的、可分级的以及可靠的Web应用程序的复杂性问题。

  逻辑错误通常可能是潜在和难以检测的。如果有因键入错误或程序逻辑流程错误引起的逻辑错误,脚本可能会成功运行,但产生的结果却是错的。例如,一服务器端脚本计划对一个值列表排序,如果本应使用“”符号比较数值,但却使用了“”符号,那么将返回不正确的排序结果。

  注意由于性能和可靠性的原因,我们极力推荐您使用“客户-服务器数据库引擎”配置由这样一种Web应用程序驱动的数据,这些Web应用程序必须满足10个以上的用户的同时访问。尽管ASP可以使用任何ODBC兼容的数据库,但它是为使用客户-服务器数据库而设计的,而且经过了严格的测试,这些数据库包括Microsoft ? SQL Server、Oracle等。

  使用Internet Explorer请求.asp文件。如果该文件包含错误或人为添加的停止执行语句,那么Microsoft脚本调试程序将自动启动,显示该脚本,并且指出错误来源。

  调试服务器端脚本时,您可能会碰到各种类型的错误。其中的某些错误使脚本无法正确执行、程序停止执行或返回错误结果。

  对.asp文件和其他包含脚本的文件(如.htm文件等)所在的虚目录允许“读”和“脚本”权限。

  对包含.asp文件和其他需要“执行”权限才能运行的文件(如.exe和.dll文件等)的虚目录允许“读”和“执行”权限。

  Microsoft? Active Server Pages(ASP)是服务器端脚本编写环境,使用它可以创建和运行动态、交互的Web服务器应用程序。使用ASP可以组合HTML页、脚本命令和ActiveX组件以创建交互的Web页和基于Web的功能强大的应用程序。ASP应用程序很容易开发和修改。

  包含HTML表格的Web页可使用户远程查询数据库并且检索特定的信息。用ADO您可以创建非常简单的脚本来收集用户表格信息、创建自定义的数据库查询以及将信息返回给用户。使用ASP Request对象,您可以检索输入到HTML表格的信息并将这些信息合并到SQL语句中。例如,下面的脚本模块将HTML表格提供的信息插入表格中。此脚本用Request对象的Form集合收集用户信息。

  由于变量没有显式声明,以下的脚本命令将返回2。当过程调用将Y设置为2时,脚本引擎认为该过程是要修改全局变量:

  最好从脚本命令中将HTML文本返回到浏览器,而不用脚本命令散布HTML文本。要将文本返回到浏览器,请使用ASP的内建对象Response。下面的例子可以产生与前一个脚本同样的结果:

  并不是所有的浏览器都支持cookie。即便使用支持cookie的浏览器,有些用户也可能喜欢关闭cookie支持。如果您的应用程序需要响应不支持cookie的浏览器,就必须使用ASP会话管理。

  如果您不使用ASP会话管理,就必须编写您自己的机制以便在您的应用程序页之间传递信息。有两种常规的方法可完成该任务:

  经常建立和中断数据库连接的Web数据库应用程序可能会降低数据库服务器的性能。ASP支持用ODBC 3.5的共享特性有效管理连接。连接共享维持打开的数据库连接并管理不同的用户共享该连接,以维持其性能和减少空闲的连接数。对每一个连接请求,连接池首先确定池中是否存在空闲的连接。如果存在,连接池返回连接而不是建立到数据库的新连接。

  当Web服务器将文件返回给浏览器时,会同时告诉浏览器文件中包含的内容的类型。这使浏览器能够决定是否它能自己显示文件或必须调用另一个应用程序。例如,如果网络服务器返回Microsoft Excel表格,则浏览器必须调用Microsoft Excel的副本显示此页。Web服务器通过将文件的扩展名映射到MIME类型表来识别文件类型。

  一旦您在Session对象中存储了对象,您就可以从应用程序的任何页中访问该对象。下面的语句使用上例中由OBJECT标记创建的对象实例:

  尽管缓存对HTML页都能很好运行,但对包含动态生成信息的ASP页则不尽人意。例如,报告股市行情或显示大量业务的存货清单需要提供即时信息。一小时前的信息对目前来讲是很不准确的。如果应用程序返回个人的信息,例如,自定义的主页,希望用户不能看到另一个用户的个人信息。

  默认情况下,ASP命令代理服务器自己不能缓存ASP页(尽管缓存图像、位图、小型应用程序,和其他缓存页上的参考项)。可以使用Response.CacheControl属性设置缓存控制HTTP标题字段允许缓存某一页。Response.CacheControl的默认值是字符串Private,它避免代理服务器缓存此页。要允许缓存,可将缓存控制标题字段设置为Public:

  通过使用与项目关联的索引或号码也可以访问项目。例如,下面的表达式检索存储在Session对象的第二个存储槽中的信息并且返回“Woo”:

  一个成功的数据库应用程序都使用Connection对象建立链接并使用Recordset对象处理返回的数据。通过“协调”两个对象的特定功能,您可以开发出几乎可以执行任何数据处理任务的数据库应用程序。例如,下面的服务器端脚本使用Recordset对象执行SQL SELECT命令。SELECT命令检索一组基于查询限制的信息。查询也包含SQL WHERE子句,用来缩小查询的范围。此例中,WHERE子句将查询限制为所有的Customers数据库表中包含的姓Smith的记录。

  要为变量赋予会话作用域,将该变量存储到Session对象中即可,方法是为该对象的已命名条目指派一个值。例如,以下命令将两个新的变量存储到Session对象中。

  创建一个包含表格定义且传送信息给自身的.asp文件较复杂,但却是有很强功能的处理表格的方法。这一过程在验证表格输入中演示。

  ASP Request对象提供了两种集合,在很大程度上简化了检索附加在URL请求上的表格信息的任务。

  QueryString集合获取作为跟在请求的URL的问号后面的文本传递给Web服务器的值。通过使用HTTP GET方法或手工将表格的值添加到URL,表格的值可以被附加在请求的URL之后。

  用户请求了一个应用程序的.asp文件,并且该应用程序的Global.asa文件使用OBJECT标签创建带有会话作用域的对象的实例。有关使用OBJECT标签创建带有会话作用域的对象的实例的详细信息,请参阅使用组件。

  如果用户在指定时间内没有请求或刷新应用程序中的任何页,会话将自动结束。这段时间的默认值是20分钟。可以通过在Internet服务管理器中设置“应用程序选项”属性页中的“会话超时”属性改变应用程序的默认超时限制设置。应依据您的Web应用程序的要求和服务器的内存空间来设置此值。例如,如果您希望浏览您的Web应用程序的用户在每一页仅停留几分钟,就应该缩短会话的默认超时值。过长的会话超时值将导致打开的会话过多而耗尽您的服务器的内存资源。

  注意如果数据库驻留在远程服务器上,请与服务器管理员联系,获取附加的配置信息;下面的过程使用SQL Server的ODBC默认的设置,它可能不适用于您的硬件配置。

  ASP也提供创建无会话页的功能,您可以使用该功能将会话的创建时间推迟到用户访问一个需要会话跟踪的ASP页时。

  Content Linking组件使在应用程序中提供.asp文件的逻辑导航变得简单易行。不用在许多.asp文件中维护URL引用,而只需在易于编辑的文本文件中指定.asp文件的次序组织。

  Collaboration Data Objects for NTS组件提供Web应用程序所使用的邮件对象。这个库使您能够简单快捷地在应用程序上添加收发邮件的功能。您可以创建可编程邮件对象,然后利用它们的属性和方法来满足应用程序的需要。

  在这个例子中,脚本也在包含表格的同一Verify.asp文件中。表格通过在ACTION属性中指定Verify.asp向自身传送信息。

  您也可以创建客户端脚本来检验用户是否输入了有效的信息。验证用户在Web浏览器上的输入除了更迅速地向用户提示表格项错误外,还可以减少Web服务器的网络流量。下面的脚本运行在用户的Web浏览器上,在将信息提交到Web服务器之前,验证用户信息。

  但是,不同帧的多个请求的处理方式最终还要取决于用户Web浏览器的配置。某些Web浏览器可能不理会您的.asp文件的无会话配置,照样串行处理请求。

  千万不要轻视正确配置安全设置的重要性。如果不正确配置安全设置,不但会使您的ASP应用程序遭受不必要的篡改,而且会妨碍正当用户访问您的.asp文件。

  Web服务器提供了各种方法来保护您的ASP应用程序免受未授权的访问和篡改。在您读完本主题下的安全信息之后,请花一定的时间仔细检查一下您的Windows NT和Web服务器安全性文档。详细信息,请参阅安全性。

  ActiveX Data Objects (ADO)是一项容易使用并且可扩展的将数据库访问添加到Web页的技术。可以使用ADO去编写紧凑简明的脚本以便连接到Open Database Connectivity (ODBC)兼容的数据库和OLE DB兼容的数据源。如果您是一个对数据库连接有一定了解的脚本编写人员,那么您将发现ADO命令语句并不复杂而且容易掌握。同样地,如果您是一个经验丰富的数据库编程人员,您将会正确认识ADO的先进的与语言无关性和查询处理功能。

  注意因为.asp文件需要额外的处理,请不要将所有的HTML页都转换为ASP页。应该只将包含脚本命令的文件转换为.asp文件。.asp和.htm文件可以放置在相同的目录中。

  使用任何的文本编辑器都可以创建.asp文件。使用那些带有ASP增强支持的编辑器将更能提高效率,如Microsoft? Visual InterDev?。如果您从未使用过HTML,请考虑先使用Microsoft FrontPage。使用FrontPage创建文档和格式化文本就象使用文字处理工具一样简单。接下来还可以使用Insert Script命令在FrontPage创建的HTML页中加入简单的ASP命令。

  使用VBScript和JScript时,在打开定界符之后和关闭定界符之前使用空白字符更容易阅读命令。下面的命令都是合法的:

  ASP将一个语句的关闭定界符与下一个语句的打开定界符之间的空白字符删除。要保留两个语句间的空白字符,比如在句子中显示变量值的时候,请使用HTML不间断空符()。例如:

  设计一个能经得起考验的Web数据库应用程序(例如为几千个客户服务的联机购物应用程序)的最大挑战,在于如何合理地管理数据库连接。打开并且保持数据库连接,即使在没有信息传输时,也会严重耗费数据库服务器的资源并且可能会导致连接性问题。设计良好的Web数据库应用程序将回收数据库连接并能够补偿由于网络堵塞造成的延迟。

  由ASP存储在用户的Web浏览器中的每个cookie都包含路径信息。当浏览器请求的文件的位置与在cookie中指定的路径相同时,浏览器自动将cookie转发给服务器。默认情况下,cookie路径与包含最初生成cookie的.asp文件的应用程序名对应。例如,如果在名为UserApplication的应用程序中的.asp文件生成了一个cookie,那么每当用户的Web浏览器在此应用程序中获取文件时,除其他在路径/UserApplication下的cookie外,浏览器还要将该cookie转发给服务器。

  注意您可以使用调试工具查看脚本并找到错误所在,但是不能直接编辑脚本。要想改正错误,必须用编辑器编辑脚本然后保存,再运行脚本。

  事务是整体成功或失败的操作。事务处理用于对数据库进行可靠地更新。在对数据库进行许多相关更改或同时更新多个数据库时,要保证所有更改都被正确执行。如果这些更改中的任何一个失败,都需要恢复数据库表的原始状态。

  用Connection对象的Execute方法,您可以发出结构化查询语言(SQL)查询数据库源并检索结果。SQL是用于与数据库通讯的工业标准语言,它有许多命令可用来检索和更新信息。

  下面的脚本使用Connection对象的Execute方法在SQL INSERT命令的表格中发出查询,该命令将数据插入特定的数据库表格。在下面的示例中,脚本将名称Jose Lugo插入名为Customers的数据库表中。

  您应将此脚本置于.asp文件的第一行,位于其他脚本之前。默认情况下,若省略此标记,则启用会话跟踪。

  无会话ASP页通过消除潜在的耗时会话操作,改善服务器的响应性能。例如,考虑以下情况,ASP页包含某个帧集中的两个HTML帧,帧1和帧2。帧1包含一个执行复杂脚本的.asp文件,而帧2包含一个简单的.html文件。因为ASP顺序执行(即串行执行)会线的脚本被执行之前,您将不会看到帧2的内容。但是,如果您将帧1设置为无会话,则ASP请求将不再被串行处理,浏览器不必等待执行完帧1的内容就可以处理帧2的内容。

  在以前版本的ASP中,一些组件在文件中提供常量定义,每个使用那些组件的ASP文件必须包含该文件。用#include指令来包含常量定义的用法仍被支持,但使用类型库通常更方便并且能使脚本更易于升级。在以后版本的ASP中,组件可能将不再提供常量定义文件。

  可以使用Connection对象的Close方法终止Connection对象和数据库之间的连接。下面的脚本打开连接,然后将其关闭:

  您也可以编写在应用程序启动或结束时运行的脚本。有关定义应用程序启动事件或应用程序结束事件的信息,请参阅Global.asa参考。

  一个新用户请求访问一个URL,该URL标识了某个应用程序中的.asp文件,并且该应用程序的Global.asa文件包含Session_OnStart过程。

  当您在请求Web浏览器使用的先前的脚本时,调试程序启动并自动显示.asp文件,而且语句指针会指示stop语句的位置。一定要记住从交付使用的.asp文件中删除Stop语句。

  当一个错误发生并且很难找到错误的根源时,可使用预设断点的调试方法。断点将脚本暂停在特定一行。可以在脚本中有疑问处设置一个或多个不同的断点,然后使用调试器去改正脚本中设置的变量或属性的值。当您纠正这些错误之后,可以清除断点以便您的脚本能不间断地运行。

  请用Microsoft脚本调试程序打开脚本,设置断点。然后用Web浏览器请求此脚本。当执行到脚本中含有断点的行时,计算机启动脚本调试程序,并且语句指针会指在设置了断点的行上。

  默认情况下,Web服务器返回HTML和在处理ASP页时的脚本处理结果。但是,您可以设置Response对象的Buffer属性以便在向用户发送任何内容之前,先处理页上的所有的服务器脚本命令。

  MyInfo组件跟踪Web站点所有者的个人信息,如经营Web站点的组织名称和地址及Web站点的设置,还有Web站点是否有guest book。

  在单个用户需要重复使用跨页连接的情况下,使用Session对象连接比使用Application对象更好。

  要想更好地使用连接池,就应尽快地关闭数据库连接。默认情况下,当脚本执行完以后,连接将被终止。当不再需要连接时将其关闭,就可以减少对数据库服务器的要求并可以使其他用户能够使用该连接。

  Microsoft JScript仅当变量为本地过程变量时才需声明,但在使用所有变量前声明它们是一种好的脚本书写习惯。要声明一个变量,请使用var语句。例如:

  cookie可有多个值;这样的cookie被称为一个带索引的cookie。每个cookie值都被赋予一个关键字;您可以设置一个特定的cookie关键字的值。例如:

  应用程序根目录的改变。ASP应用程序的根目录在您的Web站点上可以是物理目录。以前,根目录必须映射为虚拟目录。现在可以用Internet服务管理器指示ASP应用程序的根目录。请参阅创建应用程序。必须将.asp文件置于应用程序树中,Web服务器才能检测文件的改变并且自动重装它们。

  尽管在本主题中讨论的ASP集合与Visual Basic的Collection对象非常相似,但还是有些不同。ASP集合支持Count属性和Item方法,但不支持Add和Remove方法。

  对象的作用域决定哪些脚本可以使用该对象。默认情况下,当您创建对象实例时,该对象具有页作用域。同一ASP页中的任何脚本命令都能使用该页作用域的对象;当ASP页送回客户端时,该对象即被释放。对大多数对象来说,推荐的作用域是页作用域。您可以改变一个对象的作用域,使其可被其他页的脚本使用。本主题将解释如何使用页作用域的对象以及如何改变对象的作用域。

  如果某个现有的cookie具有关键字值但Response.Cookies未指明一个关键字的名称,则该关键字值将被删除。类似的,如果某个现有的cookie没有关键字值但Response.Cookies指明了关键字的名称和值,则现有的cookie值将被删除,并生成新的key-value对。

  您可以通过为单独的文件和目录应用NTFS访问权限来保护ASP应用程序文件。NTFS权限是Web服务器安全性的基础,它定义了一个或一组用户访问文件和目录的不同级别。当拥有Windows NT有效帐号的用户试图访问一个有权限限制的文件时,计算机将检查文件的访问控制表(ACL)。该表定义了不同用户和用户组所被赋予的权限。如果用户的帐号具有打开文件的权限,计算机则允许该用户访问文件。例如,Web服务器上的Web应用程序的所有者需要有“更改”权限来查看、更改和删除应用程序的.asp文件。但是,访问该应用程序的公共用户应仅被授予“只读”权限,以便将其限制为只能查看而不能更改应用程序的Web页。

  @TRANSACTION指令必须在一页中的第一行,否则将产生错误。必须将该指令添加到需要在事务下运行的每一页中。当脚本处理结束时,当前事务即告结束。

  会话作用域对象。带有Both标记的对象将为您提供最佳性能。用单线程或单元线程对象会导致Web服务器将会话锁定在一个线程上。自由线程对象不会锁定会话,但运行速度不高。在Session对象中,您可以用OBJECT标记或Server.CreateObject方法存储对象。

  如果您已安装了SDK文档,请参阅“创建ASP组件”,您将会获得有关线程模型及其隐含的组件性能的详细信息。(在Windows 95及其后续版本中SDK文档不可用。)

  如果您是位HTML编写人员,您将发现ASP脚本提供了创建交互页的简便方法。如果您曾想从HTML表格中收集数据,或用顾客的姓名个人化HTML文件,或根据浏览器的不同使用不同的特性,您会发现ASP提供了一个出色的解决方案。以前,要想从HTML表格中收集数据,就不得不学习一门编程语言来创建一个CGI应用程序。现在,您只要将一些简单的指令嵌入到您的HTML文件中,就可以从表格中收集数据并进行分析。您再不必学习完整的编程语言或者单独编译程序来创建交互页。

  访问数据库信息的第一步是和数据库源建立连接。ADO提供Connection对象,可以使用该对象建立和管理应用程序和ODBC数据库之间的连接。Connection对象具有各种属性和方法,可以使用它们打开和关闭数据库连接,并且发出查询请求来更新信息。

  一个被包含文件也可以包含其他的文件。如果#include指令没有导致循环,一个.asp文件可以多次包括同一个文件。例如,如果文件First.asp包含文件,则Second.inc一定不能再包含First.asp。一个文件也不能包含自身。ASP检测此类循环或嵌套错误,并在检测到时产生一个错误消息,同时停止处理被请求的.asp文件。

  因为一般不知道存储在集合中的项目个数,ASP支持集合的Count属性,这个属性返回集合中的项目数。可以使用Count属性指定计数器的终值。

  可在Session对象中存储用户首选项,然后就可以访问这些首选项,从而决定将哪一页返回给用户。例如,您可以允许用户在应用程序的第一页指定纯文本内容,然后将这一选择应用到用户在该应用程序中访问的所有后续页。

  处理指令必须出现在.asp文件的第一行。不要将处理指令放在包含#include语句的文件中。必须在at标记(@)和关键字之间加入一个空格。处理指令有下列关键字:

  Active Server Pages使Web开发商用多种脚本语言编写完整的过程成为可能。事实上,在单个.asp文件内部就可以使用多种脚本语言。另外,由于脚本是在服务器端读取和处理的,所以请求.asp文件的客户端浏览器并不需要支持脚本。

  在创建数据库脚本之前,必须提供一条使ADO定位、标识和与数据库通讯的途径。数据库驱动程序使用Data Source Name (DSN)定位和标识特定的ODBC兼容数据库,将信息从Web应用程序传递给数据库。典型情况下,DSN包含数据库配置、用户安全性和定位信息,且可以获取Windows NT注册表项中或文本文件的表格。

  大多数应用程序只有一些特定的操作需要事务环境。例如,一个航空公司的站点可能只需要事务性脚本处理购票和安排座位,而其他所有脚本则无须事务环境即可安全运行。因为事务只须用于需要事务处理的页即可,不要将应用程序的Global.asa文件声明为事务性。

  如果事务被终止,Transaction Server将恢复对支持事务的资源的任何更改。目前,仅数据库服务器完全支持事务,因为数据库中的数据对于企业应用是最为关键的。Transaction Server不对硬盘上的文件、会话和应用程序的变量、集合等的改变进行恢复。然而您可以如下文主题所述,通过编写事务事件来编写恢复变量和集合的脚本。在某些时候,您的脚本也可以显式的提交或终止一个事务,如向文件写数据失败时。

  可以在单个指令中包含多个关键字;关键字/值对之间必须由空格分开。不要在等号(=)左右加入空格。下面的例子中设置了脚本语言和代码页:

  如果您的主脚本语言是VBScript或者JScript,ASP从指令中删除空白字符。使用其他脚本语言时,ASP保留空白字符,这样那些需要使用位置和缩进的语言,如Python就可以被正确解释了。空白字符包括空格、制表符、回车和换行符。

  Internet Explorer 4.0有一个新的特性,Web规划人员可以使用该属性将带有公用主题的Web页并入一个通道。在浏览器中,通道被显示在通道标题栏上;用户通过单击图标访问通道。通道在后台自动更新;用户不必访问站点就可以在自己的浏览器上下载最新的页。通道为用户提供了一条浏览一组相关的Web页的快速而直接的通路,并且这些Web页是自动更新的。

  在应用程序中,对于每个新会话,都会创建session-scope对象,并且在会话结束后会将其释放。因此,每个活动的会话都有一个对象。会话作用域用于从多个脚本中调用的对象,但只影响一个用户会话。您可以只在需要时才为对象赋予会话作用域。如果确实需要使用会话作用域,那么就必须了解提供对象的组件的线程模型,因为它影响性能和对象的安全环境。详细信息,请参阅本主题的“高级信息:性能问题”。

  ASP使用SessionID cookie跟踪应用程序访问或会话期间特定的Web浏览器的信息。这就是说,带有相应的cookie的HTTP请求被认为是来自同一Web浏览器。Web服务器可以使用SessionID cookies配置带有用户特定会话信息的ASP应用程序。例如,如果您的应用程序是一个允许用户选择和购买CD唱盘的联机音乐商店,就可以用SessionID跟踪用户漫游整个应用程序时的选择。

  为了充分保护ASP应用程序,一定要在应用程序的Global.asa文件上为适当的用户或用户组设置NTFS文件权限。如果Global.asa包含向浏览器返回信息的命令而您没有保护Global.asa文件,则信息将被返回给浏览器,即便应用程序的其他文件被保护。

  应用程序的脚本映射保证了Web服务器不会意外地下载.asp文件的源代码。例如,即使您为包含了某个.asp文件的目录设置了“读”权限,只要该.asp文件隶属于某个脚本映射应用程序,那么您的Web服务器就不会将该文件的源代码返回给用户。

  例如,某用户要通过请求某一站点的通用URL:来访问一个应用程序。负载平衡进程将申请路由到服务器server3.microsoft.com。ASP在此服务器上生成了一个新的用户会话。在Session_OnStart过程中,浏览器被重定向给指定的服务器:

  访问存储在Application或Session对象中的项目时,消除集合名称一般是安全的。但是,对于Request对象,最好指定集合名称,因为该集合很可能包含重复的名称。

  在集合的所有项目中遍历可以了解集合中存储的项目或修改项目。遍历集合时,必须提供集合名称。例如,可以使用VBScript中的For...Each语句访问存储在Session对象中的项目:

  全局变量仅在单个ASP页中可用,要使它在单个ASP页之外可用,就必须为变量赋予会话或应用程序作用域。会话作用域变量对一个用户所请求的ASP应用程序中的所有页都是可用的。应用程序作用域变量也如此。对单个用户来说,会话变量是存储信息的最佳途径,例如,首选项、用户名或用户标识。对于一个特殊应用程序的所有用户,应用程序作用域是存储信息的最佳途径,例如,应用程序特定的问候语或应用程序所需的初始值。

  在表格向Web服务器提交信息时,用户的Web浏览器请求用HTML FORM 标记的ACTION属性所指定的.asp文件(在前面的例子中,该文件被称为Myfile.asp)。.asp文件包含了处理表格值(如显示结果表或从数据库查询信息)的脚本。

  要建立数据库连接,首先应创建Connection对象的实例。例如,下面的脚本创建Connection对象,接着打开数据库连接:

  在将SessionID cookie存储于用户的浏览器之后,即使用户请求了另一个.asp文件,或请求了运行在另一个应用程序中的.asp文件,ASP仍会重用该cookie跟踪会话。与此相似,如果用户故意放弃会话或让会话超时,然后再请求另一个.asp文件,那么ASP将以同一个cookie开始新的会话。只有当服务器管理员重新启动服务器或用户重新启动Web浏览器时,此时存储在内存中的SessionID设置将被清除,用户将会获得新的SessionID cookie。

  关于所有VBScript和JScript的操作符、函数、语句、对象、属性及方法的列表及详细说明,请参阅VBScript语言参考和JScript语言参考。

  由于ASP脚本是在服务器端处理的,所以即使客户端的浏览器不支持脚本语言,也不必通过包含进HTML注释标记来隐藏脚本,但客户端的脚本则通常需要这样处理。在内容送到浏览器之前,所有ASP命令都已被处理好了。您可用HTML注释将注释加进HTML页。注释将返回给浏览器,若用户浏览HTML源文件,就可以看见。

  在处理ASP脚本时,任何没有包含在ASP定界符或SCRIPT标记中的文本或图形都将被简单地返回给浏览器。可以通过使用Response对象显示地把内容发送给浏览器。

  要将内容从ASP定界符内部或过程发送给浏览器,可以使用Response对象的Write方。例如,下面的语句可以根据用户是否访问过此页而发送不同的问候语:

  下面是一个有关如何使用通道的示例。下面的HTML表格要求用户选择通道。提交时,该表格调用.cdx文件的脚本去创建通道的定义。

  Page Counter组件统计并显示Web页被请求的次数。以一定的时间间隔,将捕获的数字写入到文本文件中,这样服务器关闭后,数据也不会丢失。

  Permission Checker组件测试Web用户对某文件或某页的访问权。可以使用Permission Checker组件为不同类型的用户定制基于ASP的页。例如,如果Web页包含超文本链接,就可以使用Permission Checker组件测试用户对相应Web页的访问权限并忽略用户无权访问的页或使这些链接失效。

  可以使用Ad Rotator组件来交替显示图像,并提供从显示的图形到另一个URL的链接。在文本文件中保存广告列表;Ad Rotator组件依照在数据文件中的指令来显示它们。

  在语句的不同部分之间可以加入HTML文本。例如,下面的脚本在If...Then...Else语句中加入了HTML,产生了与上面脚本同样的结果:

  您可以定义自己的常量。在VBScript中,用Const语句,在JScript中,用var语句。如果在多个ASP页中使用常量,可在独立的文件中放置常量,然后将其包含进每一个使用该常量的ASP文件中去。

  大多数ASP内建对象支持集合。集合是存储字符串、数字、对象和其他值的地方。除了在存储或取出项目时集合会自动扩展与搜索外,集合与数组非常相近。与数组不同的是,集合被修改后,项目的位置将会移动。可以通过集合中项目的名称、索引或者通过在集合的所有项目中遍历访问项目。

  Response.Write将跟随的文本发送到浏览器。要动态构造返回浏览器的文本,请在语句中使用Response.Write。例如,可能要构造包含一些变量值的字符串。在使用组件和对象以及向浏览器传送内容中了解到更多有关Response对象和一般对象的信息。现在,先了解将脚本命令插入到HTML页中的几种方法。

  然而,Web服务器仅当禁止匿名访问或Windows NT文件系统的权限限制匿名访问时才验证用户身份。详细信息,请参阅关于身份验证。

  访问元数据库的ASP脚本需要Web服务器所运行的计算机的管理员权限。在从远程计算机上运行这些脚本时,须经已通过身份验证的连接,如使用Windows NT请求/响应验证方式进行连接。应该为管理级.asp文件创建一个服务器或目录并将其目录安全验证方式设置为Windows NT请求/响应式身份验证。目前,仅Microsoft Internet Explorer version 2.0或更高版本支持Windows NT请求/响应式身份验证。

  在ASP定界符中可以包含任何在主脚本语言中合法的语句、表达式、过程或操作符。在VBScript和其他脚本语言中,语句是语法完整的单元,该单元表达某项活动、声明或定义。下面的条件语句If...Then...Else是一条常见的VBScript语句。

  随着不断掌握使用ASP和脚本语言的技巧,您可以创建更复杂的脚本。对于ASP,您可以便捷地使用ActiveX组件来执行复杂的任务,比如连接数据库以存储和检索信息。

  对ASP脚本的逐步介绍,请参阅ASP教程。然后您可以再回到这些主题中了解关于编写ASP脚本的详细信息。

  当使用HTTP GET方法去向Web服务器传递长而复杂的表格值时,将可能丢失信息。大多数的Web服务器倾向于严格控制URL查询字符串的长度,以便用GET方法传送的冗长的表格值被截断。如果您需要从表格发送大量信息到Web服务器,就必须使用HTTP POST方法。此法用于在HTTP请求正文中发送表格数据,而且发送的字符的个数可以无限多。也可以使用ASP Request对象的Form集合检索用POST方法发送的值。

  在应用程序中,如要为所有页设置主脚本语言,可在Internet服务管理器的“App选项”选项卡上设置“默认的ASP语言”属性。详细信息,请参阅配置ASP应用程序。

  在“创建新数据源”对话框中,从列表框中选择“Microsoft ODBC for Oracle”,然后单击“下一步”。

  注意,在前面的例子中,用来建立数据库连接的Connection对象和Recordset对象使用该连接从数据库中检索结果。当您需要精确地设置和数据库建立链接所采用的方式时,这个方法是非常有用的。例如,如果您需要在连接尝试失败之前指定等待的时间,则需要使用Connection对象去设置属性。但是asp学习,如果您仅仅想使用ADO默认的连接属性建立连接,则应该使用Recordset对象的Open方法去建立链接:

  Microsoft Message Queue Server使您能够将一个或一组更新捆绑到一个事务性消息中送给远程服务器。Message Queue Server保证更新将被发送给远程服务器,即使目前网络不可用。您的应用将收到一个提交消息,从而可以继续处理事务。

  有关在ASP应用程序中使用消息队列的示例,请参阅开发人员范例。要查看这些示例,必须安装SDK文档。

  Microsoft JScript 3.0引入了Enumerator对象。可以使用该对象遍历ASP集合。atEnd方法指出了集合中是否还存在项目。moveNext方法移动到集合中的下一个项目。

  在“ODBC Microsoft SQL Server安装程序”对话框中,单击“测试数据源”。如果DSN正确创建,“测试结果”对话框将指出测试成功完成。

  如果您正在开发用于连接远程SQL Server数据库的ASP数据库应用程序,应考虑以下问题:

  因为Transaction Server跟踪事务处理,所以它决定事务是完全成功还是失败。脚本可以通过调用ObjectContext.SetAbort显式地声明终止一个事务。例如,当一个事务在从一个组件收到错误消息asp代码 数字不一样怎么办、违反商业规范时(例如,帐户余额小于0)或读写文件等非事务性操作失败时,脚本就需要终止该事务。如果页在事务完成之前超时,也必须终止事务。

  请检查上面的例子,您将注意到,脚本用不同的数值重复构建和发出一个SQL查询,而没有重新定义和重发送查询到数据库源。用Command对象编译查询也可避免SQL查询引起的合并字符串和表格变量问题。特别是,通过使用Command对象的Parameter集合可以避免与定义字符串、日期、时间变量的类型有关的问题。例如,包含“”的SQL查询值可能导致查询失败:

  通过在Windows的“开始”菜单打开“控制面板”,您可以创建基于DSN的文件。双击“ODBC”图标,然后选择“文件DSN”属性页,单击“添加”,选择数据库驱动程序,然后单击“下一步”。按照后面的指示配置适用于您的数据库软件的DSN。

  在“创建新数据源”对话框中,从列表框选择“Microsoft Access Driver”,然后单击“下一步”。

  在ASP页上用Server.CreateObject创建的对象在该页的生存期内一直存在。该对象对该页的任何脚本命令都是可访问的,当ASP处理完该页时,该对象即被释放。因此,对象具有该页的作用域或生命周期。

  在用Visual Basic或VBScript编程时,要注意在ASP处理完该页之前不要释放对象。例如,以下语句经常用于通过将对象变量赋以Nothing值来释放对象:

  每当用户试图登录到需要资格验证的应用程序时,用户的Web浏览器会自动向服务器发送用户资格。如果Web服务器的Secure Sockets Layer (SSL)资格映射特性配置正确,那么服务器就可以在许可用户对ASP应用程序访问之前对其身份进行确认。

  作为ASP应用程序开发人员,您可以编写脚本来检查资格是否存在并读取资格字段。例如,您可以从资格证明中访问用户名字段和公司名字段。Active Server Pages在Request对象的ClientCertificate集合中保存资格信息。详细信息,请参阅ASP内建对象。

  通过在服务器端脚本中有问题的部分前面插入Stop语句,您也可以将断点添加到用VBScript编写的服务器端脚本中。例如,下面的ASP脚本包含一个Stop语句,用来在显示结果之前暂停执行:

  常量是用来代替一个数或字符串的名称。一些随ASP提供的基本组件,例如ActiveX Data Objects (ADO),定义了您在脚本中可以使用的常量。组件可在一个组件类型库中声明常量,组件类型库是一个包含ActiveX组件所支持的对象和类型的信息的文件。一旦在Global.asa文件中声明了一个类型库,您就可以在该应用程序的任意页中使用已定义的常量。

  cookie是Web服务器嵌在用户的Web浏览器中,用来代表用户的令牌。当下次同一浏览器请求一页时,它将发送从Web服务器收到的cookie。cookie允许有一组信息与用户关联。ASP脚本使用Response和Request对象的Cookies集合,可以获取和设置cookie的值。

  VBScript不区分大小写。例如,您可以用Request或request来引用ASP Request对象。不区分大小写的后果是您不能用大小写来区分变量名。例如,您不能创建两个名为Color和color的单独变量。

  JScript区分大小写。要在脚本中使用JScript关键字,就必须按参考页中所示的大小写来书写。例如,用date来代替Date将导致错误。在JScript中,对象名必须大写;方法名和属性名可大写也可小写。本文所示的ASP内建对象的情况将在JScript命令中正常工作。

  首先要确保Oracle用户软件被正确地安装要创建DSN的计算机上。详细信息,请与服务器管理员联系或参阅数据库软件文档。

  浏览器从Web服务器上请求.asp文件时,ASP脚本开始运行。然后Web服务器调用ASP,ASP全面读取请求的文件,执行所有脚本命令,并将Web页传送给浏览器。

  由于脚本在服务器上而不是在客户端运行,传送到浏览器上的Web页是在Web服务器上生成的。所以不必担心浏览器能否处理脚本:Web服务器已经完成了所有脚本的处理,并将标准的HTML传输到浏览器。由于只有脚本的结果返回到浏览器,所以服务器端脚本不易复制。用户看不到创建他们正在浏览的页的脚本命令。

  尽管您可以通过存储ASP的Application对象的连接重复使用跨页连接,但是,始终使连接保持打开是不必要的,也没有充分利用连接池的优点。如果有许多用户需要连接到同一个ASP数据库应用程序,一个好方法就是,将跨页连接字符串置于ASP的Application对象中,重复使用数据库连接。例如,可以在Global.asa文件的Application_OnStart事件过程中指定连接字符串,如下面的脚本所示:

  Active Server Pages(ASP)文件是以.asp为扩展名的文本文件,这个文本文件可以包括下列部分的任意组合:

  创建.asp文件非常容易。如果要在HTML文件中添加脚本,只需将该文件的扩展名.htm或.html替换为.asp就可以了。要使.asp文件可用于Web用户,请将这个新文件保存在Web站点上的目录中(请确定启用了该目录的脚本和执行权限)。使用浏览器查看该文件时,可以看到ASP处理并返回了HTML页。现在可以在.asp文件中添加脚本命令了。

  截获了用户sessionID cookie的计算机黑客可以使用此cookie假冒该用户。如果ASP应用程序包含私人信息,信用卡或银行帐户号码,拥有窃取的cookie的计算机黑客就可以在应用程序中开始一个活动会话并获取这些信息。您可以通过对您的Web服务器和用户的浏览器间的通讯链路加密来防止SessionID cookie被截获。有关加密的详细信息,请参阅安全性。

  您也可以在Session对象中存储一个对象实例,但这样做会影响服务器的性能。详细信息,请参阅设置对象作用域。

  ASP会话信息存储在Web服务器中。浏览器必须向Web服务器请求页才能获得用来访问会话信息的脚本。在Web Farm(其中许多Web服务器共同承担响应用户申请的责任)中,用户的请求并不总是被路由到同一个服务器,而是由一个被称为负载平衡进程的特殊软件对此URL站点的申请分配任意一个空闲的服务器。负载平衡进程使在Web Farm中保存会话信息变得更加困难。

  您可以要求每个试图访问被限制的ASP内容的用户必须要有有效的Windows NT帐号的用户名和密码。每当用户试图访问被限制的内容时,Web服务器将进行身份验证,即确认用户身份,以检查用户是否拥有有效的Windows NT帐号。

  在遍历包含对象的集合时,可以访问对象的标识符或对象的方法和属性。例如,假设应用程序使用一些对象创建用户帐号,而且每个对象有初始化方法,可以遍历StaticObjects集合来调用每个初始化方法:

  Microsoft脚本调试程序。您可以使用脚本调试程序调试.asp文件。请参阅调试ASP脚本。

  事务性脚本。ASP页和页中使用的对象可以运行于事务环境之下。在页上的全部工作只有两种结果:提交或终止。事务可以保护应用程序免于因失败而导致数据丢失。请参阅创建事务性脚本。

  前两个方法的操作方式相同,当表格与网关程序交互时,除ASP之外,可以包含读取和响应用户选择的命令。

  Session对象提供了一个可在其中存储信息的动态关联数组。您可以在Session对象中存储数值变量和对象变量。

  通过对Session对象中的命名项赋值,可将变量存储在Session对象中。例如,以下命令将两个新变量存储在Session对象中:

  注意不要混淆debugger语句和JScript break语句。在程序执行期间,break语句仅退出当前循环,并不激活Microsoft脚本调试器,也不暂停程序的执行。

  除脚本调试程序外,一套好的调试技巧也能减少花费在分析脚本错误根源上的大量时间。尽管大部分错误是由显而易见的根源导致的,但命令拼写错误或丢失变量、某种类型的逻辑和执行错误也可能因不太明显的根源所致。详细信息,请参阅Microsoft脚本调试程序文档的“调试技巧”部分。

  Server对象提供对服务器上的方法和属性进行的访问。最常用的方法是创建ActiveX组件的实例(Server.CreateObject)。其他方法用于将URL或HTML编码成字符串,将虚拟路径映射到物理路径以及设置脚本的超时期限。

  可以使用Session对象存储特定的用户会话所需的信息。当用户在应用程序的页之间跳转时,存储在Session对象中的变量不会清除;而用户在应用程序中访问页时,这些变量始终存在。也可以使用Session方法显式地结束一个会话和设置空闲会话的超时期限。

  浏览器可以使用Posting Acceptor应用程序将文件发送给Web服务器。当Posting Acceptor上载文件时,将发送列出每一个收到的文件名称和位置的URL-encoded表格字段。可以将邮递处理的URL添加到脚本中,此脚本上载文件去调用ASP脚本来处理这些字段名。例如,可以编写一个脚本,自动地通过文件的名称和位置发送e-mail给系统管理员。有关Posting Acceptor的详细信息,包括ASP脚本示例,请参阅Posting Acceptor。

  使用脚本语言的这个功能,您能够创建令人兴奋的应用程序。举例来说,下面的脚本将生成在用户的Web浏览器上运行的客户脚本的子程序。

  通过ODBC,您可以选择希望创建的DSN的类型:用户、系统或文件。用户和系统DSN存储在Windows NT注册表中。系统DSN允许所有的用户登录到特定的服务器上去访问数据库,而用户DSN使用适当的安全身份证明限制数据库到特定用户的连接。文件DSN用于从文本文件中获取表格,提供了对多用户的访问,并且通过复制DSN文件,可以轻易地从一个服务器转移到另一个服务器。由于以上原因,本主题中的示例将使用文件DSN。

  VBScript并不需要声明变量,但在使用所有变量前声明它们是一种好的脚本书写习惯。要在VBScript中声明变量,请用Dim、Public或Private语句。例如:

  注意,姓OHara中包含一个“”,它与在SQL VALUES关键字中用来表示数据的“”冲突。通过将查询数值作为Command对象参数绑定,可以避免此类问题。

  由于内容字符串可以包含HTML标记,就可以显示HTML能够表示的任何内容类型:文本、图形或超文本链接。例如,可以使用该组件在每日牌价或超文本链接中循环,或者在每次打开Web页时,改变文本和背景的颜色。

  通过使用Browser Capabilities组件,可以基于浏览器的功能剪裁发送到该浏览器的内容。

  如果需要,可使用下列语句设置cookie路径,使得无论应用程序或路径是什么,只要用户的Web浏览器向您的服务器请求文件,就会转发cookie:

  但是,请注意,在不区分应用程序的情况下向服务器发送cookie,如果cookie包含不应被指定应用程序以外的程序访问的敏感信息,就可能产生安全性问题。

  在“创建SQL Server的新数据源”对话框中,在“服务器”列表框中键入包含SQL Server数据库的服务器的名称,然后单击“下一步”。

  如果您从位于没有保护的虚拟根目录中的.asp文件中包含了位于启用了SSL的目录中的文件,则SSL将不被应用于被包含文件。因此,为了保证应用SSL,应确保包含及被包含的文件都位于启用了SSL的目录中。

  控制对您的ASP应用程序访问的一种十分安全的方法是要求用户使用客户资格登录。客户资格是包含用户身份信息的数字身份证,它的作用与传统的诸如护照或驾驶执照等身份证明相同。用户通常从委托的第三方组织获得客户资格,第三方组织在发放资格证之前确认用户的身份信息。(通常,这类组织要求姓名、地址、电话号码及所在组织名称;此类信息的详细程度随给予的身份等级而异。)

  当在脚本中设置Buffer属性并且没有调用Flush方法时,服务器将保持用户发出的Keep-Alive请求。养成这样的脚本编写习惯有益于提高服务器的性能,因为,服务器不必为每一个用户请求创建新的连接(假定服务器、用户和任何代理服务器都支持Keep-Alive要求)。但是,这种方法的一个潜在的不利因素是:在用户处理完当前的asp文件的所有的脚本之前,缓冲区不显示任何响应给用户。对于较长的和较复杂的脚本,用户可能要被迫等待很长一段时间才能看到这一页。

  活动的突然增长可能使数据库服务器变得十分笨拙,大量增加建立数据库连接的时间。结果是,过长的连接延时将降低数据库的性能。

  用Connection对象的ConnectionTimeout,您可以限制放弃连接尝试并发出错误消息之前应用程序等待的时间。例如,下面的脚本设置ConnectionTimeout属性,在取消连接尝试之前等待20秒:

  安全性-如果您使用SQL Server的集成或混合安全特性,并且SQL Server数据库位于远程服务器上,则不能使用Windows NT请求/响应的确认。也就是说,不能将Windows NT请求/响应身份证转发到远程计算机上,而只能使用基本身份验证,它根据用户提供用户名和口令信息进行。

  在将一个页声明为事务性时,此页中的任何脚本命令和对象都运行在同一个事务环境中。Transaction Server处理生成事务的细节并决定事务成功(提交)或失败(终止)。要将某个页声明为事务性,可在页首添加@TRANSACTION指令:

  脚本本身不能决定事务是成功还是失败。但是,可以编写提交或终止事务时被调用的事件。例如,假设有一个确认银行帐户的脚本,并且您需要针对事务的不同状态将不同的页返回给用户,那么就可以使用OnTransactionCommit和OnTransactionAbort事件来编写对用户的不同响应。

  向表格中添加隐含值。例如,以下的HTML表格包含一个隐含的控件。此控件在真正的表格中不出现,而且对用户的Web浏览器是不可见的。通过HTTP POST方法,表格除了传递用户提供的信息外,还传递用户标识。

  被包含文件可以在您的Web站点内的某个目录中,也可以在您的Web站点之外。通常,您应该使被包含文件位于Web站点的目录中。如果一个被包含文件位于您的Web站点内,则当浏览器下次请求包含文件时,将显示对被包含文件的改变。但是,如果被包含文件位于您的Web站点之外,直到ASP应用程序重新启动或Web服务器重新启动时,这种改变才能体现出来。ASP检测在应用程序命名空间中(在应用程序的起始目录下)的任何包含文件的改变。

  尽管ASP主要用来创建和处理服务器端脚本,还是可以使用它生成由客户浏览器处理的客户端脚本来扩展其效用。通过组合传送到浏览器的脚本命令可以编写服务器端脚本。

  注意默认情况下,通过将CPTimeout设置为60秒,Web服务器将激活SQL Server的连接池。

  输出表达式不能包括注释。例如,下面的第一行将正常运行,而第二行则不能,因为它是以%=开头的。

  在以上的脚本中,ASP在服务器上检索时间和日期信息,然后通过几次循环生成在用户的Web服务器上运行的子程序。每个客户端子程序提出随机选择的问候,显示时间和日期信息。

  这种脚本可扩展,例如,将配置信息检索并提交到指定的客户端脚本或组件,如ActiveX控件。灵活地使用这种脚本的编写技巧,同样可以加快Web服务器处理和返回用户信息请求的速度。

  HTML表格是收集Web信息最常用的方法,是在Web页上提供用户界面控件的特殊的HTML标记的排列。文本框、按钮和复选框都是典型的控件,这些控件使用户和Web页实现交互,并且将信息提交给Web服务器。

  下面的HTML示例产生一个表格,在表格中,用户可以输入姓名、年龄并包含一个将这些信息提交给Web服务器的按钮。该表格也包含了一个隐含的控件(Web浏览器不显示),可以用该控件向Web浏览器传递附加信息。

  被包含文件不要求专门的文件扩展名;但是,为被包含文件赋予.inc扩展名以便和其他类型文件相区分是一个良好的编程习惯。

  使用Virtual关键字指出路径开始于虚拟目录。例如,如果一个被命名为Footer.inc的文件属于一个名为/Myapp的虚拟目录,则下面的一行将把Footer.inc的内容插入到包含该行的文件中:

  可以使用缓冲技术来确定在页处理过程中的某个点,而您并不想将该点之前的内容发送给用户。也可以用Response对象的Redirect方法将用户重定向到另一页,或者用Response对象的Clear方法清除缓冲区并将不同的内容发送给用户。下面的例子使用了以上两种方法。

  因为在任何页的内容被发送之前,HTTP标题必须被送给浏览器或代理服务器,所以,可在任何HTML标记之前设置Response.CacheControl属性或使用Response.Buffer缓存此页。

  缓存控制标题字段是HTTP 1.1规格的一部分。在只支持HTTP 1.0的代理服务器上不能缓存ASP页,因为没有到期的标题字段发送。

  SSI指令为用户提供在Web服务器处理之前将一个文件的内容插入到另一个文件的方法。ASP只使用这一机制的#include指令。要在.asp文件中插入一个文件,使用下面的语法:

  virtual和file关键字指示用来包含该文件的路径的类型,filename是您想包含的文件的路径和名称。

  注意一定要对应用程序的文件应用统一的NTFS权限。例如,如果您不小心过度限制了一应用程序需要包含的文件的NTFS权限,则用户可能无法查看或运行该应用程序。为了防止此类问题,在为您的应用程序分配NTFS权限之前应仔细计划。

  您可以通过配置您的Web服务器的权限来限制所有用户查看、运行和操作您的ASP页的方式。不同于NTFS权限提供的控制特定用户对应用程序文件和目录的访问方式,Web服务器权限应用于所有用户,并且不区分用户帐号的类型。

  可以列举Request.Cookie集合中所有的cookie以及Cookie中所有的子关键字(Subkeys)。但是,如果在没有子关键字(Subkeys)的Cookie上遍历子关键字,将不会产生任何结果。通过使用.HasKeys语法首先检查cookie是否含有子关键字(Subkeys),就可以避免这种情况。下面的这个例子展示了这个技巧。

  成功开发Web应用程序的难题之一是在一次用户访问,即会话期间,当用户在一个应用程序的页与页之间跳转的同时,维护用户信息。HTTP是一种无状态协议,也就是说,Web服务器将某页的每次访问都当作相互无关的访问来处理;服务器不保留前一次访问的任何信息,即使访问就发生在当前访问的几秒钟之前。正因为这种不记忆以前访问的特性使得编写联机目录之类的应用程序很困难,此类应用程序可能需要跟踪用户在目录的不同页间跳转的同时曾选择过的目录项。

  注册和配置事务性组件可使用MTS资源管理器。必须将事务的属性设置为需要事务或需要新事务。事务组件必须在MTS包中注册。不要将组件放在IIS内部进程包中,而应该创建自己的包。通常,应将所有的组件放在一个组件库中。组件库的组件可被多个ASP应用程序使用并以ASP应用程序进程运行。使用MTS资源管理器可创建新的包并将包的Activation属性设置为Library。

  使用file关键字指示使用相对路径。相对路径开始于含有该包含文件的目录。例如,如果您的文件位于目录Myapp中,而文件Header1.inc在Myapp\Headers中,下面的一行将把Header1.inc插入到您的文件中:

  Command对象的parameter集合减少了您的麻烦,使您不必在每次重新发出查询时重新建立查询。例如,如果需要有规律地更新基于库存清单的Web系统中的供应和价格信息,可以用下面的方法预先定义查询:

  如果条件为真棗也就是说,如果时间为午夜、午夜以后或者中午以前,那么Web服务器将跟随条件(“Good Morning”)的HTML发送到浏览器;否则,将跟随Else的HTML(“Hello”)发送到浏览器。这种混合HTML和脚本命令的方式可以方便地将If...Then...Else语句变换为几行HTML文本。如果要在Web页上显示多处问候,前一个例子更为有用。只需要设置一次变量,就可以重复显示。

  除非缓冲区已经打开,否则,在任何内容或标题返回给浏览器之前,您必须重定向浏览器。将Response.Redirect语句放在页的顶部和HTML标记之前可确保没有任何内容返回给浏览器。如果在返回给浏览器的内容或标题后使用Response.Redirect,将看到一个错误信息。

  通过使用项目名称可以访问集合中的具体项目。例如,Contents集合拥有在Session对象中保存的所有变量。同样也拥有由Server.CreateObject创建的所有对象。假设在Session对象中存储了下列用户信息:

  要显示广告,您首先应该获取存储在Session对象中的Ad Rotator对象的实例,然后才能调用方法来显示对象:

  可以使用VBScript中的For...Next语句遍历集合。例如,要列出上例中存储在Session中的三个项目,可以使用下列语句。

  商业应用程序常常需要具有在事务内部运行脚本和组件的能力。事务是一种服务器操作,即使该操作包括很多步骤(例如,定货、查看存货、付帐等),也只能整体返回操作是成功还是失败。用户可以创建在事务内部运行的ASP脚本,如果脚本的任何一部分失败,整个事务都将会终止。

  ASP事务处理是以Microsoft? Transaction Server (MTS)为基础的。Microsoft? Transaction Server (MTS)是一个事务处理系统,用于开发、配置和管理高性能、可分级的、有鲁棒性的企业Internet和Intranet服务器应用程序。Transaction Server为开发分布式的,基于组件的应用程序提供了一个应用程序设计模型。它也为配置和管理这些应用程序提供了一个运行环境。

  脚本语言是介于HTML和Java、C和Visual Basic之类的编程语言之间的语言。HTML通常用于格式化文本和链接网页。编程语言通常用于向计算机发送一系列复杂指令。脚本语言也可用来向计算机发送指令,但它们的语法和规则没有可编译的编程语言那样严格和复杂。脚本语言主要用于格式化文本和使用以编程语言编写的已编译好的组件。

  注意在使用SQL DELETE命令时,必须谨慎从事。当使用不带WHERE子句的DELETE命令时,它将删除表中的所有行。一定要包含SQL WHERE子句来指定要删除的确切行。

  尽管Connection对象简化了连接数据库和查询任务,但Connection对象仍有许多不足。确切地说,检索和显示数据库信息的Connection对象不能用于创建脚本;您必须确切知道要对数据库作出的更改,然后才能使用查询实现更改。

  定界符括入的命令被称为主脚本命令。这些命令被主脚本语言处理。在脚本定界符中使用的任何命令都必须对主脚本语言有效。默认情况下,主脚本语言是VBScript。要设置另一种语言。请参阅使用脚本语言。

  如果您已经熟悉了客户端脚本编写(编写在浏览器上运行的脚本),请注意不要用HTML SCRIPT元素括入表达式。在编写服务器端脚本时,只用SCRIPT元素在主脚本语言外的其他语言中定义过程。关于详细信息,请参阅使用脚本语言。

  ASP在执行脚本命令之前包含文件。因此,不能用脚本命令去创建被包含文件的名称。例如,下面的脚本将不能打开Header1.inc,因为ASP会在它分配一个文件名给变量name之前先执行#include指令。

  在这种情况下,Connection对象的Open方法引用基于DSN的文件,其中包含关于数据库的位置和配置信息。也可以不引用DSN,直接显式引用供应程序、数据源、用户ID和密码。有关建立连接的可选方法的详细信息,请参阅Microsoft ActiveX Data Objects (ADO)。

  ASP提供了一个管理会话信息问题的独特方案。使用ASP Session对象和由您的服务器生成的特殊用户ID,您可以创建一个智能应用程序,该应用程序可以识别每个来访的用户并收集应用程序跟踪用户的首选项或选择内容所要用到的信息。

  ASP通过HTTP cookie设置用户ID。HTTP cookie是存储在用户浏览器上的小文件。因此,如果您正在为不支持cookie的浏览器创建应用程序,或者您的客户将浏览器设置为不接受cookie,请不要使用ASP的会话管理功能。

  当您只需要将输出返回一次或很方便地向现有HTML文本中加入语句时,可使用混合脚本命令和HTML。当您不想用定界符分隔一条语句或当您想创建返回给浏览器的字符串时,可使用Response.Write。例如,可构建一个文本的字符串,用从一个HTML表送回的值创建表格的一行:

  每一个浏览器版本都有它自己的规格来规定是否缓存页。要避免浏览器缓存ASP页,可使用Response.Expires设置到期标题:

  值为0强迫缓存页到期。因为在任何页被发送之前,HTTP标题必须被送给浏览器,所以可通过将Response.Expires属性放在HTML标记之前或使用Response.Buffer缓存该页。

  Secure Sockets Layer (SSL) 3.0协议作为Web服务器安全特性,提供了一种安全的虚拟透明方式来建立与用户的加密通讯连接。SSL保证了Web内容的验证,并能可靠地确认访问被限制的Web站点的用户的身份。

  通过SSL,您可以要求试图访问被限制的ASP应用程序的用户与您的服务器建立一个加密连接;以防用户与应用程序间交换的重要信息被截取。详细信息,请参阅加密。

  用Redirect方法可将浏览器重定向到另一个URL,而不是将内容发送给用户。例如,如果您想确认用户是否已从主页进入了您的应用程序,以便能收到一个客户ID,则可以检验他们是否有客户ID号;如果没有,就可以将其重定向到主页。

  要为对象赋予应用程序作用域并将其存储在ASP Application内建对象中,既可以使用Global.asa文件中的OBJECT标记,也可以使用ASP页上的Server.CreateObject方法创建应用程序作用域的对象实例。

  如果您已经掌握了一门编程语言,如Visual Basic,您将发现ASP是快速创建Web应用程序的一个非常灵活的方法。通过向HTML中添加脚本命令,您能够创建应用程序的HTML接口。通过创建自己的ActiveX组件,可以将应用程序中的商业逻辑封装到能够从脚本、其他组件或从其他程序中调用的模块。

  请注意,SessionID cookie并不提供跟踪用户对某个Web站点的多次访问的永久方法。存储在服务器内存中的SessionID信息很容易丢失。如果想跟踪在很长时间内访问您的Web应用程序的用户,必须通过在用户的Web浏览器中存储一个专门的cookie,并将cookie信息保存到数据库中来创建一个用户标识。详细信息,请参阅使用Cookie。

  可以使用Response对象的ContentType属性为发送给用户的内容设置HTTP内容类型字符串。例如,下面的命令为通道定义设置内容类型:

  其他的通用内容类型是text/plain(用于作为文本内容返回而不是已解释的HTML语句)、text/gif(用于GIF图像)和video/quicktime(用于Apple QuickTime?格式的电影)。一套标准的MIME类型已经定义,另外,Web服务器或Web浏览器都支持MIME类型。要想查看您的Microsoft Web服务器支持哪些内容类型,可使用Internet服务管理器打开您的Web站点的属性页,单击“HTTP标题”选项卡,然后单击“文件类型”选项卡。

  application-scope对象是在应用程序启动时就创建的对象的单个实例。该对象由所有客户端请求共享。仅在极少数情况下,您才需要为对象赋予应用程序作用域。一些实用程序对象,例如计数器等,可能需要应用程序作用域。但一般来说,您可用在下一节中建议的替代方案。另外,线程模型会影响性能和对象安全环境(请参阅本主题的“高级信息:性能问题”)。

  通过重用SessionID cookie,ASP将发送给用户浏览器的cookie数量降为最低。另外,如果您决定您的ASP应用程序不需要会话管理,就可以不让ASP跟踪会话和向用户发送SessionID。

  当用户第一次请求给定的应用程序中的.asp文件时,ASP生成一个SessionID。SessionID是由一个复杂算法生成的号码,它唯一标识每个用户会话。在新会话开始时,服务器将Session ID作为一个cookie存储在用户的Web浏览器中。

  养成显式声明所有变量的编程习惯可以避免许多问题。尤其在当您用#include语句将文件包含进ASP主页时,就显得更为重要。一个独立文件中被包含的脚本是被当作整个包含它的文件的一部分来处理的。用不同的名称来命名主脚本和被包含脚本中用到的变量,这容易被遗忘,除非声明变量。

  可以在脚本中使用for语句在集合中循环。在JScript的for语句中使用Count属性时,为了收到更大的效果,应该将Count值分配给本地变量并使用该变量设置计数器终值。这样,脚本引擎就不需要每次循环都查寻Count的值。下面的例子展示了这个技巧:

  使用ASP,可以编写脚本来收集用户的首选项,然后动态地创建通道。通道定义文件(.cdf)建立了通道内容的组织和顺序。在.cdf文件中的命令使用与HTML标记相同的语法,以便于掌握和从脚本中生成。在编写ASP脚本来创建通道定义文件时,脚本用.cdx扩展名。当ASP读取一个以.cdx为扩展名的文件时,将自动发送application/x-cdf内容类型,它告诉浏览器用通道定义来解释字节。如果不使用.cdx作扩展名,则脚本必须用Response.ContentType手工将内容类型设置为application/x-cdf。

  通过ADO Command对象,可以象用Connection对象和Recordset对象那样执行查询,唯一的不同在于用Command对象您可以在数据库源上准备、编译您的查询并且反复使用一组不同的值来发出查询。这种方式的编译查询的优点是您可以最大程度地减少向现有查询重复发出修改的请求所需的时间。另外,您还可以在执行之前通过您的查询的可变部分的选项使SQL查询保持局部未定义。

  脚本命令和过程必须完全包含在脚本定界符%和%、HTML标记SCRIPT和/SCRIPT或HTML标记OBJECT和/OBJECT中。也就是说,不能在一个.asp包含文件中打开一个脚本定界符,然后在一个被包含的文件中才关闭该定界符;脚本或脚本命令必须是一个完整的单元。例如,下面的脚本将无法运行:

  一般情况下,不要将从MTS组件中创建的对象存储在ASP Application或Session对象中。MTS对象在事务完成后消失。因为Session对象和Application对象是为在不同ASP页之间使用的对象实例设计的,所以不要用它们保存在事务结束时即被释放的对象。

  ASP脚本是已声名的事务的根,即起始点。任何事务性ASP页所使用的MTS对象都被认为是事务的一部分。当事务完成后,在页中使用的MTS对象将消失,其中包括存储在Session或Application对象中的对象。在此之后,从另一个事务性页中调用会话作用域或应用程序作用域对象的尝试都将失败。

  ASP集合从1开始编号。当在集合中增加或删除项目时,与项目关联的索引将会改变。所以不能认为项目的索引始终不变。正如将在下面的主题中说明的那样,利用索引的访问一般用来遍历集合,或访问只读集合中的项目。

  通过使用速记的名称可以访问项目。ASP以特定的顺序搜索与对象关联的集合。如果在对象的集合中特定名称的项目只出现一次的话,可以消除该集合的名称:

  对于检索数据、检查结果、更改数据库,ADO提供了Recordset对象。正如它的名称所暗示的那样,Recordset对象有许多您可以使用的特性,根据您的查询限制,检索并且显示一组数据库行,即记录。Recordset对象保持查询返回的记录的位置,允许您一次一项逐步扫描结果。

  根据Recordset对象的指针类型属性设置,您可以滚动和更新记录。数据库指针可以让您在一组记录中定位到特定的项。指针还用于检索和检查记录,然后在这些记录的基础上执行操作。Recordset对象有一些属性,可用于精确地控制指针的行为,提高您检查和更新结果的能力。例如,您可以使用CursorType和CursorLocation属性设置指针的类型,将结果返回给客户端应用程序(结果通常保留在数据库服务器上)并显示其他用户对数据库的最后一次更改。有关配置Recordset对象指针的信息,请参阅Microsoft ActiveX Data Objects (ADO)。

  要为对象赋予会话作用域,请将对象存储在ASP Session内建对象中,您既可以在Global.asa文件中使用OBJECT标记,也可以在ASP页上使用Server.CreateObject方法创建具有会话作用域的对象实例。

  如果您在ASP页中包含了该语句,那么任何使用myObj的企图都将会返回一个预期的错误代码。但在内部,即使在对象释放以后,ASP仍保留对它的引用。当您在脚本中不能使用对象时,对象的资源直到ASP处理完页之后才释放。同样,如果您通过创建另一个对象实例并将其赋给已使用过的对象变量来释放该对象时,ASP将保留对原对象实例的引用。对大多数脚本来说,创建多个对象可能不会产生问题,但如果对象使用共享资源,比如数据库连接,就有可能出现问题。

  如果您当前没有使用ASP会话管理,请关闭您的应用程序会话支持。当会话启用时,ASP向每个请求ASP页的浏览器发送SessionID cookie。要关闭会话支持,可清除Internet服务管理器中的“应用程序选项”属性页中的“启用会话状态”复选框。

  注意,到被包含文件Headers/header1.inc的路径是相对于包含文件的;如果包含#include语句的脚本不在/Myapp目录中,那么该语句将不起作用。

  如果在Internet服务管理器中的“启用上层目录”选项被选中,则也可以使用file关键字和../语法包含父目录即上一层目录中的文件。有关命令,请参阅配置ASP应用程序。

  组件的线程模型可能会影响Web站点的性能,一般来说,带有Both标记的对象是推荐在所有的ASP脚本中使用的对象,尤其是在Session和Application对象中。不推荐使用单线程对象。

  要将断点加到用Microsoft? JScript编写的服务器端脚本中,可在有疑问的行前插入debugger语句。例如,下面的脚本包含了debugger语句,每次脚本循环到一个新值时,就会中断执行并自动启动Microsoft脚本调试程序。

  VBScript支持撇号型注释。与HTML注释不同,当处理脚本时,它们将被删除,而不是被送到浏览器。

  Form集合与QueryString集合存储数值的方式相同。例如,如果用户用一长串名称填充表格,您就可以用下面的脚本检索这些名称:

  一个好的表格处理脚本在处理数据前,应先验证输入表格的信息是否有效。验证脚本可以检验用户输入到表格的信息类型是否正确。例如,如果您的Web站点包含一个表格,该表格允许用户计算财务信息,那么在处理结果之前,需要验证用户确实输入了数值信息而不是文本。

  在开始调试服务器端脚本之前,您必须首先配置Web服务器,使其支持ASP调试。有关配置命令及信息,请参阅启用ASP调试。

  可在Global.asa中用METADATA标记为应用程序声明类型库。例如,要声明ADO类型库,可用以下语句:

  您可以通过定义一个创建和初始化新对象的属性和方法的构造函数来创建自己的JScript对象。当脚本用new操作符来调用构造函数时,就会创建该对象的实例。ASP脚本支持用户自定义的对象,当具有页作用域时,后者正常运行。但如果为用户自定义的JScript对象赋予应用程序或会话作用域,将可能影响该对象的功能。特别是,若一个对象具有会话或应用程序作用域,则其他页的脚本可以获取该对象的属性,但是却不能调用其方法。

  使用ASP Request对象,您可以创建一个简单而功能强大的脚本来收集和处理HTML表格数据。在本主题中,您将不仅学会如何创建基本的表格处理脚本,而且还将获得用于验证Web服务器和用户浏览器上的表格信息的一些有用技术。

  如果没有MTS,您就需要编写脚本和组件,手工跟踪请求的更改情况,以便在某些更改失败时恢复数据。使用MTS,您只需简单的将您的脚本和组件声明为“需要事务”并让MTS处理事务的一致性。事务处理只适用于数据库访问;MTS不能对文件系统或其他的非事务性资源的更改进行恢复操作。应用程序所访问的数据库必须为MTS所支持。目前,MTS支持SQL Server及任何支持XA协议(由X/Open协会制定)的服务器。MTS将继续扩展对其他数据库的支持。

  无论您的计划多么精密、经验多么丰富,脚本错误(bug)可能在最初就使您的ASP服务器端的脚本无法正确运行。也就是说调试,即查找和纠正脚本错误,对开发一个成功的和强健的ASP程序是非常重要的。

  您可以通过创建如下设置的注册表键来有选择地设置CPTimeout的属性,从而启用特定ODBC数据库驱动程序的连接池:

  隔离ASP应用程序。您可以隔离ASP应用程序以便它们能在Web服务器上独立的内存空间内运行。万一某个应用程序失败时,可以保护其他应用程序和Web服务器。它也使您可以在不停止Web服务器的情况下,停止一个应用程序或从内存中卸载其组件。请参阅隔离应用程序.

  许多Web浏览器,包括Microsoft Internet Explorer 4.0和Netscape浏览器,保留cookie路径的大小写。也就是说,如果一个被请求的文件的大小写与保留的cookie路径不同,那么浏览器是不会向服务器转发cookie的。例如,对于ASP,虚拟目录/TRAVEL和/travel是相同的ASP应用程序,而对于保留URL的大小写的浏览器而言,/TRAVEL和/travel则是两个不同的应用程序。应确保.asp文件的所有URL具有相同的大小写,以保证用户的浏览器能够转发存储的cookie。

  也可以在Server包中注册事务性组件。Server包通常以服务器上的一个独立的进程运行。如果希望使用基于职能组的安全性检查或希望您的组件可被远程计算机上的应用程序访问,可对事务性组件使用Server包。

  要使用MTS资源管理器,必须安装Microsoft Transaction Server。有关注册组件和选择包类型的详细信息,请参阅创建MTS包。

  变量是计算机内存中已命名的存储位置,其中包含了数字或字符串等数据。变量包含的信息被称为变量的值。变量使用用户便于理解脚本操作的名称为用户提供了一种存储、检索和操作数据的途径。

  命名和声明变量应遵循脚本语言的规则及指导。即使在使用变量前不需要去声明变量,也应养成在编程时声明变量的良好习惯,因为这样有助于防止错误发生。声明一个变量意味着告诉脚本引擎,有一个特定名称的变量,这样就可以在脚本中引用该变量。

  一个非常方便的验证表格输入的方法是创建一个向自身传递信息的表格。在这种情况下,.asp文件包含可获取信息的表格。例如,下面的脚本通过向自身传递信息来验证用户是否在age表格字段中输入了数值:

  由于对象有页作用域,所以不要依靠手工释放的对象。例如,以下的循环创建1001个Connection对象,它将能打开大多数的连接甚至于一个大型的SQL server:

  QueryString集合有一个可选参数,可用来访问显示在请求正文中的多个值中的一个。也可以使用Count属性计算一个特殊类型的值的出现次数。

您可能还会对下面的文章感兴趣: