[转]ASP中ActiveX控件的内嵌及调用
生活随笔
收集整理的這篇文章主要介紹了
[转]ASP中ActiveX控件的内嵌及调用
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
懂ASP(Active Server Pages)的人很多,但能用ASP自如地調(diào)用ActiveX控件的人卻不多;如果不調(diào)用ActiveX控件,則可以說微軟當(dāng)初設(shè)計(jì)ASP的初衷根本沒有達(dá)到。眾所周知,ActiveX技術(shù)是微軟在Internet上除了IE外的另一個新舉措,可以說該技術(shù)滲透在它的整個Internet策略中。ActiveX是一個功能強(qiáng)大的部件,可以用VB、C或C++等語言進(jìn)行編寫,因?yàn)槭蔷幾g性執(zhí)行,故速度比較快。 在ASP(Active Server Pages)中內(nèi)建了多個功能強(qiáng)大的ActiveX Server控件,包括Ad Rotator(動態(tài)廣告生成控件)、BrowserType Capabilities(瀏覽器相容控件)、Database Access(數(shù)據(jù)庫存取控件)、Content Linking(文件鏈接控件)和File Access Component(文件存取控件)等。當(dāng)然,ASP除了可以調(diào)用內(nèi)嵌的ActiveX控件外,還可以調(diào)用其他用戶編寫的標(biāo)準(zhǔn)的ActiveX控件。??
????
??? 在使用控件前先要進(jìn)行定義,如:<% Set對象變量名稱=Server.CreateObject("ADODB.Connection") %>,或直接用HTML的<OBJECT>和</OBJECT>標(biāo)記進(jìn)行定義,效果一樣。??
????
??? 例:<OBJECT RUNAT=SERVER
ID=對象變量名稱
PROGID="ADODB.Connection">??
????
??? </OBJECT>??
????
??? 定義好后,我們就可以開始調(diào)用它的方法來配合相關(guān)工作的進(jìn)行。??
????
??? ??
????
??? 一.內(nèi)嵌各種ActiveX控件的方法和屬性??
????
??? 1.Database Access(數(shù)據(jù)庫存取控件)??
????
??? 這是一個非常重要的部分,因?yàn)?0%以上的工作幾乎都要涉及到數(shù)據(jù)庫,使用該控件可以說是必不可少的。在ASP中使用ADO(Active Data Objects)來存取數(shù)據(jù)庫資料,如果是遠(yuǎn)程的數(shù)據(jù)源,則可采用RDO(Remote Data Objects)。ADO包括以下七個對象類。??
????
??? Command:定義一些特別的命令語法,讓你可以執(zhí)行相應(yīng)的程式。??
????
??? Connection:提供對OLE DB信息源的鏈接。??
????
??? Error:用來描述存取數(shù)據(jù)庫時發(fā)生的錯誤。??
????
??? Field:以行作為讀取信息單元。??
????
??? Parameter:使用Command時需傳入的參數(shù)。??
????
??? Property:記錄ADO對象的動態(tài)特性。??
????
??? Recordset:用來保存讀取回來的數(shù)據(jù)庫信息。??
????
??? 下面以一個最普通的例子來說明讀取數(shù)據(jù)庫信息、然后發(fā)布該信息的步驟。首先在ODBC Driver里建立一個名字為test的System DSN,鏈接到你的任意一個數(shù)據(jù)庫上;然后用寫字板創(chuàng)建一個后綴名為.asp的文本,內(nèi)容如下。??
????
??? <HTML><BODY>??
????
??? <%
set DC=CREATEOBJECT("ADODB.CONNECTION")
;定義一個DC為Connection的對象
DC.OPEN "test"
;OPEN是Connection的一個方法,如果你鏈接的是Access或Foxpro數(shù)據(jù)庫,則可采用上面的方法,如果是其他類似于sql、oracle等需要用戶名和密碼才允許訪問的數(shù)據(jù)庫,則可通過DC.OPEN"test","uid","password"來打開數(shù)據(jù)庫源。
SQL="select * FROM JOB"
set RESULT=DC.EXECUTE(SQL)
;EXECUTE是Connection的另一個方法,用于執(zhí)行SQL語句。這里定義RESULT為RECORDSET對象,用于接收SQL語句執(zhí)行后的返回結(jié)果。如果不需要保存返回結(jié)果,則可直接調(diào)用“DC.EXECUTE SQL"。
DO WHILE NOT RESULT.EOF
RESPONSE.WRITE RESULT("NAME")
;假設(shè)NAME是數(shù)據(jù)庫的一個屬性。
RESULT.MOVENEXT
;除了MOVENEXT外,還有MOVEFIRST、MOVELAST等方法,與VB類似。
LOOP
RESULT.CLOSE
%>??
????
??? </BODY></HTML>??
????
??? 從上面的例子中,我們可以清楚地看到,鏈接OLE DB信息源最常用的類是Connection類,其方法包括OPEN、EXECUTE、CLOSE、BEGINTRANS、COMMITTRANS和ROLLBACKTRANS。如果你很熟悉SQL Script中的回滾操作,那么對BEGINTRANS一定不會感到陌生,最后三個方法是用于對一些事件進(jìn)行回滾的操作,其語法如下(要補(bǔ)充的一點(diǎn)是,如果你能在數(shù)據(jù)庫里完成回滾的操作,那么最好在數(shù)據(jù)庫里進(jìn)行,因?yàn)檫@樣效率會更高,對系統(tǒng)的影響也就會更少)。??
????
??? BEGINTRANS??
????
??? 語法:[level=]Connection 對象.BeginTrans??
????
??? 其中l(wèi)evel是一long類型的變數(shù),用來存儲BeginTrans方法所傳回的level值。??
????
??? COMMITTRANS??
????
??? 語法:Connection 對象.CommitTrans??
????
??? 存儲當(dāng)前的所有動作和結(jié)果。??
????
??? ROLLBACKTRANS??
????
??? 語法:Connection 對象.RollbackTrans??
????
??? 取消所有從BeginTrans開始的工作并重新進(jìn)行初始化。??
????
??? 這里只對最常用的Connection類進(jìn)行了詳細(xì)的介紹,如果希望進(jìn)一步了解Database Access其他類庫,可訪問http://www.microsoft.com/ado/站點(diǎn)。??
????
??? ??
????
??? 2.Ad Rotator(動態(tài)廣告生成控件)??
????
??? 廣告在網(wǎng)絡(luò)上的效果越來越為人們所認(rèn)識,“網(wǎng)盟”(WebUnion)就是一個很好的范例。一個好的廣告發(fā)布程序并不容易編寫,因?yàn)槟阋紤]包括圖片出現(xiàn)的頻度、圖片的名字、鏈接的地址、顯示的尺寸、還有速度、效率和維護(hù)等諸多的問題。當(dāng)然,如果你們是一個象WebUnion這樣的大型站點(diǎn),則這是必須的;但如果你們只是一個小站點(diǎn),只是希望簡單地動態(tài)顯示一些圖片(包括鏈接)和方便維護(hù),那么Ad Rotator動態(tài)廣告生成控件絕對是你的首選。??
????
??? 為了使你有一個直觀的認(rèn)識,我們將先介紹建立動態(tài)廣告的步驟,然后再細(xì)述其方法。產(chǎn)生動態(tài)廣告,要涉及到三個文件:主文件main.asp、文本文件info.txt、副文件redi.asp。??
????
??? main.asp為要顯示廣告的頁面,內(nèi)容為:??
????
??? <% Set ad=Server.CreateObject("MSWC.AdRotator")%>??
????
??? <%= ad.GetAdvertisement("info.txt")%>??
????
??? 第一行是創(chuàng)建Ad Rotator類的對象,第二行用于取得廣告資料。??
????
??? info.txt是廣告的資料,內(nèi)容為:??
????
??? redirect redi.asp??
????
??? width 400??
????
??? height 60??
????
??? border 1??
????
??? *??
????
??? ??
????
??? 1.jpg??
????
??? http://www.gznet.com??
????
??? 廣州視窗??
????
??? 20??
????
??? ??
????
??? 2.gif??
????
??? http://zyr.yeah.net??
????
??? 網(wǎng)絡(luò)新地帶??
????
??? 30??
????
??? ??
????
??? 第一行表示當(dāng)用戶點(diǎn)擊圖片時,系統(tǒng)自動調(diào)用redi.asp程序,下面依次為廣告的寬度、高度和邊寬,再下面為圖片的名字、鏈接的地址、廣告說明(在html中的標(biāo)記為alt=...)和顯示的頻度。??
????
??? redi.asp是當(dāng)用戶點(diǎn)擊圖片時,系統(tǒng)需調(diào)用的文件,它只做一個redirect的工作。內(nèi)容為:??
????
??? <%response.redirect(request.querystring("url"))%>??
????
??? 整個編寫和維護(hù)工作都非常簡單。如果你希望增加、減少或修改某些廣告圖片和鏈接地址,只需修改info.txt文本文件即可。Ad Rotator類有三個屬性,Border(指定廣告圖片的邊寬)、Clickable(指定該廣告圖片是否提供鏈接功能)、TargetFrame(指定點(diǎn)擊超鏈接后的瀏覽頁面)和一個方法GetAdvertisement(讀取廣告信息)。如果你采用了信息檔案文本(txt),就不需要考慮Ad所提供的屬性了,如前面的例子。??
????
??? ??
????
??? 3.File Access Component(FileSystemObject,文件存取控件)??
????
??? 該控件主要用于讀取Unicode或ASCII碼的文件,包含的方法如下:??
????
??? ·CreateTextFile??
????
??? 建立一個TextStream的對象,并指向?qū)嶋H操作的文本或希望建立的文件名及目錄,如:??
????
??? set FILE=CREATEOBJECT("SCRIPTING.FileSystemObject")??
????
??? set F1=FILE.CreateTextFile("C:\TEST.TXT",TRUE)??
????
??? ;True表示允許覆蓋,False表示不允許覆蓋,這里缺省了一個參數(shù)unicode,缺省和False表示建立的文件是ASCII格式,True表示文件為Unicode格式。??
????
??? F1.WRITELINE("你好!")??
????
??? F1.CLOSE??
????
??? TextStream對象具有以下方法(即上文中的F1)。??
????
??? Close:關(guān)閉對象??
????
??? Read:讀取已打開的文件資料,帶參數(shù)指明希望讀取的字節(jié)數(shù),如:F1.Read(characters)。??
????
??? ReadAll:讀取已打開文件的全部信息(返回字符串)。??
????
??? ReadLine:讀取已打開文件的一行信息(返回字符串)。??
????
??? Skip:跳過已打開的文件信息,帶參數(shù)指明希望跳過的字節(jié)數(shù),如:F1.Skip(characters)。??
????
??? SkipLine:跳過已打開文件的一行信息。??
????
??? Write:把資料寫入到已打開的文件中,如:F1.Write(string)。??
????
??? WriteLine:把信息寫入到已打開的文件中并換行。??
????
??? WriteBlankLine:把空行寫入到已打開的文件中,帶參數(shù)指明希望寫入的空行數(shù),如:F1.WriteBlankLine(lines)。??
????
??? ·OpenTextFile??
????
??? 打開一個已存在的文件,并建立一個TextStream對象。??
????
??? 語法:[object].OpenTextFile(filename[,iomode[,create[,format]]])??
????
??? 參數(shù)說明:??
????
??? object:自定義的FileSystemObject對象名稱。??
????
??? filename:希望打開的文件名稱。??
????
??? iomode:可選參數(shù)為ForReading(讀取)或ForAppending(編輯)。??
????
??? create:指定如果文件不存在,是否自行建立,True表示建立,False表示不建立。??
????
??? format:可選參數(shù)為TristateTrue(以Unicode方式打開)、TristateFalse(以ASCII方式打開)、TristateUseDefault(用文件缺省形式打開)和缺省時以ASCII方式打開。??
????
??? ??
????
??? 4.Content Linking(文件鏈接控件)??
????
??? 該控件用于管理一些超鏈接信息,例如:我們經(jīng)常會在html文本中有一些友情鏈接,指向其他站點(diǎn),如果我們在多個頁面上有這些信息,修改時就需要做多次修改。使用了該控件后,所有這些鏈接信息都可放在同一個文本文件中,修改時只需對該文本文件進(jìn)行修改。其方法如下:??
????
??? GetListCount:計(jì)算URL列的總數(shù)。??
????
??? 語法:GetListCount(文件名)??
????
??? GetNextURL:讀取下一個URL鏈接地址。??
????
??? 語法:GetNextURL(文件名)??
????
??? GetPreviousDescription:讀取前一個URL鏈接的描述。??
????
??? 語法:GetPreviousDescription(文件名)??
????
??? GetListIndex:獲取當(dāng)前資料的索引號碼。??
????
??? 語法:GetListIndex(文件名)??
????
??? GetNthDescription:獲取當(dāng)前索引號碼的超鏈接的描述。??
????
??? 語法:GetNthDescription(文件名,索引號碼)??
????
??? GetPreviousURL:讀取上一個URL鏈接地址。??
????
??? 語法:GetPreviousURL(文件名)??
????
??? GetNextDescription:讀取下一個URL鏈接的描述。??
????
??? 語法:GetNextDescription(文件名)??
????
??? GetNthURL::獲取當(dāng)前索引號碼的超鏈接地址。??
????
??? 語法:GetNthURL(文件名,索引號碼)??
????
??? 調(diào)用該控件,可用下列代碼:??
????
??? ...??
????
??? <% set LINK=SERVER.CREATEOBJECT("MSWC.NEXTLINK")%>??
????
??? <%COUNT=LINK.GETLISTCOUNT("LINK.TXT")%>??
????
??? <%I=1%>??
????
??? <%DO WHILE (I<=COUNT)%>??
????
??? <A HREF="<%=LINK.GETNTHURL("LINK.TXT",I)%>">??
????
??? <%= LINK.GETNTHDESCRIPTION("LINK.TXT,I)%>??
????
??? ???
????
???
??
????
??? <%I=I+1%>??
????
??? <%LOOP%>??
????
??? ...??
????
??? LINK.TXT的文件格式如下:??
????
??? www.gznet.com廣州視窗??
????
??? zyr.yeah.net網(wǎng)絡(luò)新地帶??
????
??? ??
????
??? 5.BrowserType Capabilities(瀏覽器相容控件)??
????
??? 通過ASP的Server內(nèi)嵌對象可以獲取如IP地址等客戶端的信息,但如要獲取如客戶端瀏覽器是否支持ActiveX控件、背景音樂等客戶端瀏覽器的詳細(xì)資料則只能求助于BrowserType控件。該控件通過把客戶端的請求報(bào)頭與Browscap.ini文件進(jìn)行比較,得出客戶端瀏覽器的詳細(xì)資料,通過讀取該控件的屬性可以獲取相應(yīng)的資料。??
????
??? 屬性:??
????
??? ActiveXControls:是否支持ActiveX Controls。??
????
??? Backgroundsounds:是否支持背景音樂。??
????
??? Beta:Beta的版本。??
????
??? Browser:瀏覽器名稱。??
????
??? Cookies:是否支持cookies。??
????
??? Frames:是否支持frame。??
????
??? Javascript:是否支持javascript。??
????
??? Platform:客戶端平臺。??
????
??? Tables:是否支持table。??
????
??? Vbscripts:是否支持vbscript。??
????
??? Versions:版本名稱。??
????
??? ??
????
??? 二.如何調(diào)用用戶編寫的ActiveX控件??
????
??? 調(diào)用一些free或用戶編寫的ActiveX控件是ASP一個非常重要的高級應(yīng)用,下面將用一個例子具體描述其調(diào)用步驟。因特網(wǎng)上最常見的就是下載功能了,而上載功能卻不是每個站點(diǎn)都能提供。上載就是通過瀏覽器把客戶端的文件傳到服務(wù)器上,該例子就是一個實(shí)現(xiàn)上載功能的應(yīng)用。為了簡單起見,這里利用一個free的ftp ActiveX控件(當(dāng)然也可以自己編寫)來實(shí)現(xiàn)該功能。該控件名稱為ASPINET.FTP,可從http://www.genusa.com/asp/站點(diǎn)處下載。該例子含兩個文件,一個用于完成客戶端選取文件的功能(select.html)、一個用于完成接受信息流的功能(receive.asp)。??
????
??? 1.安裝該控件??
????
??? 1) 解壓??
????
??? 2) 把DLL文件移到系統(tǒng)的相應(yīng)目錄下(如:\winnt\system32 for NT),并修改系統(tǒng)注冊表;如果不是很熟悉系統(tǒng)注冊表的修改,可執(zhí)行以下命令,系統(tǒng)會自動完成所有工作(你的系統(tǒng)需要有WinInet.dll文件)。??
????
??? regsvr32 ASPInet.DLL??
????
??? 3) 運(yùn)行MarkInet.exe,使注冊表中所修改的信息生效。??
????
??? 2.select.html??
????
??? <html>??
????
??? <body>??
????
??? <form method=post action="receive.asp">??
????
??? 客戶端的文件名:<input type="file" name="cfilename" >??
????
??? <br>??
????
??? 上載到服務(wù)器后的文件名:<input type="text" name="sfilename" >??
????
??? ;你可通過網(wǎng)頁輸入希望上載到服務(wù)器上的文件名稱??
????
??? <br>??
????
??? <input type="submit" name="submit" value="確定“>??
????
??? </form>??
????
??? </body>??
????
??? </html>??
????
??? 3.receive.asp??
????
??? <%
cfilename=request("cfilename")
;讀取客戶端的文件名及路徑
sfilename=request("sfilename")
;讀取希望上載到服務(wù)器上的文件名
FTP_TRANSFER_TYPE_ASCII = 1
FTP_TRANSFER_TYPE_BINARY = 2
set ftpconn=SERVER.CREATEOBJECT("AspInet.FTP")
;創(chuàng)建ftp ActiveX控件對象
if FtpConn.FTPPutFile("Ftp服務(wù)器地址“,"anonymous", "user@hostname.net",sfilename,cfilename,FTP_TRANSFER_TYPE_BINARY) then
;參數(shù)說明:依次為Ftp服務(wù)器地址、使用者名字、密碼、Server端文件名及路徑(相對于Ftp根目錄而言,該例子使用缺省目錄,即Ftp根目錄)、客戶端的文件名及路徑、傳送類型(ASCII/Binary)
Response.Write "<p>FTP upload Success...<br>"??
????
??? else??
????
??? Response.Write "<p>FTP upload Failed...<br>"??
????
??? end if??
????
??? %>??
????
??? 如果你已經(jīng)熟練地掌握了ASP各內(nèi)嵌對象,包括ActiveX控件的使用方法,則一般的應(yīng)用對于你來說已不是難事。但要提高開發(fā)效率,則必須充分利用微軟提供的ASP開發(fā)工具InterDev配合開發(fā)。
????
??? 在使用控件前先要進(jìn)行定義,如:<% Set對象變量名稱=Server.CreateObject("ADODB.Connection") %>,或直接用HTML的<OBJECT>和</OBJECT>標(biāo)記進(jìn)行定義,效果一樣。??
????
??? 例:<OBJECT RUNAT=SERVER
ID=對象變量名稱
PROGID="ADODB.Connection">??
????
??? </OBJECT>??
????
??? 定義好后,我們就可以開始調(diào)用它的方法來配合相關(guān)工作的進(jìn)行。??
????
??? ??
????
??? 一.內(nèi)嵌各種ActiveX控件的方法和屬性??
????
??? 1.Database Access(數(shù)據(jù)庫存取控件)??
????
??? 這是一個非常重要的部分,因?yàn)?0%以上的工作幾乎都要涉及到數(shù)據(jù)庫,使用該控件可以說是必不可少的。在ASP中使用ADO(Active Data Objects)來存取數(shù)據(jù)庫資料,如果是遠(yuǎn)程的數(shù)據(jù)源,則可采用RDO(Remote Data Objects)。ADO包括以下七個對象類。??
????
??? Command:定義一些特別的命令語法,讓你可以執(zhí)行相應(yīng)的程式。??
????
??? Connection:提供對OLE DB信息源的鏈接。??
????
??? Error:用來描述存取數(shù)據(jù)庫時發(fā)生的錯誤。??
????
??? Field:以行作為讀取信息單元。??
????
??? Parameter:使用Command時需傳入的參數(shù)。??
????
??? Property:記錄ADO對象的動態(tài)特性。??
????
??? Recordset:用來保存讀取回來的數(shù)據(jù)庫信息。??
????
??? 下面以一個最普通的例子來說明讀取數(shù)據(jù)庫信息、然后發(fā)布該信息的步驟。首先在ODBC Driver里建立一個名字為test的System DSN,鏈接到你的任意一個數(shù)據(jù)庫上;然后用寫字板創(chuàng)建一個后綴名為.asp的文本,內(nèi)容如下。??
????
??? <HTML><BODY>??
????
??? <%
set DC=CREATEOBJECT("ADODB.CONNECTION")
;定義一個DC為Connection的對象
DC.OPEN "test"
;OPEN是Connection的一個方法,如果你鏈接的是Access或Foxpro數(shù)據(jù)庫,則可采用上面的方法,如果是其他類似于sql、oracle等需要用戶名和密碼才允許訪問的數(shù)據(jù)庫,則可通過DC.OPEN"test","uid","password"來打開數(shù)據(jù)庫源。
SQL="select * FROM JOB"
set RESULT=DC.EXECUTE(SQL)
;EXECUTE是Connection的另一個方法,用于執(zhí)行SQL語句。這里定義RESULT為RECORDSET對象,用于接收SQL語句執(zhí)行后的返回結(jié)果。如果不需要保存返回結(jié)果,則可直接調(diào)用“DC.EXECUTE SQL"。
DO WHILE NOT RESULT.EOF
RESPONSE.WRITE RESULT("NAME")
;假設(shè)NAME是數(shù)據(jù)庫的一個屬性。
RESULT.MOVENEXT
;除了MOVENEXT外,還有MOVEFIRST、MOVELAST等方法,與VB類似。
LOOP
RESULT.CLOSE
%>??
????
??? </BODY></HTML>??
????
??? 從上面的例子中,我們可以清楚地看到,鏈接OLE DB信息源最常用的類是Connection類,其方法包括OPEN、EXECUTE、CLOSE、BEGINTRANS、COMMITTRANS和ROLLBACKTRANS。如果你很熟悉SQL Script中的回滾操作,那么對BEGINTRANS一定不會感到陌生,最后三個方法是用于對一些事件進(jìn)行回滾的操作,其語法如下(要補(bǔ)充的一點(diǎn)是,如果你能在數(shù)據(jù)庫里完成回滾的操作,那么最好在數(shù)據(jù)庫里進(jìn)行,因?yàn)檫@樣效率會更高,對系統(tǒng)的影響也就會更少)。??
????
??? BEGINTRANS??
????
??? 語法:[level=]Connection 對象.BeginTrans??
????
??? 其中l(wèi)evel是一long類型的變數(shù),用來存儲BeginTrans方法所傳回的level值。??
????
??? COMMITTRANS??
????
??? 語法:Connection 對象.CommitTrans??
????
??? 存儲當(dāng)前的所有動作和結(jié)果。??
????
??? ROLLBACKTRANS??
????
??? 語法:Connection 對象.RollbackTrans??
????
??? 取消所有從BeginTrans開始的工作并重新進(jìn)行初始化。??
????
??? 這里只對最常用的Connection類進(jìn)行了詳細(xì)的介紹,如果希望進(jìn)一步了解Database Access其他類庫,可訪問http://www.microsoft.com/ado/站點(diǎn)。??
????
??? ??
????
??? 2.Ad Rotator(動態(tài)廣告生成控件)??
????
??? 廣告在網(wǎng)絡(luò)上的效果越來越為人們所認(rèn)識,“網(wǎng)盟”(WebUnion)就是一個很好的范例。一個好的廣告發(fā)布程序并不容易編寫,因?yàn)槟阋紤]包括圖片出現(xiàn)的頻度、圖片的名字、鏈接的地址、顯示的尺寸、還有速度、效率和維護(hù)等諸多的問題。當(dāng)然,如果你們是一個象WebUnion這樣的大型站點(diǎn),則這是必須的;但如果你們只是一個小站點(diǎn),只是希望簡單地動態(tài)顯示一些圖片(包括鏈接)和方便維護(hù),那么Ad Rotator動態(tài)廣告生成控件絕對是你的首選。??
????
??? 為了使你有一個直觀的認(rèn)識,我們將先介紹建立動態(tài)廣告的步驟,然后再細(xì)述其方法。產(chǎn)生動態(tài)廣告,要涉及到三個文件:主文件main.asp、文本文件info.txt、副文件redi.asp。??
????
??? main.asp為要顯示廣告的頁面,內(nèi)容為:??
????
??? <% Set ad=Server.CreateObject("MSWC.AdRotator")%>??
????
??? <%= ad.GetAdvertisement("info.txt")%>??
????
??? 第一行是創(chuàng)建Ad Rotator類的對象,第二行用于取得廣告資料。??
????
??? info.txt是廣告的資料,內(nèi)容為:??
????
??? redirect redi.asp??
????
??? width 400??
????
??? height 60??
????
??? border 1??
????
??? *??
????
??? ??
????
??? 1.jpg??
????
??? http://www.gznet.com??
????
??? 廣州視窗??
????
??? 20??
????
??? ??
????
??? 2.gif??
????
??? http://zyr.yeah.net??
????
??? 網(wǎng)絡(luò)新地帶??
????
??? 30??
????
??? ??
????
??? 第一行表示當(dāng)用戶點(diǎn)擊圖片時,系統(tǒng)自動調(diào)用redi.asp程序,下面依次為廣告的寬度、高度和邊寬,再下面為圖片的名字、鏈接的地址、廣告說明(在html中的標(biāo)記為alt=...)和顯示的頻度。??
????
??? redi.asp是當(dāng)用戶點(diǎn)擊圖片時,系統(tǒng)需調(diào)用的文件,它只做一個redirect的工作。內(nèi)容為:??
????
??? <%response.redirect(request.querystring("url"))%>??
????
??? 整個編寫和維護(hù)工作都非常簡單。如果你希望增加、減少或修改某些廣告圖片和鏈接地址,只需修改info.txt文本文件即可。Ad Rotator類有三個屬性,Border(指定廣告圖片的邊寬)、Clickable(指定該廣告圖片是否提供鏈接功能)、TargetFrame(指定點(diǎn)擊超鏈接后的瀏覽頁面)和一個方法GetAdvertisement(讀取廣告信息)。如果你采用了信息檔案文本(txt),就不需要考慮Ad所提供的屬性了,如前面的例子。??
????
??? ??
????
??? 3.File Access Component(FileSystemObject,文件存取控件)??
????
??? 該控件主要用于讀取Unicode或ASCII碼的文件,包含的方法如下:??
????
??? ·CreateTextFile??
????
??? 建立一個TextStream的對象,并指向?qū)嶋H操作的文本或希望建立的文件名及目錄,如:??
????
??? set FILE=CREATEOBJECT("SCRIPTING.FileSystemObject")??
????
??? set F1=FILE.CreateTextFile("C:\TEST.TXT",TRUE)??
????
??? ;True表示允許覆蓋,False表示不允許覆蓋,這里缺省了一個參數(shù)unicode,缺省和False表示建立的文件是ASCII格式,True表示文件為Unicode格式。??
????
??? F1.WRITELINE("你好!")??
????
??? F1.CLOSE??
????
??? TextStream對象具有以下方法(即上文中的F1)。??
????
??? Close:關(guān)閉對象??
????
??? Read:讀取已打開的文件資料,帶參數(shù)指明希望讀取的字節(jié)數(shù),如:F1.Read(characters)。??
????
??? ReadAll:讀取已打開文件的全部信息(返回字符串)。??
????
??? ReadLine:讀取已打開文件的一行信息(返回字符串)。??
????
??? Skip:跳過已打開的文件信息,帶參數(shù)指明希望跳過的字節(jié)數(shù),如:F1.Skip(characters)。??
????
??? SkipLine:跳過已打開文件的一行信息。??
????
??? Write:把資料寫入到已打開的文件中,如:F1.Write(string)。??
????
??? WriteLine:把信息寫入到已打開的文件中并換行。??
????
??? WriteBlankLine:把空行寫入到已打開的文件中,帶參數(shù)指明希望寫入的空行數(shù),如:F1.WriteBlankLine(lines)。??
????
??? ·OpenTextFile??
????
??? 打開一個已存在的文件,并建立一個TextStream對象。??
????
??? 語法:[object].OpenTextFile(filename[,iomode[,create[,format]]])??
????
??? 參數(shù)說明:??
????
??? object:自定義的FileSystemObject對象名稱。??
????
??? filename:希望打開的文件名稱。??
????
??? iomode:可選參數(shù)為ForReading(讀取)或ForAppending(編輯)。??
????
??? create:指定如果文件不存在,是否自行建立,True表示建立,False表示不建立。??
????
??? format:可選參數(shù)為TristateTrue(以Unicode方式打開)、TristateFalse(以ASCII方式打開)、TristateUseDefault(用文件缺省形式打開)和缺省時以ASCII方式打開。??
????
??? ??
????
??? 4.Content Linking(文件鏈接控件)??
????
??? 該控件用于管理一些超鏈接信息,例如:我們經(jīng)常會在html文本中有一些友情鏈接,指向其他站點(diǎn),如果我們在多個頁面上有這些信息,修改時就需要做多次修改。使用了該控件后,所有這些鏈接信息都可放在同一個文本文件中,修改時只需對該文本文件進(jìn)行修改。其方法如下:??
????
??? GetListCount:計(jì)算URL列的總數(shù)。??
????
??? 語法:GetListCount(文件名)??
????
??? GetNextURL:讀取下一個URL鏈接地址。??
????
??? 語法:GetNextURL(文件名)??
????
??? GetPreviousDescription:讀取前一個URL鏈接的描述。??
????
??? 語法:GetPreviousDescription(文件名)??
????
??? GetListIndex:獲取當(dāng)前資料的索引號碼。??
????
??? 語法:GetListIndex(文件名)??
????
??? GetNthDescription:獲取當(dāng)前索引號碼的超鏈接的描述。??
????
??? 語法:GetNthDescription(文件名,索引號碼)??
????
??? GetPreviousURL:讀取上一個URL鏈接地址。??
????
??? 語法:GetPreviousURL(文件名)??
????
??? GetNextDescription:讀取下一個URL鏈接的描述。??
????
??? 語法:GetNextDescription(文件名)??
????
??? GetNthURL::獲取當(dāng)前索引號碼的超鏈接地址。??
????
??? 語法:GetNthURL(文件名,索引號碼)??
????
??? 調(diào)用該控件,可用下列代碼:??
????
??? ...??
????
??? <% set LINK=SERVER.CREATEOBJECT("MSWC.NEXTLINK")%>??
????
??? <%COUNT=LINK.GETLISTCOUNT("LINK.TXT")%>??
????
??? <%I=1%>??
????
??? <%DO WHILE (I<=COUNT)%>??
????
??? <A HREF="<%=LINK.GETNTHURL("LINK.TXT",I)%>">??
????
??? <%= LINK.GETNTHDESCRIPTION("LINK.TXT,I)%>??
????
??? ???
????
???
??
????
??? <%I=I+1%>??
????
??? <%LOOP%>??
????
??? ...??
????
??? LINK.TXT的文件格式如下:??
????
??? www.gznet.com廣州視窗??
????
??? zyr.yeah.net網(wǎng)絡(luò)新地帶??
????
??? ??
????
??? 5.BrowserType Capabilities(瀏覽器相容控件)??
????
??? 通過ASP的Server內(nèi)嵌對象可以獲取如IP地址等客戶端的信息,但如要獲取如客戶端瀏覽器是否支持ActiveX控件、背景音樂等客戶端瀏覽器的詳細(xì)資料則只能求助于BrowserType控件。該控件通過把客戶端的請求報(bào)頭與Browscap.ini文件進(jìn)行比較,得出客戶端瀏覽器的詳細(xì)資料,通過讀取該控件的屬性可以獲取相應(yīng)的資料。??
????
??? 屬性:??
????
??? ActiveXControls:是否支持ActiveX Controls。??
????
??? Backgroundsounds:是否支持背景音樂。??
????
??? Beta:Beta的版本。??
????
??? Browser:瀏覽器名稱。??
????
??? Cookies:是否支持cookies。??
????
??? Frames:是否支持frame。??
????
??? Javascript:是否支持javascript。??
????
??? Platform:客戶端平臺。??
????
??? Tables:是否支持table。??
????
??? Vbscripts:是否支持vbscript。??
????
??? Versions:版本名稱。??
????
??? ??
????
??? 二.如何調(diào)用用戶編寫的ActiveX控件??
????
??? 調(diào)用一些free或用戶編寫的ActiveX控件是ASP一個非常重要的高級應(yīng)用,下面將用一個例子具體描述其調(diào)用步驟。因特網(wǎng)上最常見的就是下載功能了,而上載功能卻不是每個站點(diǎn)都能提供。上載就是通過瀏覽器把客戶端的文件傳到服務(wù)器上,該例子就是一個實(shí)現(xiàn)上載功能的應(yīng)用。為了簡單起見,這里利用一個free的ftp ActiveX控件(當(dāng)然也可以自己編寫)來實(shí)現(xiàn)該功能。該控件名稱為ASPINET.FTP,可從http://www.genusa.com/asp/站點(diǎn)處下載。該例子含兩個文件,一個用于完成客戶端選取文件的功能(select.html)、一個用于完成接受信息流的功能(receive.asp)。??
????
??? 1.安裝該控件??
????
??? 1) 解壓??
????
??? 2) 把DLL文件移到系統(tǒng)的相應(yīng)目錄下(如:\winnt\system32 for NT),并修改系統(tǒng)注冊表;如果不是很熟悉系統(tǒng)注冊表的修改,可執(zhí)行以下命令,系統(tǒng)會自動完成所有工作(你的系統(tǒng)需要有WinInet.dll文件)。??
????
??? regsvr32 ASPInet.DLL??
????
??? 3) 運(yùn)行MarkInet.exe,使注冊表中所修改的信息生效。??
????
??? 2.select.html??
????
??? <html>??
????
??? <body>??
????
??? <form method=post action="receive.asp">??
????
??? 客戶端的文件名:<input type="file" name="cfilename" >??
????
??? <br>??
????
??? 上載到服務(wù)器后的文件名:<input type="text" name="sfilename" >??
????
??? ;你可通過網(wǎng)頁輸入希望上載到服務(wù)器上的文件名稱??
????
??? <br>??
????
??? <input type="submit" name="submit" value="確定“>??
????
??? </form>??
????
??? </body>??
????
??? </html>??
????
??? 3.receive.asp??
????
??? <%
cfilename=request("cfilename")
;讀取客戶端的文件名及路徑
sfilename=request("sfilename")
;讀取希望上載到服務(wù)器上的文件名
FTP_TRANSFER_TYPE_ASCII = 1
FTP_TRANSFER_TYPE_BINARY = 2
set ftpconn=SERVER.CREATEOBJECT("AspInet.FTP")
;創(chuàng)建ftp ActiveX控件對象
if FtpConn.FTPPutFile("Ftp服務(wù)器地址“,"anonymous", "user@hostname.net",sfilename,cfilename,FTP_TRANSFER_TYPE_BINARY) then
;參數(shù)說明:依次為Ftp服務(wù)器地址、使用者名字、密碼、Server端文件名及路徑(相對于Ftp根目錄而言,該例子使用缺省目錄,即Ftp根目錄)、客戶端的文件名及路徑、傳送類型(ASCII/Binary)
Response.Write "<p>FTP upload Success...<br>"??
????
??? else??
????
??? Response.Write "<p>FTP upload Failed...<br>"??
????
??? end if??
????
??? %>??
????
??? 如果你已經(jīng)熟練地掌握了ASP各內(nèi)嵌對象,包括ActiveX控件的使用方法,則一般的應(yīng)用對于你來說已不是難事。但要提高開發(fā)效率,則必須充分利用微軟提供的ASP開發(fā)工具InterDev配合開發(fā)。
總結(jié)
以上是生活随笔為你收集整理的[转]ASP中ActiveX控件的内嵌及调用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Git和SVN的区别,Git的使用方法大
- 下一篇: --4、实验室设备管理(表)