|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
使用cdonts,可以发送、查看邮件,实现webmail的功能。结合wsh,可以实现对nt主机的管理,如nt用户管理、iis虚拟主机设置、exchange邮箱设置等等,就像管理本地机一样方便。iis
6.2.6ContentRotator组件
ContentRotator组件像一个简化的AdRotator组件,必要供应一种内容调剂文件(ContentScheduleFile)。该文件仅是一种包括文本段和HTML代码段的文本文件,ContentRotator组件可在页面中主动显现个中的一个。调剂表文件能够包含任何数目的文本内容条目,并可划定比率,用以把持在前往网页中每一个条目标显现频次。
1.内容调剂文件
内容进度文件的布局比AdRotator的调剂文件复杂,仅需供应要利用的各个文本字符串的列表,由后面加两个百分号(%%)的语句行申明。为了设置每一个条目标比率(决意它呈现在前往页面中的频次),在双百分号的前面增加了一个数字,厥后还可跟一对前向斜线符(//)增加正文。如:
%%3//Thisisthefirstentryinthescheduletextfile
Formoreinformation,mailusat
<AHREF=mailto:feedback@wrox.com>WroxPress</A>
%%4//Thisisamulti-linetextstring
<H4>WroxPress</H4>
<UL>
<LI>LanguagePrimers
<LI>AdvancedProgramming
<LI>InternetApplications
</UL>
%%2
Visitusonthe<AHREF="http://www.wrox.com">WorldWideWeb</A>
这个例子申明了能够用于网页中的三个文本字符串,比率分离是3、4和2,以是条目将以3/9、4/9和2/9的频次呈现。注重(和AdRotator组件一样)每一个字符串的实践呈现是随机的,然后经修改后取得响应的比率,假如调进网页九次,大概不会恰好失掉这个了局。
2.ContentRotator组件的成员
ContentRotator组件仅供应两个办法,用于从内容调剂文件中检索内容,如表6-5所示:
表6-5ContentRotator组件的办法及申明
方法
说明
GetAllContent(schdule_file)
检索和显现schdule_file文件中的一切字符串
ChooseContent(schdule_file)
检索(但不显现)来自schdule_file文件的下一个符合的内容字符串
3.利用ContentRotator组件
为了从调剂文件中取得指定段的文本和HTML,可以使用工具的ChooseContent办法检索一个条目,依照内容调剂文件中划定的比率。可使用Response.Write办法将其拔出到发送给客房机的输入流中。
<%InVBScript:
SetobjMyContent=Server.CreateObject("MSWC.ContentRotator")
strContent=objMyContent.ChooseContent("ContentRotator/content_schedule.txt")
Response.WritestrContent
%>
这个代码利用了和页面在统一目次中的调剂文件,假如这段代码寄存在其他中央,必需说明调剂文件的路径,这个路径能够是一相对Web网站根目次的物理路径或是一个完全的假造路径。
ObjMyContent.ChooseContent("contentmycontent.txt")relativephysicalpath
ObjMyContent.ChooseContent("/demo/mycontent.txt")fullvirtualpath
假如想显现内容调剂文件中的一切内容字符串,可使用工具的GetAllContent办法,如ChooseaContent办法的情形一样,必需供应调剂文件的路径。比方上面的代码失掉了内容调剂文件中的一切内容并显现在网页里。注重这个办法把内容主动地拔出到网页中,以是不用利用Response.Write办法,这个办法也主动地在每一个条目之间加了一个程度线。
ObjMyContent.GetAllContent("mycontent.txt")
为了研讨ContentRotator组件的感化,从“ASPInstallableComponents”主菜单翻开供应的示例页面,这个页面利用后面讲过的内容调剂文件。挪用ChooseContent办法,并把一个条目放在页面的顶部,然后利用GetAllContent办法显现调剂文件中一切条目标内容。ContentRotator组件示例页面如-9所示:
6.2.7PageCounter组件
PageCounter组件用于统计每一个网页被会见的次数,该组件按期把统计的数据存进服务器磁盘上的一个文本文件――会见次数统计数据文件(HitCountDataFile)中,以是在停机或呈现毛病信息,以后数据也不会丧失。
1.PageCounter组件的成员
PageCounter组件供应了向该文件增添会见次数的办法和读取和从头设置会见计数总和的办法,如表6-6所示:
方法
说明
Hits([Page_Path])
前往由Page_Path指定的网页的会见次数,假如选项Page_Path省略的话,前往的是以后网页的会见次数
PageHit()
增添以后网页的会见次数
Reset([Page_Path])
设置由Page_Path指定的网页的会见次数为0,假如选项Page_Path省略的话,设置以后网页的会见次数为0
2.利用PageCounter组件
上面例子利用JScript言语来讲明PageCounter组件的利用,先用Server.CreateObject办法创立工具实例,然后挪用Hits办法失掉对以后网页的会见次数。假如会见次数到达5次,则把计数重视新设置为0,而且在网页中安排一个链接,以便向会见者经由过程成就。
<%//inJScript:
varobjPageCount=Server.CreateObject(MSWC.PageCounter);
//lookforacommandsentfromtheFORMsectionbuttons
//incrementthecounteranddisplaythecurrenthitcount
objPageCount.PageHit();
Response.Write(Youarevisitornumber+objPageCount.Hits()+<P>);
//wetreateveryfifthvisitorasawinner
if(objPageCount.Hits()==5){
objPageCount.Reset();//resetthecounter
Response.Write(Yourealuckywinner!<BR>);
Response.Write(<AHREF="winner.asp">Gotoourwinnerspage</A><BR>);
}
%>
注重在第二个Response.Write语句中,后向斜线()的利用是避免JScript引擎把引号看做字符串的停止。
本书供应了一个利用PageCounter组件的示例网页。但是,因为在每一个示例页面里利用一个VBScript为这个组件示例编写程序。只管在一个ASP网页里,混用剧本言语是大概的,但在SSI的#include文件中利用剧本言语能使网页缓存呈现成绩,并会引发不成展望的了局。固然剧本言语分歧,但示例网页的事情体例上与上述不异。PageCounter组件示例页面如-10所示:
该网页包括的<FORM>段中含有两个按钮,两个按钮都把窗体提交以从头调进网页。
<FORMACTION="<%=Request.ServerVariables("SCRIPT_NAME")%>"METHOD="POST">
<INPUTTYPE="SUBMIT"VALUE="">Reloadthispage<P>
<INPUTTYPE="SUBMIT"NAME="cmdReset"VALUE="">
PageCounter.Reset()
</FORM>
在网页的开首,与其他的示例网页一样,在哀求中查找相干的按钮名字。在本页面中,我们仅对第二个名为cmdReset的按钮感乐趣,假如点击了该按钮,运转PageCounter组件的Reset办法,从头设置本页面的会见次数为0。
lookforacommandsentfromtheFORMsectionbuttons
IfLen(Request.Form("cmdReset"))ThenobjPageCount.Resetresetthecounter
后面看到的代码将挪用PageHit办法把计数器设置为1,并显现在网页里。注重已利用了Hits和Reset办法而没有给可选参数供应数值,以是它们都在以后网页计数器上操纵,固然可以在另外一个网页中利用,并能够对一些网页的统计了局汇总。
6.2.8PermissionChecker组件
PermissionChecker组件用来检测用户以后正在会见网站的帐号是不是同意读取某个特定文件大概会见某个资本(仅在WindowsNT/2000而不是在Windows9X)。能够用它来定制页面,这些网页中仅包括以后用户同意会见的资本的链接,这项手艺关于埋没限定会见的网页和资本长短常有效的,它可使被限定的会见者不晓得这些资本的存在,不会发生强行进进个中的妄图。
1.PermissionChecker组件的成员
PermissionChecker组件只要一个办法,如表6-7所示:
表6-7PermissionChecker组件的办法及申明
方法
说明
HasAccess(file_path)
反省以后实行页面的用户帐号是不是同意会见file_path指定的页面。该路径是一个网页、文件或资本的物理的或假造的路径。假如以后帐号同意会见,前往值为“True”,不然前往值为“False”
2.PermissionChecker组件的事情历程
一般,除非出格划定,不然用户是匿名会见网页的,因而IIS自己会利用本人的Windows帐号会见网页,缺省值是IUSR_machinename(比方IUSR_WROXBOX),PermissionChecker组件反省IUSR_machinename帐号是不是可以会见指定的网页或资本。
但是,经由过程InternetServicesManager的AllowAnonymousAccess选项封闭对Web网站大概对某一指定目次的匿名会见,能够强制IIS提醒用户输出一个无效用户帐号的用户名和口令,然后利用该帐号“非匿名会见”资本。
对一个网站或目次,在InternetServicesManager上的Properties对话框中的DirectorySecurity选项卡中设定会见把持。在对话窗体中的AnonymousAccess和AuthenticationControl中,点击Edit按钮翻开AuthenticationMethods对话框,封闭AnonymousAccess选项。设置界面如-11所示:
当PermissionChecker组件在用户用其本人的帐号(而不是IUSR_machinename)会见的网页中被实例化时,将反省其帐号是不是能够会见这个指定的资本,假如不克不及利用匿名会见,那末一切的用户必需供应帐号细节。可使用WindowsExplorer对每一个文件或资本设置指定的权限(在响应的Properties对话框中的Security选项卡中)。设置界面如-12所示:
3.利用PermissionChecker组件
可使用PermissionChecker组件反省以后用户是不是利用HasAccess办法会见其他页面(网站上的任何页面)的权限。本书供应了一系列实例页面,可用来实验PermissionChecker组件,翻开此示例(从ASPInstallableComponents主菜单里翻开),会看到网页里的三项链接,如-13所示:
链接所指向的每个页面都位于Chapter06示例目次下的PermissionChecker子目次中。PermissionChecker组件反省以后用户是不是有会见各个网页的权限。假如用户的确有会见这个网页的权限的话,这个网页的条目将是一个超等链接。
createaninstanceofthecomponent
SetobjPermit=Server.CreateObject("MSWC.PermissionChecker")
%>
<UL>
<LI>
<%IfobjPermit.HasAccess("PermissionChecker/restricted_1.asp")Then%>
<AHREF="PermissionChecker/restricted_1.asp">
<%EndIf%>
RestrictedPageNumber1
<%IfobjPermit.HasAccess("PermissionChecker/restricted_1.asp")Then%>
</A>
<%EndIf%>
</LI>
…
..otherpagelinkshere
…
</UL>
如今我们有会见三个有会见限定的网页的权限,以是这三个条目都是超等链接。但是这里不存在第四个链接(它能够被移往或是删除),由于组件不克不及利用以后用户(也就是IUSR_machinename)的帐号来会见它,因而不显现为超等链接。
注重这里选择仅移往超等链接但留下了链接文本,在实践情形中应删除不成会见的网页的全部条目。
假如从PermssionChecker子目次中的restricted_2.asp文件上删除Read(和任何其他的)权限,偏重新调进网页,对应的条目将不显现为一个超等链接,如-14所示:
6.2.9MyInfo组件
MyInfo组件最后是与团体Web服务器一同引进的,用于存储服务器办理员供应的团体信息。它如今能够用在ASP3.0中,为称号/数值对,大概任何其他范例的能够暗示为文本字符串的信息供应永世存储。该信息以XML格局在文本文件myinfo.xml中保留,此文件仅位于Web服务器的inetsrv目次下。在Windows2000中,其路径为WinNTsystem32inetsrv。
和Counter组件一样,只需创立一个复杂的MyInfo组件的实例就能够利用Web网站上的一切页面均能取得其信息,确保缺省Web站点上的global.asa文件中有上面的代码:
<!--declareinstanceoftheASPMyInfocomponentwithapplication-levelscope
-->
<OBJECTID="objMyInfo"RUNAT="Server"SCOPE="Application"PROGID="MSWC.MyInfo">
</OBJECT>
1.利用MyInfo组件
MyInfo组件缺省时没有属性和办法。但是可给其增加属性,复杂地说,也就是赋一个称号和数值给这些属性。好比,能够增加有关事情情况和互助同伴的信息。
<%inVBScript:
objMyInfo.MyManager="ChristinaChan"
objMyInfo.MyPhoneExtension="2851"
objMyInfo.MyCarParkingSpace="4A-17"
objMyInfo.MyComputerName="Priscilla"
%>
同其余组件属性一样,可使用上面代码检索数值。
<%inVBScript:
strManagerName=objMyInfo.MyManager
strPhoneExtension=objMyInfo.MyPhoneExtension
strParkingSpace=objMyInfo.MyCarParkingSpace
strComputerName=objMyInfo.MyComputerName
%>
这是一种在两个页面哀求之间存储值的有效办法,不必要用户的Session工具。这也为未来大概改动的数值供应了一个存储地区,接纳这些值的页面将会鄙人次运转时主动地收罗这些变更的值,从而制止必需编纂大批的其他页面。
本书供应了一个利用MyInfo组件的复杂示例,这个示例从ASPInstallableComponents主菜单中运转,利用方才会商的设置组件属性的代码,并可改动属性值,如-15所示:
初次翻开页面时,创立属性时利用了一个标记变量SetDefaultValues,该变量寄存在用户的Session工具中。当页面在每一个会话里初次翻开时,把属性参数设置成“缺省”值,以后,把此标记变量设置成Yes。在以后会话中,从头调进页面时,这个数值将不再从头设置缺省值。
aninstanceofthecomponentisalreadycreatedinglobal.asa
IfNotSession("SetDefaultValues")="Yes"Then
setthepropertiesiftheyrenotsettothedefaultvalues,
i.e.ifthisisthefirsttimethatthepagehasbeenrun
duringthecurrentusersession.
objMyInfo.MyManager="ChristinaChan"
objMyInfo.MyPhoneExtension="2851"
objMyInfo.MyCarParkingSpace="4A-17"
objMyInfo.MyComputerName="Priscilla"
setasessionflagtoshowthatthedefaultvalueshvebeenset
Session("SetDefaultValues")="Yes"
EndIf
每次挪用页面时,反省哀求中的值是不是是用于改动属性值的按钮的称号。这个按钮在一个包括下拉列表和文本框的<FORM>上。假如发明点击了这个按钮,则从下拉列表和文本框里收罗数值,然后用这些数值改动相干的属性值。
lookforacommandsentfromtheFORMsectionbuttons
IfLen(Request.Form("cmdChange"))Then
strPropertyName=Request.Form("lstName")getthenameoftheproperty
strNewValue=Request.Form("txtValue")getthenewvaluefortheproperty
objMyInfo(strPropertyName)=strNewValuesetthecomponentpropertyvalue
EndIf
6.2.10Tools组件
Tools组件供应了一些有效的办法,可在页面中反省文件是不是存在、处置一个HTML窗体、和发生一个随机整数,另有用于Macintosh盘算机的一些办法,还能够反省是不是存在某个服务器插件和反省用户是不是是网站的具有者。
1.Tools组件的成页
Tools组件供应了五个办法,个中两个依附于操纵体系,如表6-8所示:
表6-8Tools组件的办法及申明
方法
说明
FileExists(relative_url)
假如relative_url指定的文件存在,前往值为True,不然为False。必需给出假造绝对路径及文件名,而且文件必需存在于公布的Web网站目次中。
Random()
发生一个位于-32768~32767之间的随机整数。利用ABS函数(VBScript)或Math.abs(JScript)失掉在0~32768之间的正整数。利用Mod运算符(VBScript)或%运算符(JScript)失掉指定局限内的一个数值。比方:
intRand=(objTools.RandomMod76)+25
失掉一个在25~100之间的整数。
ProcessForm(output_url,
template_url,[insertion_point])
经由过程template_url指定的文件处置一个HTML窗体,而且拔出来自窗体中已提交给以后页面的数值。了局写进output_url指定的文件,假如指定了可选项insertion_point(字符串)参数的话,组件可在已存在的输入文件中找到这个字符串,并在该地位拔出新的内容。假如insertion_point参数没有指定,任何已存在的output_url文件则被新的输入代替
Owner
仅合用于Macintosh机,假如以后用户帐户是Web网站的具有者,前往值为True,不然前往值为False
PluginExists(plugin_name)
仅合用于Macintosh机,假如指定的服务器plugin_name安装在呆板上,前往值为True,不然为False
2.利用FileExists办法
在同意用户会见之前,可使用FileExists办法反省某些文件是不是存在于服务器中(注重这个办法和FileSystemObject.FileExists以一样的体例事情)。
上面的例子中,用户供应了网页的绝对URL,假如用户想经由过程在名为txtURL的文本框中键进URL翻开网页,在从头定向之前能够反省其是不是存在。
<%//inJscript:
varobjTools=Server.CreateObject(MSWC.Tools);
varstrURL=Request.Form(txtURL);//collectthepageURLtheyentered
if(objTools.FileExists(strURL))//seeifitexists
Server.Transfer(strURL)//ifitdoes,transfertoit
Else//orifnotdisplayamessage
Response.Write(Sorry,thepageyourequesteddoesnotexist);
%>
这里供应了一个示例页面(利用VBScript)来演示组件的三种办法(非Macintosh),能够从ASPInstallableComponents主菜单中运转,如-16所示:
网页的第一部分同意输出一个文件的绝对URL,并告知用户该文件是不是存在。示例供应的缺省值是检察网站的根目次中是不是有global.asa文件。点击按钮时,申明该文件是不是可找到的信息将放在页面的顶部,如-17所示:
把页面的一切控件放在<FORM>中,提交回本页面,这已成为一种标准。在页面的入手下手,检察点击了哪一个按钮。假如是FileExists的按钮,就挪用组件的FileExists办法并显现符合的信息。
lookforacommandsentfromtheFORMsectionbuttons
IfLen(Request.Form("cmdExists"))Then
strFile=Request.Form("txtFile")
IfobjTools.FileExists(strFile)Then
Response.Write"Thefile<B>"&strFile&"</B>doesexist.<P>"
Else
Response.Write"Thefile"&strFile&"<B>doesnot</B>exist.<P>"
EndIf
EndIf
3.利用Tools.Random办法
在ASP页面中,偶然必要一个随机数来完成某些义务,比方,把用户从头定位到一个随机网页、选择色彩或显现逐日提醒。可使用VBScript中的Rnd函数,但要把所得数值变化成指定局限内的整数。Tools组件的Random办法更容易于利用,由于可以间接供应整数值。
Random办法的了局是一个在-32768~32767局限中的整数值,为了取得一个指定局限的整数,可使用剧本言语中的Abs函数并对下一个最年夜的整数取模。比方为了用VBScript言语创立0~20的正整数,可使用以下语句:
intRandom=Abs(objTools.Random)Mod21
为了失掉在50~100之间的数值,能够用:
intRandom=(Abs(objTools.Random)Mod51)+50
示例网页利用这项手艺天生随机数时,起首必要反省由用户输出的数值,以包管这些数值既是无效正整数又有准确的绝对干系。
IfLen(Request.Form("cmdRandom"))Then
intMin=-1presettoillegalvaluesandthen
intMax=-1onlysetifavalidnumberisentered
strMin=Request.Form("txtMinimum")
strMax=Request.Form("txtMaximum")
IfIsNumeric(strMin)ThenintMin=CStr(strMin)
IfIsNumeric(strMax)ThenintMax=CStr(strMax)
If(intMin>=0)And(intMax>intMin)Then
intRandom=(Abs(objTools.Random)Mod(intMax-intMin+1))+intMin
Response.Write"Yourrandomvalueis:<B>"&intRandom&"</B><P>"
Else
Response.Write"<B>Thenumbersyouenteredarenotvalid.</B><P>"
EndIf
EndIf
当页面从头调进时,了局显现在网页的顶部,如-18所示:
4.利用Tools.ProcessForm办法
Tools组件中最庞大的办法是ProcessForm,用来读取存在磁盘上的一时文件,并在个中拔出创立的信息(大概来自以后页面的Request.Form汇合的内容),然后把了局作为一个文件输入到磁盘,这个办法的语法是:
ProcessForm(output_url,template_url,[insertion_point])
一时文件和输入文件相对以后页面利用绝对URL来界说。输入文件能够是ASP网页,假如如许,当其在扫瞄器翻开时,将一般处置。一时文件能够包括一般的ASP代码,但不运转,仅复杂地拷贝输入文件。但是,假如把一时文件中的ASP代码放在<%%…%%>限制符中,当一时文件调进时期码将被实行,这同意静态天生的数值(诸如举行处置的工夫和日期)拔出到输入页面中。
上面是示例文件template.asp(在chapter06目次的Tools子目次中):
ThisfilewascreatedbytheASPToolscomponent
------------------------------------------------
Thecontentoftherequestwas:
Outputfilename:<%%=Request.Form("txtOutput")%%>
Templatefilename:<%%=Request.Form("txtTemplate")%%>
Insertionpointtext:<%%=Request.Form("txtInsert")%%>
------------------------------------------------
Created<%%=Now()%%>
示例页面包括着预定利用这个一时文件的控件,这些控件创立一个和一时文件在统一个文件夹中的名为output.asp的输入文件,如-19所示:
点击按钮时,将运转一部分ASP代码,从文本框中收罗数据并挪用ProcessForm办法:
IfLen(Request.Form("cmdProcess"))Then
strTemplate=Request.Form("txtTemplate")
strOutput=Request.Form("txtOutput")
strInsertPoint=Request.Form("txtInsert")
…
wedisplaythetemplatecontentshere
…
processtheformcontents
objTools.ProcessFormstrOutput,strTemplate,strInsertPoint
…
wedisplaytheoutputfilecontentshere
…
EndIf
(1)设置输入文件的会见权限
假如失掉一个“MSWC.Toolserror80004005Couldn’topenoutputfile”毛病信息,这意味着IIS不同意向指定的目次中写进输入文件。办理这个成绩最快速的办法是,在Properties对话框中的Security选项卡中,将响应的Tools目次和寄存output.asp的目次的Everyone组的FullControl设置成同意,如-20所示:
(2)检察文件内容
-21显现了下面代码用缺省值运转缺省值运转的了局,能够看到本来的一时文件内容,和利用ProcessForm办法拔出到输入文件中的内容。
这里省略了显现来自后面见过的文件内容的程序代码。显现内容的办法与ASPInstallableComponents主菜单页面顶用于显现内容链接列表文件的办法不异。利用FileSystemObject和TextStream工具的实例把全部文件读进到一个字符串中,然后将其拔出网页中(记着要利用Server.HTMLEncode办法,以便把字符“<”和“>”转换成可用于显现的字符)。
QUOT=Chr(34)double-quotecharacter
…
createaFileSytemObjectobjecttodisplaythetemplatefilecontents
SetobjFSO=Server.CreateObject("Scripting.FileSystemObject")
Response.Write"Thecontentofthetemplatefile<B>"&_
strTemplate&"</B>is:"
SetobjTStream=objFSO.OpenTextFile(Server.MapPath(strTemplate),ForReading)
strContent=Server.HTMLEncode(objTStream.ReadAll)readwholefile
objTStream.Close
Response.Write"<DIVCLASS=""&"showcode""&"><PRE>"&_
strContent&"</PRE></DIV>"
…
(3)关于拔出点参数
ProcessForm办法可选的insertion_point参数能用来在文件中的特定点拔出文本,这个办法是先查找输入文件中特定字符串的第一个实例,然后在该地位拔出创立的新内容,在输入文件中经由过程把星号(*)放在insertion_point字符串后面来安排新内容。假如省略了insertion_point参数,新的内容会代替全部输入文件。
注重insertion_point参数在Tools.ProcessForm办法的初期版本中不克不及利用。
6.2.11LoggingUtility组件
LoggingUtility组件是ASP3.0的新组件,供应了会见日记文件的办法,这个日记文件是由服务器撑持的用于Web和FTP网站的IIS创立的。
1.LoggingUtility组件的成员
LoggingUtility组件供应了六种办法,能读取日记文件的内容、把新纪录写进已存在的日记文件中。这些办法和上一章会商的FileSystemObject工具的办法有类似性,如表6-9所示:
表6-9LoggingUtility组件的办法及申明
方法
说明
AtEndOfLog()
用ReadLogRecord办法遍历纪录时,假如文件中的一切纪录都已读出,前往值为True
CloseLogFiles(io_mode)
封闭翻开的日记文件,io_mode的值指定要封闭的文件,常数ForReading(1)暗示封闭翻开供读出的一切文件,ForWriting(2)暗示封闭翻开供写进的一切文件,AllOpenFiles(32)暗示封闭翻开的一切文件
OpenLogFile(filename,io_mode,
service_name,service_instance,
output_format)
翻开filename指定的日记文件或日记文件集,可选的io_mode参数能够设置成ForReading(缺省值,1)或ForWriting(2)。当读取取一个特定的IIS服务(比方“W3SVC”和“1”)时,可选的service_name和service_instance参数限定从文件中前往的纪录。可选的output_format参数指明写进文件时利用的格局
ReadFilter(start,end)
当在划定的工夫和日期局限内读取文件时,限定前往的纪录,两个参数都是可选的,假如疏忽的话,start是文件的第一个纪录,end是最初一个纪录
ReadLogRecord()
从用OpenLogFile办法翻开确当前日记文件中读取下一个纪录
WriteLogRecord(logging_object)
从翻开供读出的文件中把纪录写进一个翻开供写进的文件中,参数logging_object是一个援用保留源纪录的LoggingUtility组件实例的工具变量
LoggingUtility组件供应了二十种与IIS日记纪录绝对应的属性,如表6-10所示:
表6-10LoggingUtility组件的属性及申明
属性
说明
BytesReceived
哀求时从扫瞄器收到的字节数
BytesSent
呼应时送至扫瞄器的字节数
ClientIP
客户机或其主机(即代办署理服务器)的IP地点
Cookie
在哀求中传送的cookie内容
CustumFields
加到哀求中的定制报头的一个数组
DataTime
哀求的日期和工夫(GMT)
Method
操纵范例,如“Get”和“Post”
ProtocolStatus
前往到客户机的形态动静,即“200OK”
ProtocolVersion
协定版本字符串,如“HTTP/1.1”
Referer
包括初始化哀求链接的网页的URL
ServerIP
IIS呆板的IP地点
ServerName
IIS服务器的呆板名
ServerPort
哀求抵达的端标语,如“80”
ServiceName
服务器称号,如“MSFTPSVC”或“W3SVC”
TimeTaken
检索和创立网页的总处置工夫
URIQuery
哀求中加到URL的查询字符串中的一切参数
URIStem
叨教的方针URL
UserAgent
由客户机发送的用户代办署理字符串
UserName
假如不是匿名地会见服务器,UserName是用户的登录名
Win32Status
处置了哀求后前往的Win32形态码
2.利用LoggingUtility组件
LoggingUtility组件最广泛的使用是用于对日记文件的自界说查询。从现有文件当选择一些纪录写进新文件的才能,意味着可以汇总某些范例的条目,大概有选择性地挑出一些纪录未来利用。
为了利用ForReading、ForWriting和AllOpenFiles常数,必需在网页的<HEAD>部分包括METADATA指令。
<!--METADATATYPE="typelib"FILE="C:WINNTsystem32inetsrvlogscrpt.dll"-->
为了遍历纪录,仅须翻开文件而且反复挪用ReadLogRecord,直到AtEndOfLog的前往值为True。鄙人面的例子中将过滤纪录,仅取得最初24小时之内的纪录。
Createthecomponentinstance
SetobjLogUtil=Server.CreateObject("MSWC.IISLog")
openthelogfileforreading,fortheW3SVCinstancenumber1
objLogUtil.OpenLogFile"extend#.log",ForReading,"W3SVC",1,0
setafilterforthelastdaysrecordsonly
objLogUtil.ReadFilterDateAdd("d",-1,Now),Now
loopthroughtherecords
DoWhileNotobjLogUtil.AtEndOfLog
objLogUtil.ReadLogRecordreadthenextrecord
Response.Write"Requestreceivedforpage"&objLogUtil.URLStem&"on"_
&objLogUtil.DateTime&"fromIPaddress"_
&objLogUtil.ClientIP&".<BR>"
Loop
objLogUtil.CloseLogFiles(ForReading)closethefile(s)
本书供应了演示利用LoggingUtility组件的一个示例网页,这个网页能够从ASPInstallableComponents主菜单运转。
确保在InternetServicesManager中不同意匿名会见包括示例文件的目次或loggingutility.asp文件,不然将不克不及会见日记文件。翻开loggingutility.asp文件或包括该文件的目次的Properties对话框的DirectorySecurity选项卡,点击Anonymousaccessandauthenticationcontrol部分的Edit按钮,翻开AuthenticationMethod对话框,并封闭Anonymousaccess选项。
必需改动日记文件的文件名以合适你的盘算机。在缺省Web网站的Properties对话框的WebSite选项卡中,翻开W3CExtendedLogging,如-22所示:
在这个对话框中,点击Properties按钮,翻开ExtendedLoggingProperties对话框,在这里会翻开要用的文件名。选择流动巨细的日记文件选项,如许文件名将是extend1.log和extend2.log等等。如-23所示:
翻开ExtendedProperties选项卡,确保选中想要的条目,如-24所示:
如今能够运转示例网页并反省了局,可使用以下代码在HTML表中显现数值。
<%
SetobjLogUtil=Server.CreateObject("MSWC.IISLog")
objLogUtil.OpenLogFile"extend#.log",ForReading,"W3SVC",1,0
objLogUtil.ReadFilterDateAdd("d",-1,Now),Now
%>
<TABLECELLPADDING="10">
<TR>
<TH>Date/Time</TH>
<TH>ClientIP</TH>
<TH>BytesSent</TH>
<TH>TargetURL</TH>
</TR>
<%
DoWhileNotobjLogUtil.AtEndOfLog
objLogUtil.ReadLogRecordreadthenextrecord
%>
<TR>
<TD><%=objLogUtil.DateTime%></TD>
<TD><%=objLogUtil.ClientIP%></TD>
<TD><%=objLogUtil.BytesSent%></TD>
<TD><%=objLogUtil.URLStem%></TD>
</TR>
<%
Loop
objLogUtil.CloseLogFiles(ForReading)
%>
其了局如-25所示:
对用户来说可预见费用、节约费用,可以做到花少钱办大事。由于省去了购买软件和硬件等的前期费用,用户可以租用较高级的应用软件。ASP的收费是根据软件的类型、客制化程度、用户数量、服务期限来定的,对客户来说这笔费用是可以预见的。方便于客户应用软件的升级。 |
|