明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

ASP實(shí)用大全-ASP服務(wù)器組件(1)

[摘要]ASP常用組件 ASP 編寫(xiě)服務(wù)器端應(yīng)用程序時(shí),必須依靠 ActiveX 組件來(lái)強(qiáng)大 Web 應(yīng)用程序的功能,譬如:你需要連接數(shù)據(jù)庫(kù),對(duì)數(shù)據(jù)庫(kù)進(jìn)行在線操作等等! ∩蟽善凶髡呓o大家介紹了 AD Rotator、 Database Access 等組件的使用方法,今天我們接著...

ASP常用組件

           ASP 編寫(xiě)服務(wù)器端應(yīng)用程序時(shí),必須依靠 ActiveX 組件來(lái)強(qiáng)大 Web 應(yīng)用程序的功能,譬如:你需要連接數(shù)據(jù)庫(kù),對(duì)數(shù)據(jù)庫(kù)進(jìn)行在線操作等等。

  上兩篇中作者給大家介紹了 AD Rotator、 Database Access 等組件的使用方法,今天我們接著來(lái)看看其它的一些 ASP 常用組件。

   一、 Browser Capabilities 組件眾所周知,并不是所有瀏覽器都支持現(xiàn)今 Internet 技術(shù)的方方面面。有一些特性,某些瀏覽器支持而另一些瀏覽器卻不支持,如 : ActiveX 控件、影像流、動(dòng)態(tài) HTML、 Flash 以及腳本程序等。使用 ASP 的 Browser Capabilities 組件,就能夠設(shè)計(jì)“智能”的 Web 頁(yè),以適合瀏覽器性能的格式呈現(xiàn)內(nèi)容。 Browser Capabilities 組件能夠創(chuàng)建一個(gè) BrowserType 對(duì)象,該對(duì)象提供帶有客戶(hù)端網(wǎng)絡(luò)瀏覽器的功能說(shuō)明的用戶(hù)腳本。該組件之所以能識(shí)別客戶(hù)瀏覽器的版本等信息,主要是因?yàn)楫?dāng)客戶(hù)瀏覽器向服務(wù)器發(fā)送頁(yè)面請(qǐng)求時(shí),會(huì)自動(dòng)發(fā)送一個(gè) User Agent HTTP 標(biāo)題,該標(biāo)題是一個(gè)聲明瀏覽器及其版本的 ASCII 字符串。 Browser Capabilities 組件將 User Agent 映射到在文件 Browscap.ini 中所注明的瀏覽器 , 并通過(guò) BrowserType 對(duì)象的屬性來(lái)識(shí)別客戶(hù)瀏覽器。若該對(duì)象在 browscap.ini 文件中找不到與該標(biāo)題匹配的項(xiàng),那么將使用默認(rèn)的瀏覽器屬性。若該對(duì)象既未找到匹配項(xiàng)且 browscap.ini 文件中也未指定默認(rèn)的瀏覽器設(shè)置,則它將每個(gè)屬性都設(shè)為字符串 "UNKNOWN"。在默認(rèn)情況下, browscap.ini 文件被存放在 WINDOWS\SYSTEM\INERSRV( 如果是 95/98+PWS4) 或 NT\SYSTEM32\INERSRV( 如果是 NT) 目錄中,你可以自己編輯這個(gè)文本文件,以添加自己的屬性或者根據(jù)最新發(fā)布的瀏覽器版本的更新文件來(lái)修改該文件。請(qǐng)看以下 checkCookie() 過(guò)程,使用 BrowserCap 對(duì)象的 Cookie 屬性來(lái)判斷客戶(hù)端瀏覽器是否支持 Cookie,并返回信息 :

$#@60; %
Sub checkCookie()
Set BrowserCap=Server.CreateObject("MSWC.BrowserType")
if BrowserCap.Cookie=True then
response.write "你的瀏覽器支持 Cookie!"
else
response.write "對(duì)不起,你所使用的瀏覽器不支持 Cookie!"
end if
end Sub
%$#@62;

   有關(guān) Browser Capabilities 組件的詳細(xì)信息,請(qǐng)參見(jiàn)動(dòng)態(tài)網(wǎng)站設(shè)計(jì)十八般武藝 --ASP 篇 (2)。

   二、 File Access 組件如果你的網(wǎng)齡足夠大的話,你? 見(jiàn)過(guò)“恐龍時(shí)代”的 CGI 留言簿,那是 WEB 留言簿最早的雛形。那時(shí)候在基于 Internet 的 WEB 應(yīng)用程序中連接服務(wù)器后端數(shù)據(jù)庫(kù)還十分困難,因此留言簿中的歷史信息并不是同如今一樣存儲(chǔ)在后端數(shù)據(jù)庫(kù)中。那么這些數(shù)據(jù)究竟是保存在哪里的呢?答案就是“文本文件”, CGI 程序可以將從客戶(hù)端接收的信息寫(xiě)進(jìn)一個(gè)存放在服務(wù)器端的文本文件中,該文件可以是 HTML 文件或 TXT 等文件,這樣就使得程序員們可以不通過(guò)同數(shù)據(jù)庫(kù)連接就可以將客戶(hù)信息保存下來(lái),但是寫(xiě)此類(lèi) CGI 程序甚是煩瑣,下面列出了一個(gè)此類(lèi)程序的最簡(jiǎn)單的樣本 :

#!/usr/local/bin/perl
# Perl Location one your server
print "Content-type: text/plain\n\n";
if($ENV{REQUEST_METHOD}eq"POST"){
read(STDIN,$buffer,$ENV{CONTENT_LENGTH});
}elsif($ENV{REQUEST_METHOD}eq"GET"){
$buffer=$ENV{QUERY_STIRNG};
}
@pairs=split(/&/,$buffer);
foreach $pair(@pairs){
($name,$value)=split(/=/,$pair);
$value=~tr/+//;
$value=~s/%([a-f A-F 0-9][a-f A-f 0-9])/pack("C",hex($1))/eg;
$FORM{$name}=$value;}
$file_name="guestbook.txt";#File name
#具體內(nèi)容
open(FILE,"$#@62;$#@62;$file_name") die "打開(kāi)文件錯(cuò)誤";
print FILE "記錄時(shí)間":$date \n\n";
print FILE "姓名":$FORM{name}";
print FILE "單位":$FORM{company}\n";
print FILE "電話":$FORM{phone}
print FILE "地址":$FORM{address}\n";
print FILE "郵編":$FORM{zip}
print FILE "郵件地址":$FORM{email}\n";
print FILE "返回意見(jiàn)":$FORM{content}
close (FILE)

  大家可以感覺(jué)到,與 ASP 相比此類(lèi) CGI 程序的可讀性和易操作性都較差。那么你一定想問(wèn) ASP 是否也能直接在服務(wù)器上寫(xiě)文件呢?答案當(dāng)然是肯定的。但是聰明的朋友可能會(huì)想到,既然 ASP 同 WEB 數(shù)據(jù)庫(kù)的連接如此便捷,我們又何需再將客戶(hù)信息寫(xiě)在文本文件中呢, ASP 的這個(gè)功能豈不是畫(huà)蛇添足?的確,對(duì)于那些我們常見(jiàn)的留言簿、 BBS 等 WEB 應(yīng)用程序而言,無(wú)論是在程序的執(zhí)行效率還是易用性上,我們都不可能再用寫(xiě)文本文件來(lái)替代數(shù)據(jù)庫(kù),但是在某些 WEB 應(yīng)用領(lǐng)域里寫(xiě)文本文件既是一種規(guī)范也是一種相對(duì)數(shù)據(jù)庫(kù)而較便捷的方法。如果你對(duì) NT 較熟悉的話,你一定知道 NT 具有非常強(qiáng)大的安全機(jī)制,它可以將幾乎所有的服務(wù)器操作和連接的信息自動(dòng)保存在一個(gè)后綴名為 .log 的文件中,其實(shí)這種技術(shù)也完全可以被運(yùn)用在 WEB 上,用來(lái)記錄一些的客戶(hù)登陸信息。下面的這段程序正是利用 ASP 讀寫(xiě)文本文件的特性,在一個(gè) WEB BBS 程序中創(chuàng)建自動(dòng)記錄每個(gè)用戶(hù)發(fā)言記錄的功能。

$#@60; %
Set fs = CreateObject("Scripting.FileSystemObject")
ForReading = 1
以只讀模式打開(kāi)文件。不能對(duì)此文件進(jìn)行寫(xiě)操作。
ForAppending = 8
打開(kāi)文件并在文件末尾進(jìn)行寫(xiě)操作。
TristateUseDefault = -2
TristateTrue = -1
TristateFalse = 0

-----------寫(xiě)入系統(tǒng)log開(kāi)始--------
servermap=server.MapPath("\bbs\log\")
映射系統(tǒng)物理路徑
temp=servermap&"\"&year(date)&month(date)&"\"
獲取系統(tǒng)物理路徑和時(shí)間,并以此作為log文件存放的物理路徑
if Not fs.FolderExists(temp) then
fs.CreateFolder(temp)
end if
檢測(cè)是否存在文件夾,否則自動(dòng)創(chuàng)建
dim syslog
dim tempname
tempname=date
syslog=temp&tempname&".log"
文件名為e:\bbs\log\月份\月日.log
li=user&"&"&Now&"&"&Request.ServerVariables("REMOTE_ADDR")&"&"&tempfile&"&"&letter&"&"&title
log文件記錄的格式為:用戶(hù)名&發(fā)信時(shí)間&用戶(hù)ip&文件路徑&信區(qū)&信件標(biāo)題
if fs.FileExists(syslog) then
Set ss = fs.OpenTextFile(syslog,ForAppending,true)
else
set ss = fs.CreateTextFile(syslog,ForWriting,false)
end if
檢測(cè)log文件是否存在,如果存在則追加文件內(nèi)容,反之則直接寫(xiě)文件
ss.WriteLine(li)
ss.Close
-----------log文件寫(xiě)入結(jié)束---------
%$#@62;

  如果你沒(méi)有完全看懂上面的這段程序,就請(qǐng)聽(tīng)作者慢慢道來(lái)。 File Access 組件提供了可用來(lái)訪問(wèn)計(jì)算機(jī)文件系統(tǒng)的方法和屬性。我們可以使用 File Access 組件創(chuàng)建 FileSystemObject 對(duì)象,以上程序的第一句就是利用 File Access 組件創(chuàng)建了一個(gè)名為 fs 的對(duì)象實(shí)例。在對(duì)象被創(chuàng)建后,你可以通過(guò)它訪問(wèn)文件,該對(duì)象沒(méi)有屬性,它唯一的意義就是創(chuàng)建、打開(kāi)或讀寫(xiě)文本文件。 FileSystemObject 對(duì)象有兩種最常用的方法,一種用來(lái)創(chuàng)建文件,另一種是用來(lái)打開(kāi)并讀寫(xiě)文本文件。 CreateTextFile 方法獲得你指定的文件名并創(chuàng)建該文件,它返回一個(gè) TextStream 對(duì)象,你可以用該對(duì)象在文件被創(chuàng)建后操作該文件, CreateTextFile 方法的語(yǔ)法如下 :

  Set objTextStream=FileSystemObject.CreateTextFile(Filename,[Overwrite],[Unicode])

  下面作者給大家解釋一下 CreateTextFile 方法的參數(shù)

  1、 Filename 包含文件路徑名的字符串,可以是文件的全路徑名,包括驅(qū)動(dòng)器名和目錄名,或者也可以只是文件名,如果只包含文件名的話,文件將被創(chuàng)建在站點(diǎn)的根目錄下。

  2、 Overwrite 布爾量,設(shè)置成 False 時(shí)可以防止 FileSystemObject 對(duì)象在創(chuàng)建一個(gè)新文件時(shí)刪除已存在的文件,該參數(shù)是可選的,如果沒(méi)有賦值系統(tǒng)默認(rèn)為 true,具有相同文件名的已有文件會(huì)被刪掉。

  3、 Unicode 可選參數(shù)。布爾值指明是否以 Unicode 或 ASCII 文件格式創(chuàng)建文件。如果以 Unicode 文件格式創(chuàng)建文件,則該值為 True;如果以 ASCII 文件格式創(chuàng)建文件,則該值為 False。如果省略此部分,則假定創(chuàng)建 ASCII 文件。

  在前面的程序中我們用 set ss=fs.CreateTextFile(syslog,ForWriting,false) 來(lái)在 log 文件不存在的情況下創(chuàng)建文件并對(duì)文件進(jìn)行寫(xiě)操作,這里的“ForWriting”表示寫(xiě)文件。

  與 CreateTextFile 方法不同, OpenTextFile 方法用來(lái)獲得你指定的文件名并打開(kāi)該文件,利用它所帶的參數(shù)我們可以對(duì)文件進(jìn)行各種不同的操作,和 CreateTextFile 方法一樣, OpenTextFile 方法返回一個(gè) TextStream 對(duì)象,使得你可以在文件被打開(kāi)后操作該文件。 OpenTextFile 方法的語(yǔ)法如下 :

   Set objTextStream=FileSystemObject.OpenTextFile(Filename,[IOmode],[Create],[Format])

  參數(shù)說(shuō)明如下 :

  1、 Filename 必須的變量,同 CreateTextFile 的 filename

  2、 IOmode 可選的常量,取值為下列兩個(gè)常數(shù)之一 ForReading 或 ForAppending,如果 mode 為 1,文件以只讀方式打開(kāi),如果為 8,則文件以追加的方式打開(kāi)。

  3、 Create 可選的布爾量,指定如果你想打開(kāi)的文件不存在是做什么操作,如果其值為 True,當(dāng)文件不存在時(shí)就自動(dòng)創(chuàng)建一個(gè)空的文件。如果為 False,就會(huì)在文件沒(méi)找到時(shí)產(chǎn)生一個(gè)出錯(cuò)信息,其默認(rèn)值是 False,建議將其設(shè)為 True,以避免在打開(kāi)文件時(shí)檢查是否出錯(cuò)。

   4、 Format 可選值,可以選擇三種 Tristate 值分別指定文件的格式, -2、 -1、和 0 分別對(duì)應(yīng)于系統(tǒng)缺省、 unicode 和 ASCII。

  在打開(kāi)或創(chuàng)建了文本文件后,就得到一個(gè) TextStream 對(duì)象,該對(duì)象有一個(gè)光標(biāo),就好象是在字處理程序中的光標(biāo)一樣,指出接下來(lái)要敲入的字符將出現(xiàn)的位置,它同時(shí)也指出你要讀取的字符的位置。不能通過(guò) CreatObject 來(lái)創(chuàng)建一個(gè) TextStream 對(duì)象,得到 TextStream 對(duì)象的唯一方法是如前所述的用 FileSystemObject 對(duì)象打開(kāi)一個(gè)存在的文本文件或者創(chuàng)建一個(gè)新的文件。

   下面列出了 TextStream 對(duì)象的屬性和方法

   TextStream.AtEndOfLine 只讀布爾量,當(dāng)光標(biāo)在當(dāng)前行的末尾時(shí),其值為 true,反之則為 false

   TextStream.AtEndOfStream 只讀布爾量,如果光標(biāo)在流的末尾時(shí),其值為 true,否則為 false

   TextStream.Column 只讀的整數(shù),統(tǒng)計(jì)從行首到當(dāng)前光標(biāo)位置之間的字符數(shù)

   TextStream.Line 只讀的整數(shù),指明光標(biāo)所在行在整個(gè)文件中的行號(hào)

   TextStream.close() 關(guān)閉流以及對(duì)應(yīng)的文本文件

   TextStream.read(Num) 指定從光標(biāo)的當(dāng)前位置開(kāi)始從文本文件中讀取一定數(shù)目的字符

   TextStream.readall() 將整個(gè)流讀入一個(gè)字符串中

   TextStream.readline() 將一整行的字符讀入一個(gè)字符串中

   TextStream.write(text) 將一個(gè)字符串寫(xiě)入流中

   TextStream.writeline() 將一個(gè)文本串寫(xiě)入流中

   TextStream.skip(Num) 在流中,將光標(biāo)的位置移動(dòng)一定數(shù)目的字符串長(zhǎng)度

   TextStream.skiplines() 在流中,將光標(biāo)移動(dòng)一定數(shù)目的行數(shù)

   TextStream.writeblank 將一定數(shù)目的空行寫(xiě)入流中

   lines(num)

  相信大家現(xiàn)在已經(jīng)可以感覺(jué)到 ASP File Access 組件的強(qiáng)大功能了,其實(shí)它遠(yuǎn)不僅僅可以寫(xiě)一些 log 文件,通過(guò)它你甚至可以毫不費(fèi)力的遠(yuǎn)程自動(dòng)更新你的網(wǎng)站,你只要把固定格式的文本文件傳送到遠(yuǎn)端的服務(wù)器上,通過(guò) File Access 組件讀取文件,并自動(dòng)生成全新 HTML 頁(yè)面即可,而不必再辛辛苦苦地一個(gè)一個(gè)地更新 HTML 文件。如果你有興趣,你完全可以用 ASP 的 File Access 組件寫(xiě)一個(gè)自己的全自動(dòng) HTML 生成器,充分享受維護(hù)網(wǎng)站的超前輕松感。