您好,欢迎访问三七文档
第9章服务器对象在ASP中,除了前面讨论的四个内置对象外,还有一个称为服务器的对象(Server),用它可以创建其它类型的对象,本教材第11章的所有对象都要使用服务器对象来创建,服务器对象还有一些其它属性和方法。本章主要内容如下:用服务器对象创建对象对发送内容进行编码求文件的服务路径脚本运行时间的控制9.1用服务器对象创建其它对象除了ASP中内建的对象外,其它所有对象都必须通过服务器对象来创建,如后面要讨论的文件对象、数据库对象,以及其它已注册到服务器上的ActiveX组件对象。创建对象一般形式为:set对象变量名=Server.CreateObject(“对象组件名称”)例如:setconn=Server.CreatObject(“ADODB.connection”)创建了一个用于处理数据库的对象,其中conn为对象变量名,ADODB.connection为对象组件名称。创建的每一个对象,都占用一些系统资源,如果对象不再使用时,应该释放其占用的资源,其语法为:set对象变量名=nothing例如:setconn=nothing9.2编码发送内容在HTML语言,将某些符号赋予了新的含义,因此,ASP中将要发送的内容发送给浏览器时,应将包含的可能产生对浏览器来说具有特殊含义的符号进行必要的转换。为此,服务器对象根据不同的需要设计了几个实现转换的方法。1.HTML编码字符串当你将一段来自于数据库或其它位置的内容插入到HTML文档中时,浏览器会把其中的一些符号当作HTML的标签来识别,从而显示出不正常的结果,请看例9-1。【例9-1】发送包含特殊信息的网页第9章服务器对象•177•HTMLBODY%response.write网页中,加黑显示一段文字的使用形式为:B文字内容/BBRresponse.write在C语言中,变量a、b中取较大者的表示形式为:ab?b:a%/BODY/HTML显示结果如图9-1所示,显然是不希望的结果。图9-1正常文字被当作标签处理为此,可以使用服务器对象来对输出内容进行编码。形式如下:Server.HtmlEncode(“输出字符串”)即把上例改成如下形式:【例9-2】编码输出字符串HTMLBODY%response.writeServer.HtmlEncode(加黑显示文字的形式为:B文字内容/B)response.writeBRresponse.writeServer.HtmlEncode(两变量中取较大者的表示形式为:ab?b:a)%/BODY/HTML浏览结果如图9-2所示。如果被编码的字符串是来自于数据库的某一字段,这时,很可能是一个Null值,而直VBScript+ASP动态网页制作•178•接对它进行编码将产生运行错误。如例9-3所示。图9-2经转换后的特殊符号【例9-3】空对象的转换%dimstrstr=Nullresponse.writeServer.HtmlEncode(str)%运行这个脚本时,将会接收到如下VBScript错误信息:MicrosoftVBScript运行时错误错误'800a000d'类型不匹配:'Server.HtmlEncode'/L9_3.asp,行4为了避免这一错误的发生,在输出来自于数据库的内容时,应先使用函数isNull进行判空的操作。形式如下:IfisNull(str)thenResponse.write“”ElseResponse.writeServer.HtmlEncode(str)Endif2.URL编码字符串对于发送给服务器的带有查询字符串的重定向命令中,有时也可能包含一些特定的字符。例如,要通过网页abc.asp查询一个包含a+b的表达式,可能使用如下形式:%Response.Redirectabc.asp?exp=a+b%而此时,服务器端接收到的查询字符串变成了“exp=ab”,即其中的“+”变成了空格。为了让服务器端能接收到正确的查询字符串,可以使用服务器对象的URLEncode方法。使用形式如下:第9章服务器对象•179•Server.URLEncode(“编码字符串”)即把上面的一行改写成如下形式:%Response.Redirectabc.asp?exp=&Server.URLEncode(a+b)%注意:不能将整个查询字符串作为参数来进行编码,即不能把上式写成如下形式:%Response.Redirectabc.asp?&Server.URLEncode(exp=a+b)%因为式中的“=”是不应该转换的。另外对于多个查询变量还需要分别转换,如例9-4所示。【例9-4】编码URL字符串%@language=vbscript%%optionexplicitiflen(Request.Servervariables(QUERY_STRING))=0thendimstrurlstrurl=Request.Servervariables(SCRIPT_NAME)strurl=strurl&?strurl=strurl&exp=&Server.urlEncode(a+b)strurl=strurl&&value=&Server.urlEncode(3)response.redirectstrurlendif%HTMLBODY表达式:%=Request.querystring(exp)%br值:%=Request.querystring(value)%/BODY/HTML本例浏览结果如图9-3所示。图9-3编码URL字符串VBScript+ASP动态网页制作•180•3.编码脚本路径当重定向目标网页所在目录的目录名中包含特殊字符,例如空格,则还需要对脚本的路径进行编码。这时,可使用服务器对象的UrlPathEncode方法,使用形式如下:Server.UrlPathEncode(“路径字符串”)9.3求文件的物理路径当网页中需要打开、复制或删除一个处于与网页文件同一个目录,或处于web站点的某一目录中的文件时,你需要知道该文件所在的物理目录,这时,可以使用服务器的路径映射方法来求某一虚拟路径所对应的物理路径。使用形式如下:Server.mappath(“虚拟的路径字符串”)即求指定虚拟路径所对应的物理路径。【例9-5】求物理路径HTMLBODYWeb站点的根目录为:%=Server.mappath(/)%BR当前脚本的虚拟路径为:%=Request.Servervariables(SCRIPT_NAME)%BR当前脚本的物理路径为:%=Server.mappath(Request.servervariables(SCRIPT_NAME))%BR当前目录中文件名为abc.txt的物理路径为:%=Server.mappath(abc.txt)%/BODY/HTML浏览结果如图9-4所示:图9-4求物理路径注意:这一方法中并不检查实际的文件是否存在。即上例中abc.txt可能实际上并不存第9章服务器对象•181•在。9.4设置脚本运行时间一般情况下,服务器不应该让一个脚本无限制地执行。对此,在服务器管理器中可以设置ASP脚本的超时时间,默认值为90秒。这就意味着,如果没有特别的说明,所有ASP脚本都必须在这一时间范围内执行完成,否则将出现超时错误的提示。作为网站的管理员,可以根据大部分脚本所需要的时间,以及系统的负荷来设定这一时间长度。在WindowsNT或Windows2000的服务器上,可以对站点设置脚本运行的超时时间,也可以对站点中的应用程序设置脚本运行的超时时间。设置站点一级的脚本运行超时间的步骤如下:(1)打开服务器管理器(ISM),右击站点名称,打开Web站点的属性(Properties)对话框,如图9-5所示图9-5站点属性对话框(2)切换到主目录(HomeDirectory)选项卡,单击配置(Configuration)按钮,打开应用程序配置(ApplicationConfiguration)对话框,如图9-6所示。VBScript+ASP动态网页制作•182•图9-6应用程序配置对话框(3)切换到应用程序选项(AppOptions)选项卡,将ASP脚本超时值(ASPScriptTimeout)改变成想要的新值。如图9-7所示。图9-7应用程序参数(4)单击确定按钮,关闭这两个对话框,保存所做的改变。设置立即生效。站点下的各应用程序使用站点的脚本运行超时时间设置。若需进一步设置单独的超时时间,可通过右击应用程序名,打开属性对话框,如图9-8所示,此时,单击配置按钮,其后第9章服务器对象•183•的操作同设置站点的脚本运行超时时间相同。图9-8应用程序属性对话框作为ASP脚本的编写者,如果有个别脚本需要较长的运行时间,可以通过改变Server对象的scriptTimeout属性值来延长超时时间。形式如下:Server.ScriptTimeout=100注意:如果设置一个比默认值更小的值,将不起作用。【例9-6】设置脚本超时时间%Server.scripttimeout=30response.buffer=false%HTMLBODY%fori=1to50nexttime=dateadd(s,5,time)dowhiletimenexttimeloopresponse.writei*5&秒nextVBScript+ASP动态网页制作•184•%/BODY/HTML本例使用dateadd函数产生5秒种后的时间,再用do循环等待时间的到达,接着显示已经过的时间。直到超过30秒的脚本运行时间时,给出超时信息。本例在Windows2000服务器上的执行结果如图9-9所示,在运行本例代码之前已按照上述过程将站点的脚本运行超时时间设为20秒。如果在本例中PWS环境下运行,结果有一些误差,请读者自行验证。在PWS中由于服务器管理器没有提供设置默认超时时间的选项,因此,在脚本中可以设置一个比90小的值,设为-1时表示永远不超时。图9-9测试脚本超时时间本章小结服务器对象提供给我们的主要是创建对象方法,通过它可以创建所有系统中已经注册的ActiveX组件对象。然而,这一方法只能在以后的章节中使用它,本章主要讨论了服务器对象的几个实现字符串转换的方法。另外,也介绍了服务器对象的脚本超时时间设置问题。第9章服务器对象•185•习题1.你认为哪些信息在发送到浏览器前须要转换。2.服务器对象的创建对象方法能用于创建像response这样的内置对象吗?3.能使用服务器对象的求物理路径方法求得某文件的实际路径,你认为这会给网站带来安全隐患吗?4.你在从数据库表中查找内容,并将它们HTML编码后发送给用户时需要注意哪些事项?
本文标题:第9章服务器对象
链接地址:https://www.777doc.com/doc-2199927 .html