ASP网页编程之服务器真个包括指令
使用cdonts,可以发送、查看邮件,实现webmail的功能。结合wsh,可以实现对nt主机的管理,如nt用户管理、iis虚拟主机设置、exchange邮箱设置等等,就像管理本地机一样方便。服务器使用服务器真个包括(SSI)语句(大概指令)可以做些甚么呢?实践上未几,除非盘算创立在Web服务器上运转的可实行文件,并经由过程stdin和stdout函数会见ISAPI。这就意味可以用C、C++或其他言语(如Delphi)等编写它们,但VB其实不合适。别的,利用SSI指令可以做的事变可到达与在ASP中完成一样好的效果。很多办法中,IIS的SSI特征对利用这些特征的原本的Web网站和Web页面具有向下兼容性。
但是,大概偶然会但愿在站点上利用SSI而不是ASP。在IIS5.0中,服务器真个包括指令可以比之前加倍简单地集成到一个远程站点上的ASP页,它们是有效的,出格是作为实行操纵体系命令或原本的CGI使用程序的一种体例。前面将会十分具体地先容可用的指令。
#include指令是这些指令之一,它已与ASP一同利用了一段工夫了,一样也在SSI页中利用。现实上,这已对那些不具有传统的Web开辟背景的ASP开辟职员带来了良多凌乱。
4.2.1难以想象的ASP#include指令
在一个ASP页中,可使用#include指令把另外一个文件的内容拔出到以后的页面中:
<!--#includefile=”/scripts/usefulbits.inc”-->
这条指令读取该文件的全体内容并拔出到该页中,替换<!--#include..-->行。这是一种十分有效的拔出HTML段落的手艺,可重复利用。也经常使用该指令来拔出代码段。比方,假如有一个包括几个剧本函数(大概只是单行剧本代码)的文件同时在几个页面中利用,则可使用#include指令将其拔出到必要它的每一个页中。
经由过程把剧本和内容分隔的办法,给页面供应了一个构成条理。这意味着假如对剧本举行了修正,在客户端再次翻开该页面时,剧本的修正情形主动地反应到利用包括文件的每一个页面中。包括文件也是一种拔出服务器特定的信息的复杂办法,以是把站点转移到另外一个服务器不料味着必需编纂触及本来服务器的一切页面(分明的例子是数据库毗连字符串或指定一个完全的URL或服务器名字的链接)。这能够极年夜地削减保护用度。
比方,能够把上面的内容作为一个包括文件,定名为connect.inc:
<%
strConnect=“SERVER=myserver;DATABASE=mydb;DRIVER={SQLServer};”_
&“UID=username;PWD=secretpassword”
%>
然后能够在任何页中利用这个文件:
<!--#includefile=”path_to_fileconnect.inc”-->
<%
…
strTheConnectionString=strConnect‘Fromincludefile
…
%>
利用包括文件的另外一种情形是有些内容必要按指定的工夫距离举行修正。比方,在WroxWebDeverloper站点上显现书目列表的网页,它包括了一个表,个中供应了一切的封面、书名和一些按钮,如-2所示:
这个表的HTML和文本保存在一个独自的文件中,该文件经由过程一条独自的#include语句包括在主页中。每次一本旧书到场到该网页所基于的数据库中时,谁人包括文本文件依据该数据库的情形从头创立,并作为一个文本文件写到磁盘上。
这个手艺年夜年夜削减了在Web服务器和数据库服务器上的事情量,对该站点的会见者完成较快地呼应。
1.包括文件和ASP
在ASP网页(即带有.asp文件扩大名的网页)中利用的#include指令不克不及像一条真实的SSI指令那样举行处置,它仅是一条ASP可以辨认并举行语法剖析的出格指令。ssinc.dll间接用于实行SSI#include指令。但是这个由响应文件的内容替换#include指令的页面由ASP注释。
这意味着ASP对#include指令所举行的操纵不实行把持。比方,能够实验以下代码:
<%
‘Thiswill*not*work
strIncludeURL=Request.Form(“FileName”)
%>
…
<!--#includefile=”<%=strIncludeURL%>”-->
ssinc.dll将查找名为<%=strIncludeURL%>的文件,而且不成能找到,因而这段代码不会事情。
2.包括文件的平安性
假如没有包括可实行剧本,在Web服务器上的ASP网页不克不及经由过程IIS的Web服务程序下载到一个客户端。可是,有人已发明了偶尔的平安性毛病,好比出名的$DATA成绩,一切在NTFS格局化的磁盘上保存Web内容的Web服务器都存在响应的成绩。在IIS5.0中这个成绩已失掉办理。
$DATA成绩的呈现是由于在WindowsNTFS驱动器上的一切文件都有一个缺省的“值”,便是该文件的内容,而且经由过程文件名加后缀“::$DATA”来唆使。将其增添到一个ASP网页的URL的开端将打乱IIS中的剧本映照干系,且同意服务器不合错误个中包括的剧本举行处置而不载该页面。对IIS4.0和初期版本,有一个办法能够办理这个成绩,大概能够只是增添几个映照来强迫IIS一般地实行该网页:即增添对“.asp::$DATA”和“.asa::$DATA”的映照,二者都指向asp.dll文件。
包括文件的扩大各通常为.inc或.txt。假如在站点上发明一个包括文件的路径和文件名,可经由过程把包括文件的URL键进到扫瞄器的地点栏中,下载该包括文件,而不会把其作为ASP网页的一部分来实行。为避免呈现如许情形,出格是在文件包括有敏感信息(诸如一个数据库链接字符串)的情形下,大概但愿包括文件的扩大名为.asp。在这类情形下,假如试图下载一个包括文件,它将起首被传送到ASP,ASP将实行该文件中的一切剧本代码,并只发送出了局。如在包括文件中界说的一个链接字符串以下:
<%
strConnect=“SERVER=myserver;DATABASE=mydb;DRIVER={SQLServer};”_
&“UID=username;PWD=secretpassword”
Response.WritevbCrlf‘Outputacarriagereturncharacter
%>
客户端只能承受到单个回车符而不是剧本代码,由于该文件已被ASP在服务器上实行了。假如不包括回车符,扫瞄器将挂起并守候一个呼应(这并非我们的成绩,由于我们的确不盘算同意用户间接会见这个文件)。
IIS5.0和Windows的会见把持列表
在IIS5.0中,Microsoft已改动了Web服务器和操纵体系会见服务器端包括文件的办法。
在IIS初期版本中,当ssinc.dll载进一个假造URL(即便用VIRTUAL=“filename”而不是FILE=“filename”)定位的一个包括文件时,将绕过Windows自己的平安性反省并疏忽该文件及所存储的目次上的任何平安性设置。如今,在IIS5.0中,运转以后ASP或SSI页面的帐号必需与对该文件和目次在Windows会见把持列表(ACL)中设置的权限相分歧。假如纷歧致,该SSI指令运转将失利。
4.2.2服务器端包括指令提要
除已会商过的#include语句之外,另有IIS撑持的五条服务器端包括指令(记着,除#include之外,这些语句不克不及在ASP网页中实行)。这些服务器端包括指令及申明如表4-1所示:
表4-1服务器端包括指令及申明
指令
说明
#include
把一个指定文件的内容拔出到将被发送给客户真个呼应流中并取代该指令。比方:
<!--#includeFILE=“usefulbits.inc”-->
这条指令把名为usefulbits.inc文件的内容拔出到呼应中。这个文件能够由一个绝对或全路径与文件名的组合形貌,如FILE=”..scriptsmyscr.inc”。经由过程利用VIRTUAL属性,可以使用一个假造的绝对或相对路径来形貌它,比方:
<!--#includeVIRTUAL=”/mysite/ussefulbits.inc”-->
<!--#includeVIRTUAL=”../../thisbit/usefulbits.inc”-->
#config
申明在厥后的指令中将用于数据、工夫和文件巨细和前往给客户真个一样平常性的SSI毛病信息的文本的格局。比方:
<!--#configERRMSG=”SSIProcessingError”-->
设置SSI毛病信息内容为SSIProcessingError。
<!--#configTIMEFMT=”%A,%B%d%Y%H:%M:%S”-->
设置由厥后的SSI指令前往的日期和工夫的格局。这个例子设置一个格局作风:Saturday,August14199910:34:50。能够用于格局字符串的标记的列表在附录C中给出。
<!--#configSIZEFMT=”BYTES”-->
设置由厥后的IIS指令前往的文件巨细的单元。这个例子设置单元为字节。对SIZEFMT可供选择的值是“ABBREV”,指明盘算值将千字节(KB)前往文件的巨细
#echo
把一个HTTP情况变量的值拔出到发送给客户真个呼应流中并交换该指令。比方:
<!--#echoVAR=”SERVER_NAME”-->
写出正在实行指令到该网页的服务器的名字
#exec
实行一个程序或一个服务器外壳命令,比方:
<!--#execCGI=”/scripts/myapp.exe?value1=this&value2=that-->
实行名为myapp.exe的CGI程序,同意传送查询字符串,程序在独自内存中实行。
<!--#execCMD=”cmd.exe/ciisreset/stop”-->
启动特定操纵体系命令注释器(cmd.exe)并实行命令iisreset/stop。/c暗示当命令停止时,命令注释器也停止。利用CMD要增加以下注册表项:
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/w3SVC
/Parameters/SSIEnableCmdDirective
设置值为1,偏重启动WWW服务,就同意CMD标记用于#exec指令中。值为0,则克制利用,并避免未考证的利用
#flastmod
把一个指定的文件上一次修正的日期和工夫拔出到发送给客户真个呼应流中并取代该指令。
比方:
<!--#flastmodFILE=”Default.asp”-->
像#include指令一样,也能够利用假造路径对该文件举行界说,如:
VIRTUAL=”/mysite/usefulbits.inc”
或
VIRTUAL=”../thisbit/usefulbits.inc”
#fsize
把一个指定的文件的巨细拔出到发送给客户真个呼应流中并取代该指令。比方:
<!--#fsizeFILE=”Default.asp”-->
象#include指令一样,也能够利用假造路径对该文件举行界说,如:
VIRTUAL=”/mysite/usefulbits.inc”
或
VIRTUAL=”../thisbit/usefulbits.inc”
1.IISRESET有用程序
iisreset.exe是由IIS5.0供应的一个新的有用程序。作为一个命令行的有用程序,假如用于实行该有用程序的帐号具有办理员权限,它关于把持运转在当地或一个收集盘算机上的Internet联网服务器长短常有效的。它可用于以准确的按次中断或启动一切的服务、显现服务的形态、从头引诱服务器和同意或克制服务的办理。比方:
iisreset/RESTART/TIMEOUT:30/REBOOTONERROR
这将以准确的按次中断和从头启动一切Internet服务。假如一种服务在指定的超时周期(30秒)内未能中断或从头启动,服务器将从头引诱。能够用在CMD范例的#echoSSI指令中的一些开关,使该页面不克不及举行匿名会见而且请求用户供应在方针服务器上具有办理员权限的无效帐号的具体情形。这个有用程序的完全形貌和可用的命令开关在附录C中。
2.NETSTOP和NETSTART命令
假如用来实行有用程序net.exe的帐号具有办理员权限,它能够用来办理服务器上运转的任何服务(便可所以当地的也能够是来自其他的一个盘算机)。固然不倡始把该程序用于Internet服务(如WWW或FTP服务),但其中断和启动其他服务的功效长短常有效的。现实上,net命令一样能够用于一系列的其他收集相干命令。
语法是:
netservice_name
比方,能够用命令netstopcisvc和netstartcisvc来中断和启动MiscrosoftIndexingService。能够用CMD范例的#echoSSI指令使该页面不克不及举行匿名会见并请求用户供应在方针服务器上的具有办理员权限的无效帐号的具体情形。稍后将看到一个如许的例子。
在windows2000匡助文件中能够找到net命令的一切选项和开关的一个完全列表。从Start菜单当选择Help项,在Help窗口的Index页查找“netcommands”。
4.2.3服务器端包括指令的例子
本节供应了一些示例页面,能够用来对各类服务器端包括语句举行实行。翻开示例网页的子目次Chapter04,显现“SSIDirectivesandtheASPServerObject”主页(即子目次Chapter04中的Default.asp),如-3所示:
本书的一切示例都能够从我们的Web网站下载。读者将在示例的子目次Chapter04中发明本章其他部分的一切示例页面。
1.利用SSI/CGI处置指令
单击链接进进“Server-SideIncludeandCGIStatements”页面,这将翻开ssi_cgi.stm页面。必要注重的是该页面的文件扩大名为.stm,标明这不是一个ASP网页。该页面利用了后面已会商过的除#exec指令(稍后将看到)之外的一切SSI指令,且显现指令的利用办法和了局,如-4所示:
(1)#include指令
该页的入手下手部分“IncludeFileswithSSI”,显现名为intro.inc的另外一个独自文件的内容。上面是该文件的全体内容:
注重我们必需利用HTML条目“<”和“>”来显现网页中的尖括号。假如不如许做,它们就不克不及被看成注解元素部分对待,并引发个中的指令被实行。
在主ssi_cgi.stm页面中,把这个文件拔出到该页中的代码是很复杂的:
<!--#includefile=”intro.inc”-->
(2)#config、#fsize和#flastmod指令
网页下一部分显现了与该页面在不异的目次中的文件Default.asp的巨细和最初被修正的工夫。这里三次利用了#config指令:
・一次是设置SSI毛病信息。
・一次是设置日期和工夫的格局。
・一次是设置文件巨细盘算的格局。
利用#fsize和#fiastmod指令把值拔出到该网页中:
<P><DIVCLASS="subhead">SSIStatements</DIV>
<!--#configERRMSG="SSIProcessingError"-->
(setserrormessageincaseofSSIerror)<BR>
<!--#configERRMSG="SSIProcessingError"--><P>
DetailsoffileDefault.asp:<BR>
<!--#configSIZEFMT="BYTES"-->
(setsfsizetoreturnsizeinbytes)<BR>
<!--#configSIZEFMT="BYTES"-->
<!--#fsizeFILE="Default.asp"-->
returns:<B><!--#fsizeFILE="Default.asp"-->bytes</B><BR>
<!--#configTIMEFMT="%A,%B%d%Y%H:%M:%S"-->
(setsformatfordate/timeresults)<BR>
<!--#configTIMEFMT="%A,%B%d%Y%H:%M:%S"-->
<!--#flastmodFILE="Default.asp"-->
returns:<B><!--#flastmodfile="Default.asp"--></B><P>
(3)#echo指令
该页的最初部分(在屏幕上只能看到一部分)显现可使用#echo指令会见的一切HTTP报头的内容。每行的代码都是不异的,仅仅是VAR属性值有变更。附录G中给出了VAR属性的一切允许值的一个完全列表。
<DIVCLASS="subhead">HTTPVariables</DIV>
<!--#echoVAR="AUTH_TYPE"-->
returns:<B><!--#echovar="AUTH_TYPE"--></B><BR>
<!--#echoVAR="AUTH_PASSWORD"-->
returns:<B><!--#echovar="AUTH_PASSWORD"--></B><BR>
…etc…
2.利用#exec指令
#exec指令与其他的SSI指令比拟利用起来坚苦一些,正由于云云,将其自力地放到了另外一个页面上。能够从“ASPServerObjectandSSIDirectives”主菜单上会见启动页面。
在该页面上,选择“Usingthe#echoServer-SideIncludeDirective”链接。这个操纵翻开“TheSSI#execDirective”页面,如-5所示:
这是一个ASP网页ssi_exec.asp。两个按钮用来翻开.stm页面,该页面实行个中利用#exec指令所形貌的举措。
(1)在服务器上运转这个示例
在SSI#exec指令示例可以在服务器上事情之前,必需对一些设置举行修正。起首,必要在Web服务器的注册表中创立SSIEnableCmdDirective项(范例DWORD),地位鄙人面的键名下:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesW3SVCParameters
然后设置该值为1,如-6所示:
如许就同意#exec指令与CMD属性一同利用。
其次,必需对包括利用#exec指令的.stm文件的目次克制匿名会见,客户端将被强迫供应帐号的具体情形,该帐号应是一个具有办理员级权限帐号。这也是net命令阃常事情的请求。
激活InternetServicesManager使用程序,并选择包括利用#exec指令的.stm文件的目次(在示例中,这些文件是exec目次下的start_cisvc.stm和stop_cisvc.stm)。然后翻开该目次的Properties对话框。在DirectorySecurity选项卡中单击Anonymousaccessandauthenticationcontrol地区中的Edit按钮,翻开AuthenticationMethods对话框,如-7所示:
这个对话框不选中Anonymousaccess复选框。假如不利用InternetExplorer会见该页面,翻开Basicauthentication选项以同意非IE扫瞄器经由过程提交用户名/口令会见该页面。设置时,会呈现一个有关平安的告诫,单击Yes。如今扫瞄器将被强迫出示符合的帐号和身份证实,由于不克不及匿名会见该网页。
为了能看到启动和停止服务的了局,翻开“ServicesMMC插件”,停止IndexingService,如-8所示:
(2)启动和停止IndexingService
单击示例Web网页上的按钮,启动MicrosoftIndexingService。
这个服务的短称号为cisvc,它一般称为MicrosoftIndexServer,称号中的“ci”字符,实践上代表“contentindexer”。
呈现提醒时,输出在Web服务器上的具有办理员权限的一个帐号的用户名和口令。当该页面(start_cisvc.stm)翻开时,你将感到到必定的提早,这是由于#exec指令载进一个窗口命令注释器(cmd.exe)的实例,然后实行netstart命令。一旦服务启动(大概假如已在运转),将显现该页面的其他部分,如-9所示:
这个页面的代码非常复杂。能够看到#exec指令带有CMD属性,它设置为“cmd.exe/cnetstartcisvc”。窗体包括有从头回到前一页面的SUBMIT按钮:
<P>ProcessingtheSSIdirective:</P>
<P><B><!--#execCMD="cmd.exe/cnetstopcisvc"--></B></P>
<!--#execCMD="cmd.exe/cnetstopcisvc"-->
<FORMACTION="../ssi_exec.asp">
<INPUTTYPE="SUBMIT"NAME="cmdOK"VALUE="">
Returntothepreviouspage<P>
</FORM>
夙昔一页面能够翻开其他的.stm网页,如stop_cisvc.stm用来再次停止该服务,分歧的地方仅在于利用了netstop命令而不是netstart命令。
…
<!--#execCMD=”cmd.exe/cnetstopcisvc”-->
…
在实现ERP等高端的ASP应用时,用户需要提供核心的经营资料,需要ASP商有很高的信用度。楼上说交互性不好,太牵强了吧。在微软提供的一套框架中,利用asp做网站,开发效率高,使用人数少,减少不必要的开销。交互性是互动方式,是有开发人员决定的。 交流是必要的,不管是生活还是学习我们都要试着去交流,通过交流我们可以学到很多我们自己本身所没有的知识,可以分享别人的经验甚至经历。 它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。 代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。 Application:这个存储服务端的数据,如果不清除,会直到web应用程序结束才清除(例如重启站点) 虽然ASP也有很多网络教程。但是这些都不系统。都是半路出家,只是从一个例子告诉你怎么用。不会深入讨论,更不会将没有出现在例子里的方法都一一列举出来。 Server:这个表示的服务器,操作服务器的一些东西使用这个,如Server.Mappath转换服务器路径,Server.CreateObject实例化一个组件 下载一个源代码,然后再下载一个VBScript帮助,在源代码中遇到不认识的函数或是其他什么程序,都可以查帮助进行解决,这样学习效率很高。
页:
[1]