直播中
FileExists(relative_url)
如果relative_url指定的文件存在,返回值為T(mén)rue,否則為False。必須給出虛擬相對(duì)路徑及文件名,并且文件必須存在于發(fā)布的Web網(wǎng)站目錄中。
Random()
產(chǎn)生一個(gè)位于-32768~32767之間的隨機(jī)整數(shù)。使用ABS函數(shù)(VBScript)或Math.abs(JScript)得到在0~32768之間的正整數(shù)。使用Mod運(yùn)算符(VBScript)或%運(yùn)算符(JScript)得到指定范圍內(nèi)的一個(gè)數(shù)值。例如:
intRand = (objTools.Random Mod 76) + 25
得到一個(gè)在25~100之間的整數(shù)。
ProcessForm(output_url,
template_url,[insertion_point])
通過(guò)template_url指定的文件處理一個(gè)HTML窗體,并且插入來(lái)自窗體中已提交給當(dāng)前頁(yè)面的數(shù)值。結(jié)果寫(xiě)進(jìn)output_url指定的文件,如果指定了可選項(xiàng)insertion_point(字符串)參數(shù)的話(huà),組件可在已存在的輸出文件中找到這個(gè)字符串,并在該位置插入新的內(nèi)容。如果insertion_point參數(shù)沒(méi)有指定,任何已存在的output_url文件則被新的輸出取代
Owner
僅適用于Macintosh機(jī),如果當(dāng)前用戶(hù)帳戶(hù)是Web網(wǎng)站的擁有者,返回值為T(mén)rue,否則返回值為False
PluginExists(plugin_name)
僅適用于Macintosh機(jī),如果指定的服務(wù)器plugin_name安裝在機(jī)器上,返回值為T(mén)rue,否則為False
2. 使用FileExists方法
在允許用戶(hù)訪問(wèn)之前,可以使用FileExists方法檢查某些文件是否存在于服務(wù)器中(注意這個(gè)方法和FileSystemObject.FileExists以同樣的方式工作)。
下面的例子中,用戶(hù)提供了網(wǎng)頁(yè)的相對(duì)URL,如果用戶(hù)想通過(guò)在名為txtURL的文本框中鍵入U(xiǎn)RL打開(kāi)網(wǎng)頁(yè),在重新定向之前可以檢查其是否存在。
<% // in Jscript:
var objTools = Server.CreateObject('MSWC.Tools');
var strURL = Request.Form('txtURL'); // collect the page URL they entered
if (objTools.FileExists(strURL)) // see if it exists
Server.Transfer(strURL) // if it does, transfer to it
Else // or if not display a message
Response.Write('Sorry, the page you requested does not exist');
%>
這里提供了一個(gè)示例頁(yè)面(使用VBScript)來(lái)演示組件的三種方法(非Macintosh),可以從ASP Installable Components主菜單中運(yùn)行,如圖6-16所示:
圖6-16 運(yùn)行Tools組件的方法的頁(yè)面
網(wǎng)頁(yè)的第一部分允許輸入一個(gè)文件的相對(duì)URL,并告訴用戶(hù)該文件是否存在。示例提供的缺省值是查看網(wǎng)站的根目錄中是否有g(shù)lobal.asa文件。點(diǎn)擊按鈕時(shí),說(shuō)明該文件是否可找到的信息將放在頁(yè)面的頂部,如圖6-17所示:
圖6-17 運(yùn)行FileExists方法的結(jié)果
把頁(yè)面的所有控件放在<FORM>中,提交回本頁(yè)面,這已經(jīng)成為一種規(guī)范。在頁(yè)面的開(kāi)始,查看點(diǎn)擊了哪個(gè)按鈕。如果是FileExists的按鈕,就調(diào)用組件的FileExists方法并顯示合適的信息。
'look for a command sent from the FORM section buttons
If Len(Request.Form("cmdExists")) Then
strFile = Request.Form("txtFile")
If objTools.FileExists(strFile) Then
Response.Write "The file '<B>" & strFile & "</B>' does exist.<P>"
Else
Response.Write "The file '" & strFile & "' <B>does not</B> exist.<P>"
End If
End If
3.使用Tools.Random方法
在ASP頁(yè)面中,有時(shí)需要一個(gè)隨機(jī)數(shù)來(lái)完成某些任務(wù),例如,把用戶(hù)重新定位到一個(gè)隨機(jī)網(wǎng)頁(yè)、選擇顏色或顯示每日提示??梢允褂肰BScript中的Rnd函數(shù),但要把所得數(shù)值轉(zhuǎn)變成指定范圍內(nèi)的整數(shù)。Tools組件的Random方法更易于使用,因?yàn)槟軌蛑苯犹峁┱麛?shù)值。
Random方法的結(jié)果是一個(gè)在-32768~32767范圍中的整數(shù)值,為了獲得一個(gè)指定范圍的整數(shù),可以使用腳本語(yǔ)言中的Abs函數(shù)并對(duì)下一個(gè)最大的整數(shù)取模。例如為了用VBScript語(yǔ)言創(chuàng)建0~20的正整數(shù),可以使用下列語(yǔ)句:
intRandom = Abs(objTools.Random) Mod 21
為了得到在50~100之間的數(shù)值,可以用:
intRandom = (Abs(objTools.Random) Mod 51) + 50
示例網(wǎng)頁(yè)使用這項(xiàng)技術(shù)生成隨機(jī)數(shù)時(shí),首先需要檢查由用戶(hù)輸入的數(shù)值,以保證這些數(shù)值既是有效正整數(shù)又有正確的相對(duì)關(guān)系。
If Len(Request.Form("cmdRandom")) Then
intMin = -1 'preset to illegal values and then
intMax = -1 'only set if a valid number is entered
strMin = Request.Form("txtMinimum")
strMax = Request.Form("txtMaximum")
If IsNumeric(strMin) Then intMin = CStr(strMin)
If IsNumeric(strMax) Then intMax = CStr(strMax)
If (intMin >= 0) And (intMax > intMin) Then
intRandom = (Abs(objTools.Random) Mod (intMax - intMin + 1)) + intMin
Response.Write "Your random value is: <B>" & intRandom & "</B><P>"
Else
Response.Write "<B>The numbers you entered are not valid.</B><P>"
End If
End If
當(dāng)頁(yè)面重新調(diào)入時(shí),結(jié)果顯示在網(wǎng)頁(yè)的頂部,如圖6-18所示:
圖6-18 運(yùn)行Random方法的結(jié)果
4.使用Tools.ProcessForm方法
Tools組件中最復(fù)雜的方法是ProcessForm,用來(lái)讀取存在磁盤(pán)上的臨時(shí)文件,并在其中插入創(chuàng)建的信息(可能來(lái)自當(dāng)前頁(yè)面的Request.Form集合的內(nèi)容),然后把結(jié)果作為一個(gè)文件輸出到磁盤(pán),這個(gè)方法的語(yǔ)法是:
ProcessForm (output_url, template_url, [insertion_point])
臨時(shí)文件和輸出文件相對(duì)于當(dāng)前頁(yè)面使用相對(duì)URL來(lái)定義。輸出文件可以是ASP網(wǎng)頁(yè),如果這樣,當(dāng)其在瀏覽器打開(kāi)時(shí),將正常處理。臨時(shí)文件可以包含普通的ASP代碼,但不運(yùn)行,僅簡(jiǎn)單地拷貝輸出文件。然而,如果把臨時(shí)文件中的ASP代碼放在<%%…%%>限定符中,當(dāng)臨時(shí)文件調(diào)入時(shí)代碼將被執(zhí)行,這允許動(dòng)態(tài)生成的數(shù)值(諸如進(jìn)行處理的時(shí)間和日期)插入到輸出頁(yè)面中。
下面是示例文件template.asp(在chapter06目錄的Tools子目錄中):
This file was created by the ASP Tools component
------------------------------------------------
The content of the request was:
Output file name: <%% = Request.Form("txtOutput") %%>
Template file name: <%% = Request.Form("txtTemplate") %%>
Insertion point text: <%% = Request.Form("txtInsert") %%>
------------------------------------------------
Created <%% = Now() %%>
示例頁(yè)面包含著預(yù)定使用這個(gè)臨時(shí)文件的控件,這些控件創(chuàng)建一個(gè)和臨時(shí)文件在同一個(gè)文件夾中的名為output.asp的輸出文件,如圖6-19所示:
圖6-19 運(yùn)行Tools.ProcessForm方法的界面
點(diǎn)擊按鈕時(shí),將運(yùn)行一部分ASP代碼,從文本框中采集數(shù)據(jù)并調(diào)用ProcessForm方法:
If Len(Request.Form("cmdProcess")) Then
strTemplate = Request.Form("txtTemplate")
strOutput = Request.Form("txtOutput")
strInsertPoint = Request.Form("txtInsert")
'…
' we display the template contents here
'…
' process the form contents
objTools.ProcessForm strOutput, strTemplate, strInsertPoint
'…
' we display the output file contents here
'…
End If
(1) 設(shè)置輸出文件的訪問(wèn)權(quán)限
如果得到一個(gè)“MSWC.Tools error 80004005 Couldn’t open output file”錯(cuò)誤信息,這意味著IIS不允許向指定的目錄中寫(xiě)入輸出文件。解決這個(gè)問(wèn)題最快捷的方法是,在Properties對(duì)話(huà)框中的Security選項(xiàng)卡中,將相應(yīng)的Tools目錄以及存放output.asp的目錄的Everyone組的Full Control設(shè)置成允許,如圖6-20所示:
圖6-20 設(shè)置輸出文件訪問(wèn)權(quán)限的界面
(2) 查看文件內(nèi)容
圖6-21顯示了上面代碼用缺省值運(yùn)行缺省值運(yùn)行的結(jié)果,可以看到原來(lái)的臨時(shí)文件內(nèi)容,以及使用ProcessForm方法插入到輸出文件中的內(nèi)容。
圖6-21 輸出文件的內(nèi)容
這里省略了顯示來(lái)自前面見(jiàn)過(guò)的文件內(nèi)容的程序代碼。顯示內(nèi)容的方法與ASP Installable Components主菜單頁(yè)面中用于顯示內(nèi)容鏈接列表文件的方法相同。使用FileSystemObject和TextStream對(duì)象的實(shí)例把整個(gè)文件讀入到一個(gè)字符串中,然后將其插入網(wǎng)頁(yè)中(記住要使用Server.HTMLEncode方法,以便把字符“<”和“>”轉(zhuǎn)換成可用于顯示的字符)。
QUOT = Chr(34) 'double-quote character
…
'create a FileSytemObject object to display the template file contents
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Response.Write "The content of the template file <B>" & _
strTemplate & "</B> is:"
Set objTStream = objFSO.OpenTextFile(Server.MapPath(strTemplate), ForReading)
strContent = Server.HTMLEncode(objTStream.ReadAll) 'read whole file
objTStream.Close
Response.Write "<DIV CLASS=" & QUOT & "showcode" & QUOT & "><PRE>" & _
strContent & "</PRE></DIV>"
…
(3) 關(guān)于插入點(diǎn)參數(shù)
ProcessForm方法可選的insertion_point參數(shù)能用來(lái)在文件中的特定點(diǎn)插入文本,這個(gè)方法是先查找輸出文件中特定字符串的第一個(gè)實(shí)例,然后在該位置插入創(chuàng)建的新內(nèi)容,在輸出文件中通過(guò)把星號(hào)(*)放在insertion_point字符串前面來(lái)放置新內(nèi)容。如果省略了insertion_point參數(shù),新的內(nèi)容會(huì)取代整個(gè)輸出文件。
注意insertion_point參數(shù)在Tools.ProcessForm方法的早期版本中不能使用。