作者: 書生
當你用 ASP 編寫伺服器端應用程式時,必須依靠 ActiveX
組件來強大 Web
應用程式的功能,譬如:你需要串連資料庫,對資料庫進行線上操作等等。
上兩篇中作者給大家介紹了 AD Rotator、 Database Access
等組件的使用方法,今天我們接著來看看其它的一些 ASP 常用組件。
一、 Browser Capabilities
組件眾所周知,並不是所有瀏覽器都支援現今 Internet
技術的方方面面。有一些特性,某些瀏覽器支援而另一些瀏覽器卻不支援,如
: ActiveX 控制項、影像流、動態超文字標記語言、 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
%>
有關 Browser Capabilities
組件的詳細資料,請參見動態網站設計十八般武藝 --ASP 篇 (2)。
二、 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 syslo