上兩篇中作者給大家介紹了 AD Rotator、 Database Access 等組件的使用方法,今天我們接著來看看其它的一些 ASP 常用組件。
一、 Browser Capabilities 組件眾所周知,並不是所有浏覽器都支持現今 Internet 技術的方方面面。有一些特性,某些浏覽器支持而另一些浏覽器卻不支持,如 : ActiveX 控件、影像流、動態 HTML、 Flash 以及腳本程序等。使用 ASP 的 Browser Capabilities 組件,就能夠設計“智能”的 Web 頁,以適合浏覽器性能的格式呈現內容。 Browser Capabilities 組件能夠創建一個 BrowserType 對象,該對象提供帶有客戶端網絡浏覽器的功能說明的用戶腳本。該組件之所以能識別客戶浏覽器的版本等信息,主要是因為當客戶浏覽器向服務器發送頁面請求時,會自動發送一個 User Agent HTTP 標題,該標題是一個聲明浏覽器及其版本的 ASCII 字符串。 Browser Capabilities 組件將 User Agent 映射到在文件 Browscap.ini 中所注明的浏覽器 , 並通過 BrowserType 對象的屬性來識別客戶浏覽器。若該對象在 browscap.ini 文件中找不到與該標題匹配的項,那麼將使用默認的浏覽器屬性。若該對象既未找到匹配項且 browscap.ini 文件中也未指定默認的浏覽器設置,則它將每個屬性都設為字符串 "UNKNOWN"。在默認情況下, browscap.ini 文件被存放在 Windows\\\\SYSTEM\\\\INERSRV( 如果是 95/98+PWS4) 或 NT\\\\SYSTEM32\\\\INERSRV( 如果是 NT) 目錄中,你可以自己編輯這個文本文件,以添加自己的屬性或者根據最新發布的浏覽器版本的更新文件來修改該文件。請看以下 checkCookie() 過程,使用 BrowserCap 對象的 Cookie 屬性來判斷客戶端浏覽器是否支持 Cookie,並返回信息 :
< %
Sub checkCookie()
Set BrowserCap=Server.CreateObject("MSWC.BrowserType")
if BrowserCap.Cookie=True then
response.write "你的浏覽器支持 Cookie!"
else
response.write "對不起,你所使用的浏覽器不支持 Cookie!"
end if
end Sub
%>
二、 File Access 組件如果你的網齡足夠大的話,你一定見過“恐龍時代”的 CGI 留言簿,那是 WEB 留言簿最早的雛形。那時候在基於 Internet 的 WEB 應用程序中連接服務器後端數據庫還十分困難,因此留言簿中的歷史信息並不是同如今一樣存儲在後端數據庫中。那麼這些數據究竟是保存在哪裡的呢?答案就是“文本文件”, CGI 程序可以將從客戶端接收的信息寫進一個存放在服務器端的文本文件中,該文件可以是 HTML 文件或 TXT 等文件,這樣就使得程序員們可以不通過同數據庫連接就可以將客戶信息保存下來,但是寫此類 CGI 程序甚是煩瑣,下面列出了一個此類程序的最簡單的樣本 :
#!/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
#具體內容
open(FILE,">>$file_name")||die "打開文件錯誤";
print FILE "記錄時間":$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 "返回意見":$FORM{\\\'content\\\'}
close (FILE)
大家可以感覺到,與 ASP 相比此類 CGI 程序的可讀性和易操作性都較差。那麼你一定想問 ASP 是否也能直接在服務器上寫文件呢?答案當然是肯定的。但是聰明的朋友可能會想到,既然 ASP 同 WEB 數據庫的連接如此便捷,我們又何需再將客戶信息寫在文本文件中呢, ASP 的這個功能豈不是畫蛇添足?的確,對於那些我們常見的留言簿、 BBS 等 WEB 應用程序而言,無論是在程序的執行效率還是易用性上,我們都不可能再用寫文本文件來替代數據庫,但是在某些 WEB 應用領域裡寫文本文件既是一種規范也是一種相對數據庫而較便捷的方法。如果你對 NT 較熟悉的話,你一定知道 NT 具有非常強大的安全機制,它可以將幾乎所有的服務器操作和連接的信息自動保存在一個後綴名為 .log 的文件中,其實這種技術也完全可以被運用在 WEB 上,用來記錄一些的客戶登陸信息。下面的這段程序正是利用 ASP 讀寫文本文件的特性,在一個 WEB BBS 程序中創建自動記錄每個用戶發言記錄的功能。
< %
Set fs = CreateObject("Scripting.FileSystemObject")
ForReading = 1
\\\'以只讀模式打開文件。不能對此文件進行寫操作。
ForAppending = 8
\\\'打開文件並在文件末尾進行寫操作。
TristateUseDefault = -2
TristateTrue = -1
TristateFalse = 0
\\\'-----------寫入系統log開始--------
servermap=server.MapPath("\\\\bbs\\\\log\\\\")
\\\'映射系統物理路徑
temp=servermap&"\\\\"&year(date)&month(date)&"\\\\"
\\\'獲取系統物理路徑和時間,並以此作為log文件存放的物理路徑
if Not fs.FolderExists(temp) then
fs.CreateFolder(temp)
end if
\\\'檢測是否存在文件夾,否則自動創建
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文件記錄的格式為:用戶名&發信時間&用戶ip&文件路徑&信區&信件標題
if fs.FileExists(syslog) then
Set ss = fs.OpenTextFile(syslog,ForAppending,true)
else
set ss = fs.CreateTextFile(syslog,ForWriting,false)
end if
\\\'檢測log文件是否存在,如果存在則追加文件內容,反之則直接寫文件
ss.WriteLine(li)
ss.Close
\\\'-----------log文件寫入結束---------
%>
如果你沒有完全看懂上面的這段程序,就請聽作者慢慢道來。 File Access 組件提供了可用來訪問計算機文件系統的方法和屬性。我們可以使用 File Access 組件創建 FileSystemObject 對象,以上程序的第一句就是利用 File Access 組件創建了一個名為 fs 的對象實例。在對象被創建後,你可以通過它訪問文件,該對象沒有屬性,它唯一的意義就是創建、打開或讀寫文本文件。 FileSystemObject 對象有兩種最常用的方法,一種用來創建文件,另一種是用來打開並讀寫文本文件。 CreateTextFile 方法獲得你指定的文件名並創建該文件,它返回一個 TextStream 對象,你可以用該對象在文件被創建後操作該文件, CreateTextFile 方法的語法如下 :
Set objTextStream=FileSystemObject.CreateTextFile(Filename,[Overwrite],[Unicode])
下面作者給大家解釋一下 CreateTextFile 方法的參數
1、 Filename 包含文件路徑名的字符串,可以是文件的全路徑名,包括驅動器名和目錄名,或者也可以只是文件名,如果只包含文件名的話,文件將被創建在站點的根目錄下。
2、 Overwrite 布爾量,設置成 False 時可以防止 FileSystemObject 對象在創建一個新文件時刪除已存在的文件,該參數是可選的,如果沒有賦值系統默認為 true,具有相同文件名的已有文件會被刪掉。
3、 Unicode 可選參數。布爾值指明是否以 Unicode 或 ASCII 文件格式創建文件。如果以 Unicode 文件格式創建文件,則該值為 True;如果以 ASCII 文件格式創建文件,則該值為 False。如果省略此部分,則假定創建 ASCII 文件。
在前面的程序中我們用 set ss=fs.CreateTextFile(syslog,ForWriting,false) 來在 log 文件不存在的情況下創建文件並對文件進行寫操作,這裡的“ForWriting”表示寫文件。
與 CreateTextFile 方法不同, OpenTextFile 方法用來獲得你指定的文件名並打開該文件,利用它所帶的參數我們可以對文件進行各種不同的操作,和 CreateTextFile 方法一樣, OpenTextFile 方法返回一個 TextStream 對象,使得你可以在文件被打開後操作該文件。 OpenTextFile 方法的語法如下 :
Set objTextStream=FileSystemObject.OpenTextFile(Filename,[IOmode],[Create],[Format])
參數說明如下 :
1、 Filename 必須的變量,同 CreateTextFile 的 filename
2、 IOmode 可選的常量,取值為下列兩個常數之一 ForReading 或 ForAppending,如果 mode 為 1,文件以只讀方式打開,如果為 8,則文件以追加的方式打開。
3、 Create 可選的布爾量,指定如果你想打開的文件不存