ASP动态网站制作基础知识学习_第1页
ASP动态网站制作基础知识学习_第2页
ASP动态网站制作基础知识学习_第3页
ASP动态网站制作基础知识学习_第4页
ASP动态网站制作基础知识学习_第5页
已阅读5页,还剩99页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录一、关于ASP二、ASP的新功能三、创立ASP页四、使用脚本语言五、使用变量和常量六、使用集合七、ASP内建对象八、向浏览器发送内容九、包含文件十、访问数据库十一、调试ASP脚本十二、维护ASP应用程序的平安一、关于ASPActiveServerPages〔ASP〕是效劳器端脚本编写环境,使用它可以创立和运行动态、交互的Web效劳器应用程序。使用ASP可以组合HTML页、脚本命令和ActiveX组件以创立交互的Web页和基于Web的功能强大的应用程序。ASP应用程序很容易开发和修改。HTML编写人员如果您是位HTML编写人员,您将发现ASP脚本提供了创立交互页的简便方法。如果您曾想从HTML表格中收集数据,或用顾客的姓名个人化HTML文件,或根据浏览器的不同使用不同的特性,您会发现ASP提供了一个出色的解决方案。以前,要想从HTML表格中收集数据,就不得不学习一门编程语言来创立一个CGI应用程序。现在,您只要将一些简单的指令嵌入到您的HTML文件中,就可以从表格中收集数据并进行分析。您再不必学习完整的编程语言或者单独编译程序来创立交互页。随着不断掌握使用ASP和脚本语言的技巧,您可以创立更复杂的脚本。对于ASP,您可以便捷地使用ActiveX组件来执行复杂的任务,比方连接数据库以存储和检索信息。对ASP脚本的逐步介绍,请参阅ASP教程。然后您可以再回到这些主题中了解关于编写ASP脚本的详细信息。有经验的脚本编写人员如果您已经掌握一门脚本语言,如VBScript、JavaScript或PERL,而且您已经了解使用ASP的方法。只要安装了符合ActiveX脚本标准的相应脚本引擎,就可以在ASP页中使用任何一种脚本语言。ASP带有MicrosoftVisualBasicScriptingEdition〔VBScript〕和MicrosoftJScript的脚本引擎,这样您可以立即开始编辑脚本。PERL、REXX和Python的ActiveX脚本引擎可以从第三方开发人员处获得。Web开发人员如果您已经掌握了一门编程语言,如VisualBasic,您将发现ASP是快速创立Web应用程序的一个非常灵活的方法。通过向HTML中添加脚本命令,您能够创立应用程序的HTML接口。通过创立自己的ActiveX组件,可以将应用程序中的商业逻辑封装到能够从脚本、其他组件或从其他程序中调用的模块。使用ASP进行计算的Web可转化为有形的利益,它使Web供给商能够提供交互的商业应用而不仅仅是发布内容。例如,旅行社能够比公布航空时刻表做得更多;用ASP脚本可以让客户观察现有的航班、比拟费用并预定座位。包含在WindowsNTOptionpack中的MicrosoftTransactionServer〔MTS〕可以降低在效劳器上构造程序的复杂性和费用。MTS可以解决开发那些保密性强的、可分级的以及可靠的Web应用程序的复杂性问题。ActiveServerPages模型浏览器从Web效劳器上请求.asp文件时,ASP脚本开始运行。然后Web效劳器调用ASP,ASP全面读取请求的文件,执行所有脚本命令,并将Web页传送给浏览器。由于脚本在效劳器上而不是在客户端运行,传送到浏览器上的Web页是在Web效劳器上生成的。所以不必担忧浏览器能否处理脚本:Web效劳器已经完成了所有脚本的处理,并将标准的HTML传输到浏览器。由于只有脚本的结果返回到浏览器,所以效劳器端脚本不易复制。用户看不到创立他们正在浏览的页的脚本命令。二、ASP的新功能ActiveServerPages在功能方面有所增强,更易于开发应用程序。Microsoft脚本调试程序。您可以使用脚本调试程序调试.asp文件。请参阅调试ASP脚本。事务性脚本。ASP页和页中使用的对象可以运行于事务环境之下。在页上的全部工作只有两种结果:提交或终止。事务可以保护应用程序免于因失败而导致数据丧失。请参阅创立事务性脚本。管理工具。许多应用程序设置可在Internet效劳管理器上进行,这是InternetInformationServer和PersonalWebServer〔在WindowsNTWorkstation上〕的管理工具。请参阅配置ASP应用程序。隔离ASP应用程序。您可以隔离ASP应用程序以便它们能在Web效劳器上独立的内存空间内运行。万一某个应用程序失败时,可以保护其他应用程序和Web效劳器。它也使您可以在不停止Web效劳器的情况下,停止一个应用程序或从内存中卸载其组件。请参阅隔离应用程序.文件上载。浏览器可以通过PostingAcceptor应用程序将文件上载到Web效劳器。可以编写ASP脚本来发送带有从PostingAcceptor传来的信息的email,如每一个上载文件的位置和名称。请参阅PostingAccepter文档〔在MicrosoftSiteServerExpress的目录表中〕。新的ASP组件。ASP提供了新的根底组件。有关概述请参阅ActiveX组件。应用程序根目录的改变。ASP应用程序的根目录在您的Web站点上可以是物理目录。以前,根目录必须映射为虚拟目录。现在可以用Internet效劳管理器指示ASP应用程序的根目录。请参阅创立应用程序。必须将.asp文件置于应用程序树中,Web效劳器才能检测文件的改变并且自动重装它们。支持InternetExplorer4.0通道和Web预测。当ASP要发送包含通道定义命令的文件时,它会自动告诉InternetExplorer4.0。使用ASP很容易就能生成通道定义(.cdf)文件。支持1.1协议。InternetInformationServer和PersonalWebServer支持1.1协议。在响应支持1.1的浏览器〔例如InternetExplorer4.0〕时,这一支持可使ASP利用新协议的高效率。例如,当向浏览器返回页的时候,ASP使用大块转换编码以提高网络效率。三、创立ASP页ActiveServerPages〔ASP〕文件是以.asp为扩展名的文本文件,这个文本文件可以包括以下局部的任意组合:文本HTML标记ASP脚本命令创立.asp文件非常容易。如果要在HTML文件中添加脚本,只需将该文件的扩展名.htm或.html替换为.asp就可以了。要使.asp文件可用于Web用户,请将这个新文件保存在Web站点上的目录中〔请确定启用了该目录的脚本和执行权限〕。使用浏览器查看该文件时,可以看到ASP处理并返回了HTML页。现在可以在.asp文件中添加脚本命令了。注意因为.asp文件需要额外的处理,请不要将所有的HTML页都转换为ASP页。应该只将包含脚本命令的文件转换为.asp文件。.asp和.htm文件可以放置在相同的目录中。使用任何的文本编辑器都可以创立.asp文件。使用那些带有ASP增强支持的编辑器将更能提高效率,如MicrosoftVisualInterDev。如果您从未使用过HTML,请考虑先使用MicrosoftFrontPage。使用FrontPage创立文档和格式化文本就象使用文字处理工具一样简单。接下来还可以使用InsertScript命令在FrontPage创立的HTML页中参加简单的ASP命令。参加Script命令脚本是一系列的命令和指令。与HTML标签不同,script命令指示Web效劳器执行操作,而HTML标签只是简单地格式化文本或读取图形、视频及音频文件。Script命令可以在变量中存储用户名,在返回到浏览器的页中显示用户名或将用户名存储在数据库中。脚本命令通过定界符与文本区别开来。定界符是字符或一串字符,它标志单元开始或结束。HTML使用定界符棗小于号〔<〕和大于号〔>〕括入HTML标签。ASP使用定界符<%和%>括入脚本命令。您可以在定界符中括入任何命令,只要这些命令对正在使用的脚本语言有效。下面的例子展示了包含脚本命令的简单的HTML页:<HTML><BODY>Thispagewaslastrefreshedon<%=Now%>.</BODY></HTML>VBScript函数Now返回当前的日期和时间。Web效劳器处理该页时,会使用当前的日期和时间替换<%=Now%>并且将该页返回到浏览器:Thispagewaslastrefreshedon8/1/972:20:00PM.定界符括入的命令被称为主脚本命令。这些命令被主脚本语言处理。在脚本定界符中使用的任何命令都必须对主脚本语言有效。默认情况下,主脚本语言是VBScript。要设置另一种语言。请参阅使用脚本语言。如果您已经熟悉了客户端脚本编写〔编写在浏览器上运行的脚本〕,请注意不要用HTML<SCRIPT>元素括入表达式。在编写效劳器端脚本时,只用<SCRIPT>元素在主脚本语言外的其他语言中定义过程。关于详细信息,请参阅使用脚本语言。合成HTML和脚本命令在ASP定界符中可以包含任何在主脚本语言中合法的语句、表达式、过程或操作符。在VBScript和其他脚本语言中,语句是语法完整的单元,该单元表达某项活动、声明或定义。下面的条件语句If...Then...Else是一条常见的VBScript语句。<%IfTime>=#12:00:00AM#AndTime<#12:00:00PM#ThenGreeting="GoodMorning!"ElseGreeting="Hello!"EndIf%><%=Greeting%>这条语句将值"GoodMorning!"或值"Hello!"存储在变量greeting中。<%=Greeting%>命令将当前的变量值发送到浏览器中。这样,在〔Web效劳器所在时区的〕正午12点前浏览该脚本的用户将看到:GoodMorning!在正午12点或以后浏览此脚本的用户将看到:Hello!在语句的不同局部之间可以参加HTML文本。例如,下面的脚本在If...Then...Else语句中参加了HTML,产生了与上面脚本同样的结果:<%IfTime>=#12:00:00AM#AndTime<#12:00:00PM#Then%>GoodMorning!<%Else%>Hello!<%EndIf%>如果条件为真,也就是说,如果时间为午夜、午夜以后或者中午以前,那么Web效劳器将跟随条件〔"GoodMorning"〕的HTML发送到浏览器;否那么,将跟随Else的HTML〔"Hello"〕发送到浏览器。这种混合HTML和脚本命令的方式可以方便地将If...Then...Else语句变换为几行HTML文本。如果要在Web页上显示多处问候,前一个例子更为有用。只需要设置一次变量,就可以重复显示。最好从脚本命令中将HTML文本返回到浏览器,而不用脚本命令散布HTML文本。要将文本返回到浏览器,请使用ASP的内建对象Response。下面的例子可以产生与前一个脚本同样的结果:<%IfTime>=#12:00:00AM#AndTime<#12:00:00PM#ThenResponse.Write"GoodMorning!"ElseResponse.Write"Hello!"EndIf%>Response.Write将跟随的文本发送到浏览器。要动态构造返回浏览器的文本,请在语句中使用Response.Write。例如,可能要构造包含一些变量值的字符串。在使用组件和对象以及向浏览器传送内容中将了解到更多有关Response对象和一般对象的信息。现在,先了解将脚本命令插入到HTML页中的几种方法。在ASP定界符中可以包含用默认主脚本语言编写的过程。详细信息,请参阅使用脚本语言。如果正在使用JScript命令,可以插入花括号指示语句块直接进入ASP命令,而不用考虑它是否夹杂着HTML标签和文本。例如:<%if(screenresolution=="low"){%>Thisisthetextversionofapage.<%}else{%>Thisisthemultimediaversionofapage.<%}%>使用ASP指令ASP提供了您使用的脚本语言以外的指令。这是一些输出指令和处理指令。ASP的输出指令<%=expression%>显示表达式的值。这个输出指令等同于使用Response.Write显示信息。例如,输出表达式<%=sport%>将文字climbing〔变量当前的值〕传送到浏览器。ASP处理指令<%@keyword%>为ASP提供处理.asp文件所需的信息。例如,下面的指令将VBScript设为该页的主脚本语言:<%@LANGUAGE=VBScript%>处理指令必须出现在.asp文件的第一行。不要将处理指令放在包含#include语句的文件中。必须在at标记〔@〕和关键字之间参加一个空格。处理指令有以下关键字:LANGUAGE关键字设置页的脚本语言;请参阅使用脚本语言。CODEPAGE关键字设置页的代码页〔字符编码〕;请参阅使用国际站点。LCID关键字设置页的现场标识符;请参阅使用国际站点。TRANSACTION关键字指定将在事务处理环境下运行的页;请参阅创立事务处理脚本。ENABLESESSIONSTATE关键字指定ASP页是否使用会话状态;请参阅管理会话。可以在单个指令中包含多个关键字;关键字/值对之间必须由空格分开。不要在等号〔=〕左右参加空格。下面的例子中设置了脚本语言和代码页:<%@LANGUAGE=JScriptCODEPAGE=932%>在脚本中的空白字符如果您的主脚本语言是VBScript或者JScript,ASP从指令中删除空白字符。使用其他脚本语言时,ASP保存空白字符,这样那些需要使用位置和缩进的语言,如Python就可以被正确解释了。空白字符包括空格、制表符、回车和换行符。使用VBScript和JScript时,在翻开定界符之后和关闭定界符之前使用空白字符更容易阅读命令。下面的命令都是合法的:<%Color="Green"%><%Color="Green"%><%Color="Green"%>ASP将一个语句的关闭定界符与下一个语句的翻开定界符之间的空白字符删除。要保存两个语句间的空白字符,比方在句子中显示变量值的时候,请使用HTML不间断空符〔 〕。例如:<%'Definetwovariableswithstringvalues.Hello="Hello"World="World"%><P>Myresponseistosay"<%=Hello%> <%=World%>."</P>四、使用脚本语言脚本语言是介于HTML和Java、C++和VisualBasic之类的编程语言之间的语言。HTML通常用于格式化文本和链接网页。编程语言通常用于向计算机发送一系列复杂指令。脚本语言也可用来向计算机发送指令,但它们的语法和规那么没有可编译的编程语言那样严格和复杂。脚本语言主要用于格式化文本和使用以编程语言编写的已编译好的组件。ActiveServerPages使Web开发商用多种脚本语言编写完整的过程成为可能。事实上,在单个.asp文件内部就可以使用多种脚本语言。另外,由于脚本是在效劳器端读取和处理的,所以请求.asp文件的客户端浏览器并不需要支持脚本。您可以使用任意一种其相应的脚本引擎已安装在Web效劳器上的脚本语言。脚本引擎是处理用某种语言书写的命令的程序。ActiveServerPages带有两个脚本引擎:MicrosoftVisualBasicScriptingEdition(VBScript)和MicrosoftJScript。您也可以安装和使用其他的脚本语言引擎,例如REXX和Perl。如果您已经是VisualBasic程序员,就可以马上使用VBScript,它是VisualBasic的子集。如果您是Java、C或C++程序员,您会发现JScript语法对您来说是熟悉的,虽然JScript与Java或C并没有联系。如果您熟悉其他脚本语言,例如REXX或Perl,您可获取和安装相应的脚本引擎,这样就可以使用您熟悉的脚本语言了。ActiveServerPages是ActiveX脚本的宿主。要使用一种语言,必须安装脚本引擎,该引擎必须遵循ActiveX脚本标准并作为一个COM〔组件对象模型〕对象驻留在Web效劳器上。设置主脚本语言ASP主脚本语言是用来处理在分界符<%和%>内部的命令的语言。默认时,主脚本语言是VBScript。您可以将任何一种具有脚本引擎的脚本语言作为主脚本语言。您可以逐页设置主脚本语言,也可以在ASP应用程序中设置所有页的主脚本语言。为某页设置语言要设置单个页的主脚本语言,可将<%@LANGUAGE%>指令添加到.asp文件的开头。该指令的语法是:<%@LANGUAGE=ScriptingLanguage%>其中ScriptingLanguage就是您所设置的页的主脚本语言。如果对某页进行了设置,那么该页将忽略在应用程序中对所有页的全局设置。请遵循使用ASP指令的指导。详细信息,请参阅“创立ASP页〞。注意要将不支持Object.Method语法的语言作为主脚本语言使用,必须先创立LanguageEngines注册表键。详细信息,请参阅注册表。为应用程序设置语言在应用程序中,如要为所有页设置主脚本语言,可在Internet效劳管理器的“App选项"选项卡上设置"默认的ASP语言"属性。详细信息,请参阅配置ASP应用程序。在效劳器上使用VBScript和JScript在效劳端通过ASP使用VBScript时,两个VBScript特征将失效。由于ActiveServerPages脚本是在效劳器端执行的,表示用户接口的元素的VBScript语句InputBox和MsgBox将不被支持。另外,在效劳器端的脚本中,请不要使用VBScript函数CreateObject和GetObject。而要使用Server.CreateObject,这样ASP就可以跟踪对象实例了。用CreateObject或GetObject创立的对象不能访问ASP内建对象,也不能参与事务处理。该规那么的一个例外是如果您使用的是Admin对象和Javamonikers。详细信息,请参阅IISAdmin对象和创立Java类的实例。关于所有VBScript和JScript的操作符、函数、语句、对象、属性及方法的列表及详细说明,请参阅VBScript语言参考和JScript语言参考。包含注释由于ASP脚本是在效劳器端处理的,所以即使客户端的浏览器不支持脚本语言,也不必通过包含进HTML注释标记来隐藏脚本,但客户端的脚本那么通常需要这样处理。在内容送到浏览器之前,所有ASP命令都已被处理好了。您可用HTML注释将注释加进HTML页。注释将返回给浏览器,假设用户浏览HTML源文件,就可以看见。VBScript注释VBScript支持撇号型注释。与HTML注释不同,当处理脚本时,它们将被删除,而不是被送到浏览器。<%'Thislineandthefollowingtwoarecomments.'ThePrintTablefunctionprintsall'theelementsinanarray.CallPrintTable(myarray())%>输出表达式不能包括注释。例如,下面的第一行将正常运行,而第二行那么不能,因为它是以<%=开头的。<%i=i+1'thisincrementsi.Thisscriptwillwork.%><%=name'thisprintsthevariablename.Thisscriptwillfail.%>JScript注释JScript支持//注释符。每一个注释行中都必须使用该注释符。<%CallPrintDate%><SCRIPTLANGUAGE=JScriptRUNAT=Server>//ThisisadefinitionfortheprocedurePrintDate.functionPrintDate(){varxx=newDate()//Thislinesendsthecurrentdatetothebrowser,//translatedtoastring.Response.Write(x.toString())}</SCRIPT>大小写敏感性VBScript不区分大小写。例如,您可以用Request或request来引用ASPRequest对象。不区分大小写的后果是您不能用大小写来区分变量名。例如,您不能创立两个名为Color和color的单独变量。JScript区分大小写。要在脚本中使用JScript关键字,就必须按参考页中所示的大小写来书写。例如,用date来代替Date将导致错误。在JScript中,对象名必须大写;方法名和属性名可大写也可小写。本文所示的ASP内建对象的情况将在JScript命令中正常工作。五、使用变量和常量变量是计算机内存中已命名的存储位置,其中包含了数字或字符串等数据。变量包含的信息被称为变量的值。变量使用用户便于理解脚本操作的名称为用户提供了一种存储、检索和操作数据的途径。声明和命名变量命名和声明变量应遵循脚本语言的规那么及指导。即使在使用变量前不需要去声明变量,也应养成在编程时声明变量的良好习惯,因为这样有助于防止错误发生。声明一个变量意味着告诉脚本引擎,有一个特定名称的变量,这样就可以在脚本中引用该变量。VBScriptVBScript并不需要声明变量,但在使用所有变量前声明它们是一种好的脚本书写习惯。要在VBScript中声明变量,请用Dim、Public或Private语句。例如:<%DimUserName%>可以在需要显式声明变量的.asp文件中用VBScriptOptionExplicit语句。OptionExplicit必须在任何一个ASP指令之后及任何一个HTML文本或脚本命令之前出现。该语句仅影响用VBScript书写的ASP命令,而不会影响JScript命令。关于这些命令的详细信息,请参阅VBScript语言参考。JScriptMicrosoftJScript仅当变量为本地过程变量时才需声明,但在使用所有变量前声明它们是一种好的脚本书写习惯。要声明一个变量,请使用var语句。例如:<%varUserName;%>有关var语句的详细信息,请参阅JScript语言参考。变量作用域变量的作用域即生命期,决定哪些脚本命令可访问变量。在过程内部声明的变量具有局部作用域。每执行一次过程,变量就被创立然后消亡。而过程外部的任何命令都不能访问它。在过程外部声明的变量具有全局作用域,其值能被ASP页上的任何脚本命令访问和修改。声明变量时,局部变量和全局变量可以有相同的名称。而改变其中一个的值并不会改变另一个的值。如果没有声明变量,那么可能不小心会改变一个全局变量的值。例如,以下脚本命令返回值1,虽然有两个名为Y变量:<%DimYY=1CallSetLocalVariableResponse.WriteYSubSetLocalVariableDimYY=2EndSub%>由于变量没有显式声明,以下的脚本命令将返回2。当过程调用将Y设置为2时,脚本引擎认为该过程是要修改全局变量:<%Y=1CallSetLocalVariableResponse.WriteYSubSetLocalVariableY=2EndSub%>养成显式声明所有变量的编程习惯可以防止许多问题。尤其在当您用#include语句将文件包含进ASP主页时,就显得更为重要。一个独立文件中被包含的脚本是被当作整个包含它的文件的一局部来处理的。用不同的名称来命名主脚本和被包含脚本中用到的变量,这容易被遗忘,除非声明变量。为变量赋予会话或应用程序作用域全局变量仅在单个ASP页中可用,要使它在单个ASP页之外可用,就必须为变量赋予会话或应用程序作用域。会话作用域变量对一个用户所请求的ASP应用程序中的所有页都是可用的。应用程序作用域变量也如此。对单个用户来说,会话变量是存储信息的最正确途径,例如,首选项、用户名或用户标识。对于一个特殊应用程序的所有用户,应用程序作用域是存储信息的最正确途径,例如,应用程序特定的问候语或应用程序所需的初始值。ASP提供两个内建对象来让您存储变量:Session对象和Application对象。您也可以创立具有会话或应用程序作用域的对象实例。详细信息,请参阅设置对象作用域。会话作用域要为变量赋予会话作用域,将该变量存储到Session对象中即可,方法是为该对象的已命名条目指派一个值。例如,以下命令将两个新的变量存储到Session对象中。<%Session(\"FirstName\")=\"Jeff\"Session(\"LastName\")=\"Smith\"%>要Session对象中检索信息,可以用输出指令(<%=)或Response.Write访问已命名的条目。以下例如用输出指令显示Session(\"FirstName\")的当前值:Welcome<%=Session(\"FirstName\")%>可在Session对象中存储用户首选项,然后就可以访问这些首选项,从而决定将哪一页返回给用户。例如,您可以允许用户在应用程序的第一页指定纯文本内容,然后将这一选择应用到用户在该应用程序中访问的所有后续页。<%IfSession(\"ScreenResolution\")=\"Low\"Then%>Thisisthetextversionofthepage.<%Else%>Thisisthemultimediaversionofthepage.<%EndIf%>应用程序作用域要为变量赋予应用程序作用域,将该变量存储到Application对象中即可,方法是为该对象的已命名条目指派一个值。例如,以下命令将一个应用程序特定的问候语存储到Application对象中:<%Application(\"Greeting\")=\"WelcometoExplorationAir\"%>要从Application对象中检索信息,可以使用ASP输出指令(<%=)或Response.Write从该应用程序的任意后续页中访问已命名条目。以下例如用输出指令显示Application(\"Greeting\")的值:<%=Application(\"Greeting\")%>使用常量常量是用来代替一个数或字符串的名称。一些随ASP提供的根本组件,例如ActiveXDataObjects(ADO),定义了您在脚本中可以使用的常量。组件可在一个组件类型库中声明常量,组件类型库是一个包含ActiveX组件所支持的对象和类型的信息的文件。一旦在Global.asa文件中声明了一个类型库,您就可以在该应用程序的任意页中使用已定义的常量。可在Global.asa中用<METADATA>标记为应用程序声明类型库。例如,要声明ADO类型库,可用以下语句:<!--METADATATYPE=\"typelib\"FILE=\"c:\\programfiles\\commonfiles\\system\\ado\\msado15.dll\"-->这样,您就可以在与Global.asa文件相同的应用程序的中使用ADO常量。在下面的例如中,adOpenKeyset和adLockOptimistic是ADO常量:\'CreateandOpenRecordsetObjectSetRsCustomerList=Server.CreateObject(\"ADODB.Recordset\")RsCustomerList.ActiveConnection=OBJdbConnectionRsCustomerList.CursorType=adOpenKeysetRsCustomerList.LockType=adLockOptimistic有关<METADATA>标记的参考信息,请参阅TypeLibrary声明。在以前版本的ASP中,一些组件在文件中提供常量定义,每个使用那些组件的ASP文件必须包含该文件。用#include指令来包含常量定义的用法仍被支持,但使用类型库通常更方便并且能使脚本更易于升级。在以后版本的ASP中,组件可能将不再提供常量定义文件。您可以定义自己的常量。在VBScript中,用Const语句,在JScript中,用var语句。如果在多个ASP页中使用常量,可在独立的文件中放置常量,然后将其包含进每一个使用该常量的ASP文件中去。六、使用集合大多数ASP内建对象支持集合。集合是存储字符串、数字、对象和其他值的地方。除了在存储或取出工程时集合会自动扩展与搜索外,集合与数组非常相近。与数组不同的是,集合被修改后,工程的位置将会移动。可以通过集合中工程的名称、索引或者通过在集合的所有工程中遍历访问工程。通过名称和索引访问工程通过使用工程名称可以访问集合中的具体工程。例如,Contents集合拥有在Session对象中保存的所有变量。同样也拥有由Server.CreateObject创立的所有对象。假设在Session对象中存储了以下用户信息:<%Session.Contents(\"FirstName\")=\"Sam\"Session.Contents(\"LastName\")=\"Woo\"Session.Contents(\"Age\")=29%>可以使用在集合中存储工程时关联的名称访问工程。例如,下面的表达式返回字符串“Sam\":<%=Session.Contents(\"FirstName\")%>通过使用与工程关联的索引或号码也可以访问工程。例如,下面的表达式检索存储在Session对象的第二个存储槽中的信息并且返回\"Woo\":<%=Session.Contents(2)%>ASP集合从1开始编号。当在集合中增加或删除工程时,与工程关联的索引将会改变。所以不能认为工程的索引始终不变。正如将在下面的主题中说明的那样,利用索引的访问一般用来遍历集合,或访问只读集合中的工程。通过使用速记的名称可以访问工程。ASP以特定的顺序搜索与对象关联的集合。如果在对象的集合中特定名称的工程只出现一次的话,可以消除该集合的名称:<%=Session(\"FirstName\")%>访问存储在Application或Session对象中的工程时,消除集合名称一般是平安的。但是,对于Request对象,最好指定集合名称,因为该集合很可能包含重复的名称。遍历集合在集合的所有工程中遍历可以了解集合中存储的工程或修改工程。遍历集合时,必须提供集合名称。例如,可以使用VBScript中的For...Each语句访问存储在Session对象中的工程:<%\'Declareacountervariable.DimItem\'Foreachiteminthecollection,displayitsvalue.ForEachIteminSession.ContentsResponse.WriteSession.Contents(Item)&\"<BR>\"Next%>可以使用VBScript中的For...Next语句遍历集合。例如,要列出上例中存储在Session中的三个工程,可以使用以下语句。<%\'Declareacountervariable.DimItem\'Repeattheloopuntilthevalueofcounterisequalto3.ForItem=1to3Response.WriteSession.Contents(Item)&\"<BR>\"Next%>因为一般不知道存储在集合中的工程个数,ASP支持集合的Count属性,这个属性返回集合中的工程数。可以使Count属性指定计数器的终值。<%\'Declareacountervariable.DimItem\'Repeatthisloopuntilthecounterequalsthenumberofitems\'inthecollection.ts(Item)&\"<BR>\"Next%>可以在脚本中使用for语句在集合中循环。在JScript的for语句中使用Count属性时,为了收到更大的效果,应该将Count值分配给本地变量并使用该变量设置计数器终值。这样,脚本引擎就不需要每次循环都查寻Count的值。下面的例子展示了这个技巧:<%varitem,numitems;numitems=Session.Contents.Count;for(item=1;item<=numitems;item++){Response.Write(Session.Contents(item)+\"<BR>\")}%>MicrosoftJScript3.0引入了Enumerator对象。可以使用该对象遍历ASP集合。atEnd方法指出了集合中是否还存在工程。moveNext方法移动到集合中的下一个工程。<%//CreateanEnumeratorobjectvarmycoll=newEnumerator(Session.Contents);//Iteratethroughthecollectionanddisplayeachitemwhile(!mycoll.atEnd()){varx=mycoll.item();Response.Write(Session.Contents(x)+\"<BR>\");mycoll.moveNext();}%>遍历带子关键字(Subkeys)的集合脚本在单一cookie中嵌入相关值以减少在浏览器和Web效劳器之间传送的cookie数目。因此Request和Response对象的Cookies集合能够在单一工程中拥有多个值。这些子工程或子关键字可以被单个访问。只有Request.Cookies和Response.Cookies集合支持子关键字(Subkeys)。Request.Cookies只支持读操作;Response.Cookies只支持写操作。可以列举Request.Cookie集合中所有的cookie以及Cookie中所有的子关键字(Subkeys)。但是,如果在没有子关键字(Subkeys)的Cookie上遍历子关键字,将不会产生任何结果。通过使用.HasKeys语法首先检查cookie是否含有子关键字(Subkeys),就可以防止这种情况。下面的这个例子展示了这个技巧。<%\'DeclarecountervariablesDimCookie,Subkey\'Displaytheentirecookiecollection.Response.WriteCookie&\"<BR>\"IfRequest.Cookies(Cookie).HasKeysThen\'DisplaythesubkeysForEachSubkeyinRequest.Cookies(Cookie)Response.WriteSubkey&\"=\"&Request.Cookies(Cookie)(Subkey)&\"<BR>\"NextElseResponse.Write\"Nosubkeysinthiscookie<BR>\"EndIfNext%>遍历对象集合Session和Application集合可以保存数量变量或者对象实例。Contents集合拥有数量变量和通过调用Server.CreateObject生成的对象实例。StaticObjects集合拥有在Global.asa文件中使用HTML<OBJECT>元素创立的对象。在遍历包含对象的集合时,可以访问对象的标识符或对象的方法和属性。例如,假设应用程序使用一些对象创立用户帐号,而且每个对象有初始化方法,可以遍历StaticObjects集合来调用每个初始化方法:<%sSession.StaticObjects(Object).InitializeUserNext%>ASP集合有何不同之处?尽管在本主题中讨论的ASP集合与VisualBasic的Collection对象非常相似,但还是有些不同。ASP集合支持Count属性和Item方法,但不支持Add和Remove方法。设置对象作用域对象的作用域决定哪些脚本可以使用该对象。默认情况下,当您创立对象实例时,该对象具有页作用域。同一ASP页中的任何脚本命令都能使用该页作用域的对象;当ASP页送回客户端时,该对象即被释放。对大多数对象来说,推荐的作用域是页作用域。您可以改变一个对象的作用域,使其可被其他页的脚本使用。本主题将解释如何使用页作用域的对象以及如何改变对象的作用域。使用页作用域对象在ASP页上用Server.CreateObject创立的对象在该页的生存期内一直存在。该对象对该页的任何脚本命令都是可访问的,当ASP处理完该页时,该对象即被释放。因此,对象具有该页的作用域或生命周期。在用VisualBasic或VBScript编程时,要注意在ASP处理完该页之前不要释放对象。例如,以下语句经常用于通过将对象变量赋以Nothing值来释放对象:SetmyObj=Nothing如果您在ASP页中包含了该语句,那么任何使用myObj的企图都将会返回一个预期的错误代码。但在内部,即使在对象释放以后,ASP仍保存对它的引用。当您在脚本中不能使用对象时,对象的资源直到ASP处理完页之后才释放。同样,如果您通过创立另一个对象实例并将其赋给已使用过的对象变量来释放该对象时,ASP将保存对原对象实例的引用。对大多数脚本来说,创立多个对象可能不会产生问题,但如果对象使用共享资源,比方数据库连接,就有可能出现问题。由于对象有页作用域,所以不要依靠手工释放的对象。例如,以下的循环创立1001个Connection对象,它将能翻开大多数的连接甚至于一个大型的SQLserver:<%ForI=0to1000SetConn.Open\"connectionstring\"Next%>总的来说,应该尽量防止在一个循环内部创立对象。如果无法防止,您应该手工释放被对象使用过的资源。如果Connection对象仅被创立一次,且数据资源的物理连接在每个循环中被翻开然后关闭,那么上例将会正常运行:<%SetForI=0to1000Conn.Open\"connectionstring\"Conn.CloseNext%>为对象赋予会话作用域在应用程序中,对于每个新会话,都会创立session-scope对象,并且在会话结束后会将其释放。因此,每个活动的会话都有一个对象。会话作用域用于从多个脚本中调用的对象,但只影响一个用户会话。您可以只在需要时才为对象赋予会话作用域。如果确实需要使用会话作用域,那么就必须了解提供对象的组件的线程模型,因为它影响性能和对象的平安环境。详细信息,请参阅本主题的“高级信息:性能问题〞。要为对象赋予会话作用域,请将对象存储在ASPSession内建对象中,您既可以在Global.asa文件中使用<OBJECT>标记,也可以在ASP页上使用Server.CreateObject方法创立具有会话作用域的对象实例。在Global.asa文件中,您可用扩展了RUNAT属性〔必须设置为Sever〕和SCOPE属性〔必须设置为Session〕的<OBJECT>标记。以下例如创立一个AdRotator对象的会话作用域实例:<OBJECTRUNAT=ServerSCOPE=SessionID=MyAdPROGID=\"MSWC.Adrotator\"></OBJECT>一旦您在Session对象中存储了对象,您就可以从应用程序的任何页中访问该对象。下面的语句使用上例中由<OBJECT>标记创立的对象实例:<%=MyAd.GetAdvertisement(\"addata.txt\")%>在ASP页上,您也可以使用Server.CreateObject方法将对象存储在Session内建对象中。以下例如在Session对象中存储AdRotator对象的一个实例。<%SetSession(\"MyAd\")=Server.CreateObject(\"MSWC.Adrotator\")%>要显示广告,您首先应该获取存储在Session对象中的AdRotator对象的实例,然后才能调用方法来显示对象:<%SetMyAd=Session(\"MyAd\")%><%=MyAd.GetAdvertisement(\"addata.txt\")%>在用<OBJECT>标记声明的对象被某个.asp文件中的脚本命令引用之前,ASP并不创立其实例。Server.CreateObject方法那么立即创立该对象实例。因此,对会话作用域对象来说,使用<OBJECT>标记要比Server.CreateObject属性更好。为对象赋予应用程序作用域application-scope对象是在应用程序启动时就创立的对象的单个实例。该对象由所有客户端请求共享。仅在极少数情况下,您才需要为对象赋予应用程序作用域。一些实用程序对象,例如计数器等,可能需要应用程序作用域。但一般来说,您可用在下一节中建议的替代方案。另外,线程模型会影响性能和对象平安环境〔请参阅本主题的“高级信息:性能问题〞〕。要为对象赋予应用程序作用域并将其存储在ASPApplication内建对象中,既可以使用Global.asa文件中的<OBJECT>标记,也可以使用ASP页上的Server.CreateObject方法创立应用程序作用域的对象实例。在Global.asa文件中,您可用扩展了RUNAT属性〔必须设置为Sever〕和SCOPE属性〔必须设置为Session〕的<OBJECT>标记。在ASP页中,您可以使用Server.CreateObject将对象实例存储在Application内建对象中。关于使用<OBJECT>标记和Server.CreateObject的例如,请参阅上一节"为对象赋予会话作用域"。会话和应用程序作用域的替代方案仅当需要时,才能为对象赋予会话或应用程序作用域。因为在会话或应用程序结束运行之前,这些对象会一直保存。它们会占用内存或数据库连接等资源,这些资源可能会在其他方面更有用。另外,组件的线程模型会影响您从中所创立的对象的性能,尤其是那些具有会话或应用程序作用域的对象。在很多情况下,比创立应用程序或会话作用域对象更好的方法就是利用会话或应用程序作用域变量,将信息传递给在网页一级创立的对象。例如,不要为ADOConnection对象赋予会话或应用程序作用域,因为它创立的连接会在相当长的一段时间一直保持翻开而此时脚本已不再使用ODBC连接共享。但您可以将ODBC连接字符串存储在Session或Application内建对象中,并在网页上从创立的Connection对象实例中获取该字符串。通过这种方式,您可以存储在会话或应用程序名称空间中频繁使用的信息,但只有在需要时才创立用该信息的对象。关于作用域变量的详细信息,请参阅“使用变量和常量〞。用户自定义的JScript对象您可以通过定义一个创立和初始化新对象的属性和方法的构造函数来创立自己的JScript对象。当脚本用new操作符来调用构造函数时,就会创立该对象的实例。ASP脚本支持用户自定义的对象,当具有页作用域时,后者正常运行。但如果为用户自定义的JScript对象赋予应用程序或会话作用域,将可能影响该对象的功能。特别是,假设一个对象具有会话或应用程序作用域,那么其他页的脚本可以获取该对象的属性,但是却不能调用其方法。高级信息:性能问题组件的线程模型可能会影响Web站点的性能,一般来说,带有Both标记的对象是推荐在所有的ASP脚本中使用的对象,尤其是在Session和Application对象中。不推荐使用单线程对象,因为您可能不会始终控制所用对象的线程模型,所以,以下的指导可帮助您获得最正确性能:页作用域对象。带有Both或Apartment标记的对象将给予您最正确的性能。应用程序作用域对象。一般来说,应防止在Application对象中放置对象。如果确需使用应用程序作用域对象,您会从结合了FreeThreadedMarshaler的带有Both标记的对象中获得最正确性能。您既可以用<OBJECT>标记也可以用Server.CreateObject方法在Application对象中存储带有Single、Free或Both标记的对象。您必须用单元线程对象来使用<OBJECT>标记。会话作用域对象。带有Both标记的对象将为您提供最正确性能。用单线程或单元线程对象会导致Web效劳器将会话锁定在一个线程上。自由线程对象不会锁定会话,但运行速度不高。在Session对象中,您可以用<OBJECT>标记或Server.CreateObject方法存储对象。如果您已安装了SDK文档,请参阅"创立ASP组件〞,您将会获得有关线程模型及其隐含的组件性能的详细信息。〔在Windows95及其后续版本中SDK文档不可用。〕七、ASP内建对象ActiveServerPages提供内建对象,这些对象使用户更容易收集通过浏览器请求发送的信息、响应浏览器以及存储用户信息〔如用户首选项〕。本文简要说明每一个对象。有关每个对象的详细信息,请参阅内建对象参考。Application对象可以使用Application对象使给定应用程序的所有用户共享信息。Request对象可以使用Request对象访问任何用请求传递的信息,包括从HTML表格用POST方法或GET方法传递的参数、cookie和用户认证。Request对象使您能够访问发送给效劳器的二进制数据,如上载的文件。Response对象可以使用Response对象控制发送给用户的信息。包括直接发送信息给浏览器、重定向浏览器到另一个URL或设置cookie的值。Server对象Server对象提供对效劳器上的方法和属性进行的访问。最常用的方法是创立ActiveX组件的实例(Server.CreateObject)。其他方法用于将URL或HTML编码成字符串,将虚拟路径映射到物理路径以及设置脚本的超时期限。Session对象可以使用Session对象存储特定的用户会话所需的信息。当用户在应用程序的页之间跳转时,存储在Session对象中的变量不会去除;而用户在应用程序中访问页时,这些变量始终存在。也可以使用Session方法显式地结束一个会话和设置空闲会话的超时期限。ObjectContext对象可以使用ObjectContext对象提交或撤消由ASP脚本初始化的事务。====================================Application对象集合:ContentsStaticObjects方法:LockUnlock事件:Application_OnEndApplication_OnStartObjectContext对象方法:SetAbortSetComplete事件:OnTransactionAbortOnTransactionCommitRequest对象集合:ClientCertificateCookiesFormQueryStringServerVariables属性:TotalBytes方法:BinaryReadResponse对象集合:Cookies属性:BufferCacheControlCharsetContentTypeExpiresExpiresAsoluteIsClientConnectedPICSStatus方法:AddHeaderAppendToLogBinaryWriteClearEndFlushRedirectWriteServer对象属性:ScriptTimeout方法:CreateObjectHTMLEncodeMapPathURLEncodeSession对象集合:ContentsStaticObjects属性:CodePageLCIDSessionIDTimeout方法:Abandon事件:Session_OnEndSession_OnStartActiveX组件本局部概述了ActiveServerPages〔ASP〕中的ActiveX组件。有关这些组件的完整介绍及其对象、属性和方法的列表,请参阅可安装的ASP组件。ActiveX组件作为基于Web的应用程序局部在Web效劳器上运行。组件提供了应用程序的主要功能〔如访问数据库〕,这样就不必创立或重新创立执行这些任务的代码。数据库访问可以使用DatabaseAccess组件在应用程序中访问数据库。然后可以显示表的整个内容、允许用户构造查询以及在Web页执行其他一些数据库查询。AdRotator可以使用AdRotator组件来交替显示图像,并提供从显示的图形到另一个URL的链接。在文本文件中保存广告列表;AdRotator组件依照在数据文件中的指令来显示它们。ContentRotatorContentRotator组件在Web页上自动循环HTML内容字符串。每次用户请求Web页时,ContentRotator组件基于ContentSchedule文件中指定的信息显示新的HTML内容字符串。由于内容字符串可以包含HTML标记,就可以显示HTML能够表示的任何内容类型:文本、图形或超文本链接。例如,可以使用该组件在每日牌价或超文本链接中循环,或者在每次翻开Web页时,改变文本和背景的颜色。BrowserCapabilities通过使用BrowserCapabilities组件,可以基于浏览器的功能剪裁发送到该浏览器的内容。FileAccessFileAccess组件提供可用于在计算机文件系统中检索和修改文件的对象。ContentLinkingContentLinking组件使在应用程序中提供.asp文件的逻辑导航变得简单易行。不用在许多.asp文件中维护URL引用,而只需在易于编辑的文本文件中指定.asp文件的次序组织。CollaborationDataObjectsforWindowsNTServerCollaborationDataObjectsforNTS组件提供Web应用程序所使用的邮件对象。这个库使您能够简单快捷地在应用程序上添加收发邮件的功能。您可以创立可编程邮件对象,然后利用它们的属性和方法来满足应用程序的需要。MyInfo、Status、System和ToolsMyInfo、Status、System和Tools组件为在Macintosh上和在运行MicrosoftWindows的计算机上开发的应用程序提供兼容性。MyInfo组件跟踪Web站点所有者的个人信息,如经营Web站点的组织名称和地址及Web站点的设置,还有Web站点是否有guestbook。Status组件跟踪Web站点的信息,如访问者的数量以及连接的个数。System组件创立包含效劳器状态信息的status对象。当前该效劳器状态只在PersonalWebServerforMacintosh上可用。Tools组件提供了生成随机数、检查文件是否存在或处理HTML表格的方法。PageCounterPageCounter组件统计并显示Web页被请求的次数。以一定的时间间隔,将捕获的数字写入到文本文件中,这样效劳器关闭后,数据也不会丧失。PermissionCheckerPermissionChecker组件测试Web用户对某文件或某页的访问权。可以使用PermissionChecker组件为不同类型的用户定制基于ASP的页。例如,如果Web页包含超文本链接,就可以使用PermissionChecker组件测试用户对相应Web页的访问权限并忽略用户无权访问的页或使这些链接失效。八、向浏览器发送内容在处理ASP脚本时,任何没有包含在ASP定界符或<SCRIPT>标记中的文本或图形都将被简单地返回给浏览器。可以通过使用Response对象显示地把内容发送给浏览器。发送内容要将内容从ASP定界符内部或过程发送给浏览器,可以使用Response对象的Write方。例如,下面的语句可以根据用户是否访问过此页而发送不同的问候语:<%IfFirstTime=TrueThenResponse.Write\"<H3ALIGN=CENTER>WelcometotheOverviewPage</H3>\"ElseResponse.Write\"<H3ALIGN=CENTER>WelcomeBacktotheOverviewPage</H3>\"EndIf%>在过程外部,不必使用Response.Write将内容送回用户。不在脚本定界符内部的内容被直接发送给浏览器,浏览器将其格式化和显示。例如,下面的脚本过程与上面的脚本输出相同:<H3ALIGN=CENTER><%IfFirstTimeThen%>WelcometotheOverviewPage.<%Else%>WelcomeBacktotheOverviewPage.<%EndIf%></H3>当您只需要将输出返回一次或很方便地向现有HTML文本中参加语句时,可使用混合脚本命令和HTML。当您不想用定界符分隔一条语句或当您想创立返回给浏览器的字符串时,可使用Response.Write。例如,可构建一个文本的字符串,用从一个HTML表送回的值创立表格的一行:Response.Write\"<TR><TD>\"&Request.Form(\"FirstName\")_&\"</TD><TD>\"&Request.Form(\"LastName\")&\"</TD></TR>\"Request.Form返回从HTML表格〔参阅使用HTML表格〕发送的值。(&)字符是VBScript字符串连接字符。设置内容的类型当Web效劳器将文件返回给浏览器时,会同时告诉浏览器文件中包含的内容的类型。这使浏览器能够决定是否它能自己显示文件或必须调用另一个应用程序。例如,如果网络效劳器返回MicrosoftExcel表格,那么浏览器必须调用MicrosoftExcel的副本显示此页。Web效劳器通过将文件的扩展名映射到MIME类型表来识别文件类型。可以使用Response对象的ContentType属性为发送给用户的内容设置内容类型字符串。例如,下面的命令为通道定义设置内容类型:<%Response.ContentType=\"application/x-cdf\"%>有关通道的详细信息,请参阅本主题中的“创立动态通道〞。其他的通用内容类型是text/plain〔用于作为文本内容返回而不是已解释的HTML语句〕、text/gif〔用于GIF图像〕和video/quicktime〔用于AppleQuickTime格式的电影〕。一套标准的MIME类型已经定义,另外,Web效劳器或Web浏览器都支持MIME类型。要想查看您的MicrosoftWeb效劳器支持哪些内容类型,可使用Internet效劳管理器翻开您的Web站点的属性页,单击"标题"选项卡,然后单击"文件类型"选项卡。重定向浏览器用Redirect方法可将浏览器重定向到另一个URL,而不是将内容发送给用户。例如,如果您想确认用户是否已从主页进入了您的应用程序,以便能收到一个客户ID,那么可以检验他们是否有客户ID号;如果没有,就可以将其重定向到主页。<%IfSession(\"CustomerID\")=0ThenResponse.Redirect\"homepage.asp\"EndIf%>除非缓冲区已经翻开,否那么,在任何内容或标题返回给浏览器之前,您必须重定向浏览器。将Response.Redirect语句放在页的顶部和<HTML>标记之前可确保没有任何内容返回给浏览器。如果在返回给浏览器的内容或标题后使用Response.Redirect,将看到一个错误信息。如果在页的中间使用Response.Redirect,请将其与Response.Buffer属性一起使用,下面的局部将进行解释。缓冲内容默认情况下,Web效劳器返回HTML和在处理ASP页时的脚本处理结果。但是,您可以设置Response对象的Buffer属性以便在向用户发送任何内容之前,先处理页上的所有的效劳器脚本命令。可以使用缓冲技术来确定在页处理过程中的某个点,而您并不想将该点之前的内容发送给用户。也可以用Response对象的Redirect方法将用户重定向到另一页,或者用Response对象的Clear方法去除缓冲区并将不同的内容发送给用户。下面的例子使用了以上两种方法。<%\'Turnonbuffering.Thisstatementmustappearbeforethe<HTML>tag.Response.Buffer=True%><html><body>%>IfRequest(\"FName\")=\"\"ThenResponse.Redirect\"/samples/test.html\"ElseResponse.WriteRequest(\"FName\")EndIf%></body></html>也可以使用Response.Buffer防止Web效劳器在脚本修改标题之前将其返回。有些属性和方法,例如Response.Expires和Response.Redirect可修改标题。当在脚本中设置Buffer属性并且没有调用Flush方法时,效劳器将保持用户发出的Keep-Alive请求。养成这样的脚本编写习惯有益于提高效劳器的性能,因为,效劳器不必为每一个用户请求创立新的连接〔假定效劳器、用户和任何代理效劳器都支持Keep-Alive要求〕。但是,这种方法的一个潜在的不利因素是:在用户处理完当前的ASP文件的所有的脚本之前,缓冲区不显示任何响应给用户。对于较长的和较复杂的脚本,用户可能要被迫等待很长一段时间才能看到这一页。默认情况下,缓冲区对于ASP应用程序是关闭的。可以使用Internet效劳管理器为整个ASP应用程序翻开缓冲区。详细信息,请参阅配置ASP应用程序。允许代理效劳器缓存页通过代理效劳器,应用程序可以发送页给用户。代理效劳器代替用户浏览器从Web站点请求网页。代理效劳器缓存HTML页以便相同页的重复请求能够快速有效地返回给浏览器。代理效劳器执行请求并缓存网页,并减轻网络和Web效劳器的负荷。尽管缓存对HTML页都能很好运行,但对包含动态生成信息的ASP页那么不尽人意。例如,报告股市行情或显示大量业务的存货清单需要提供即时信息。一小时前的信息对目前来讲是很不准确的。如果应用程序返回个人的信息,例如,自定义的主页,希望用户不能看到另一个用户的个人信息。默认情况下,ASP命令代理效劳器自己不能缓存ASP页〔尽管缓存图像、位图、小型应用程序,和其他缓存页上的参考项〕。可以使用Response.CacheControl属性设置缓存控制标题字段允许缓存某一页。Response.CacheControl的默认值是字符串"Private\",它防止代理效劳器缓存此页。要允许缓存,可将缓存控制标题字段设置为Public:<%Response.CacheControl=\"Public\"%>因为在任何页的内容被发送之前,标题必须被送给浏览器或代理效劳器,所以,可在任何HTML标记之前设置Response.CacheControl属性或使用Response.Buffer缓存此页。缓存控制标题字段是1.1规格的一局部。在只支持1.0的代理效劳器上不能缓存ASP页,因为没有到期的标题字段发送。防止浏览器缓存页每一个浏览器版本都有它自己的规格来规定是否缓存页。要防止浏览器缓存ASP页,可使用Response.Expires设置到期标题:<%Response.Expires=0%>值为0强迫缓存页到期。因为在任何页被发送之前,标题必须被送给浏览器,所以可通过将Response.Expires属性放在HTML标记之前或使用Response.Buffer缓存该页。创立动态通道InternetExplorer4.0有一个新的特性,Web规划人员可以使用该属性将带有公用主题的Web页并入一个通道。在浏览器中,通道被显示在通道标题栏上;用户通过单击图标访问通道。通道在后台自动更新;用户不必访问站点就可以在自己的浏览器上下载最新的页。通道为用户提供了一条浏览一组相关的Web页的快速而直接的通路,并且这些Web页是自动更新的。使用ASP,可以编写脚本来收集用户的首选项,然后动态地创立通道。通道定义文件(.cdf)建立了通道内容的组织和顺序。在.cdf文件中的命令使用与HTML标记相同的语法,以便于掌握和从脚本中生成。在编写ASP脚本来创立通道定义文件时,脚本用.cdx扩展名。当ASP读取一个以.cdx为扩展名的文件时,将自动发送application/x-cdf内容类型,它告诉浏览器用通道定义来解释字节。如果不使用.cdx作扩展名,那么脚本必须用Response.ContentType手工将内容类型设置为application/x-cdf。下面是一个有关如何使用通道的例如。下面的HTML表格要求用户选择通道。提交时,该表风格用.cdx文件的脚本去创立通道的定义。<P>Choosethechannelsyouwant.</P><FORMMETHOD=\"POST\"ACTION=\"chan.cdx\"><P><INPUTTYPE=CHECKBOXNAME=Movies>Movies<P><INPUTTYPE=CHECKBOXNAME=Sports>Sports<P><INPUTTYPE=\"SUBMIT\"VALUE=\"SUBMIT\"></FORM>Chan.cdx中的脚本根据与请求一起提交的表格的值创立

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论