top
Loading...
ASP篇(十五)
作 者 : 天驕創作室書生

當你用 ASP 編寫服務器端應用程序時,必須依靠 ActiveX 組件來強大 Web 應用程序的功能,譬如:你需要連接數據庫,對數據庫進行在線操作等等。

上兩篇中作者給大家介紹了 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 文件被存放在 WINDOWSSYSTEMINERSRV( 如果是 95/98+PWS4) 或 NTSYSTEM32INERSRV( 如果是 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";
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 ";
print FILE "姓名":$FORM{'name'}";
print FILE "單位":$FORM{'company'}";
print FILE "電話":$FORM{'phone'}
print FILE "地址":$FORM{'address'}";
print FILE "郵編":$FORM{'zip'}
print FILE "郵件地址":$FORM{'email'}";
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("bslog")
'映射系統物理路徑
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:bslog月份月日.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 可選的布爾量,指定如果你想打開的文件不存在是做什么操作,如果其值為 True,當文件不存在時就自動創建一個空的文件。如果為 False,就會在文件沒找到時產生一個出錯信息,其默認值是 False,建議將其設為 True,以避免在打開文件時檢查是否出錯。

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

在打開或創建了文本文件后,就得到一個 TextStream 對象,該對象有一個光標,就好象是在字處理程序中的光標一樣,指出接下來要敲入的字符將出現的位置,它同時也指出你要讀取的字符的位置。不能通過 CreatObject 來創建一個 TextStream 對象,得到 TextStream 對象的唯一方法是如前所述的用 FileSystemObject 對象打開一個存在的文本文件或者創建一個新的文件。

下面列出了 TextStream 對象的屬性和方法

TextStream.AtEndOfLine 只讀布爾量,當光標在當前行的末尾時,其值為 true,反之則為 false

TextStream.AtEndOfStream 只讀布爾量,如果光標在流的末尾時,其值為 true,否則為 false

TextStream.Column 只讀的整數,統計從行首到當前光標位置之間的字符數

TextStream.Line 只讀的整數,指明光標所在行在整個文件中的行號

TextStream.close() 關閉流以及對應的文本文件

TextStream.read(Num) 指定從光標的當前位置開始從文本文件中讀取一定數目的字符

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

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

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

TextStream.writeline() 將一個文本串寫入流中

TextStream.skip(Num) 在流中,將光標的位置移動一定數目的字符串長度

TextStream.skiplines() 在流中,將光標移動一定數目的行數

TextStream.writeblank 將一定數目的空行寫入流中

lines(num)

相信大家現在已經可以感覺到 ASP File Access 組件的強大功能了,其實它遠不僅僅可以寫一些 log 文件,通過它你甚至可以毫不費力的遠程自動更新你的網站,你只要把固定格式的文本文件傳送到遠端的服務器上,通過 File Access 組件讀取文件,并自動生成全新 HTML 頁面即可,而不必再辛辛苦苦地一個一個地更新 HTML 文件。如果你有興趣,你完全可以用 ASP 的 File Access 組件寫一個自己的全自動 HTML 生成器,充分享受維護網站的超前輕松感。

(待續未完)
作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗