摘要控件能實現(xiàn)各種各樣的功能,文章圍繞解決網(wǎng)站控件技術(shù)主要存在的兩個問題:(1)如何讓控件與服務(wù)器端腳本進行交互;(2)如何發(fā)布控件,讓控件能在客戶端的瀏覽器上正常使用?通過教授學(xué)生開發(fā)“ftp文件上傳” 控件實例探討網(wǎng)站控件技術(shù)。
關(guān)鍵詞 控件 服務(wù)器端腳本 客戶端 ACCESS數(shù)據(jù) 打包
中圖分類號:TP311 文獻標(biāo)志碼:A
Analysis of Website Control Technology
CHEN Rui
(Guangzhou Huangpu Vocational and Technical School, Guangzhou, Guangdong 510725)
AbstractControl can achieve a variety of functions, the article is around solving the two major problems of web control technology: (1) How to make the control to interact with server-side scripting; (2) How to release control, and allow control narmally used in the client's browser? This paper discusses site control technology through the example of teaching students to develop \"ftp file upload\" control.
Key wordscontrol; server-side script; client; ACCESS data; packaging
在教授學(xué)生開發(fā)“ftp文件上傳” 控件實例中主要運用了VB、ASP、ACCESS等編程開發(fā)工具及IIs5.0搭建服務(wù)器平臺。由于VB自帶的程序打包工具,能夠輕松地打包控件、發(fā)布控件,所以我們在“ftp上傳工具” 控件實例開發(fā)中,選用了中職學(xué)生最為熟悉的VB作為開發(fā)工具;ASP與VB的語法極為相似,也是中職計算機專業(yè)最為常設(shè)的專業(yè)課程之一,所以我們選用中職學(xué)生較為熟悉的ASP作為服務(wù)器端腳本;由于ACCESS數(shù)據(jù)簡單、且方便測試,所以我們選用ACCESS數(shù)據(jù)庫文件;對中職生而言,Windows自帶的IIS信息服務(wù)器可以說是最為簡單和常用的服務(wù)器平臺搭建工具之一,因此這個實例也是選用IIs5.0(或以上版本)來搭建web和ftp服務(wù)器平臺。
“ftp文件上傳” 控件實例主要功能有:從web服務(wù)器的數(shù)據(jù)庫里取得指定ftp服務(wù)器的用戶名和密碼,然后把文件上傳到ftp服務(wù)器,最后把成功上傳文件的文件名保存回web服務(wù)器的數(shù)據(jù)庫。
圖1
圖2
下面從“ftp文件上傳”控件實例開發(fā)的六個步驟中詳細(xì)闡述解決“(1)如何讓控件與服務(wù)器端腳本進行交互”及“(2)如何發(fā)布控件,讓控件能在客戶端的瀏覽器上正常使用?”兩個問題的過程及控件技術(shù)剖析。
(1)用ACCESS建立一個db.mdb文件,文件包含兩個表:
表1為user :存儲ftp服務(wù)器的用戶和密碼
(表結(jié)構(gòu)如圖1)(內(nèi)容如圖2)
表2為files:(存儲成功上傳的文件名)
表2為files :用于保存已經(jīng)上傳的文件的文件名(表結(jié)構(gòu)如下圖3)
圖3
(2)用VB創(chuàng)建activex控件。
打開VB,點擊【文件】菜單下面的【新建】,選擇activex控件,建立activex控件工程。保存工程到【G:\\用VB開發(fā)文件上傳控件,用于網(wǎng)頁】
打開部件面板,添加兩個部件:
① Microsoft Common Dialog Control6.0(對話框控件,用來選擇要上傳的文件)
② Microsoft Internet Transfer Control6.0(用于上傳文件到ftp服務(wù)器)
●加一個文本框(Text1)到設(shè)計面板,屬性Text設(shè)置為空,屬性enable為1
●加一個標(biāo)簽(label1)到設(shè)計面板, 屬性caption設(shè)置為“你選擇的文件”
●加兩個按鈕command1、command2到到設(shè)計面板,caption屬性分別設(shè)為“打開文件”、“上傳”
●加一個CommonDialog1控件到設(shè)計面板(Microsoft Common Dialog Control6.0)
●加一個inet1控件到設(shè)計面板(Microsoft Internet Transfer Control6.0)
雙擊設(shè)計面板,打開代碼(code)窗口:(以下程序后面【 】內(nèi)的文字為程序代碼注釋)
Private user, pwd As String'【保存從asp文件中傳遞過來的ftp的用戶名和密碼】
'【以下定義兩個共有屬性username、password,用來做為從asp文件獲得ftp用戶名和密碼的接口,用Property Get、Property Let方法來定義屬性】
Public Property Get username() As String
username = user '【得到屬性】
End Property
Public Property Let username(ByVal userstr As String)
user = userstr '【設(shè)置屬性】
PropertyChanged \"username\"'【user和username是相關(guān)聯(lián)系,保存一樣的數(shù)據(jù),一個改變了,另一個更著改變】
End Property
Public Property Get password() As String
password = pwd '【得到屬性】
End Property
Public Property Let password(ByVal pwdstr As String)
pwd = pwdstr '【設(shè)置屬性】
PropertyChanged \"password\" ' 【pwd和password是相關(guān)聯(lián)系,保存一樣的數(shù)據(jù),一個改變了,另一個更著改變】
End Property
'【以下代碼很重要,是數(shù)據(jù)成功傳遞的關(guān)鍵】
'【從存貯器中加載屬性值】
Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
user = PropBag.ReadProperty(\"username\", \"\")
pwd = PropBag.ReadProperty(\"password\", \"\")
End Sub
'【將屬性值寫到存儲器】
Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
Call PropBag.WriteProperty(\"username\", user, \"\")
Call PropBag.WriteProperty(\"password\", pwd, \"\")
End Sub
'【以下是對text1的編程,text1用來顯示選中的要上傳文件的完整路徑】
Private Sub Text1_Change() '【當(dāng)文本框內(nèi)容改變時,觸發(fā)該事件】
If Text1.Text <> \"\" Then
Command1.Enabled = True '【當(dāng)文本框內(nèi)容改變時,有內(nèi)容,上傳按鈕可用】
Else
Command1.Enabled = False '【當(dāng)文本框內(nèi)容改變時,無內(nèi)容,上傳按鈕不可用】
End If
End Sub
'【command2為【打開文件】按鈕,用來選擇要上傳的文件】
Private Sub Command2_Click()
CommonDialog1.FileName = \"\"
CommonDialog1.ShowOpen
If CommonDialog1.FileName <> \"\" Then
Text1.Text = CommonDialog1.FileName'【把選中的文件賦給文本框】
End If
End Sub
'【command1為【上傳】按鈕,將選中的文件上傳到ftp服務(wù)器】
Private Sub Command1_Click()
IfText1.Text <> \"\"Then
IfDir(Text1.Text) <> \"\"Then'【如果文件存在】
Command1.Enabled = False'【上傳按鈕,要等到當(dāng)前文件傳送完才可用】
fst = Split(Text1.Text, \"\\\")'【分隔路徑,獲得文件名】
Inet1.password = pwd '【設(shè)置ftp服務(wù)器密碼】
Inet1.username = user '【設(shè)置ftp用戶名】
Inet1.RemoteHost = \"192.168.1.1\"'【設(shè)置ftp服務(wù)器地址】
Inet1.Protocol = icFTP'【設(shè)置上傳文件用的協(xié)議】
Inet1.RemotePort = 21 '【設(shè)置ftp服務(wù)器的接收文件用的端口】
On Error GoTo errh: '【以下程序如果執(zhí)行出錯就跳轉(zhuǎn)去提示出錯信息】
Inet1.Execute , \"put \" Text1.Text \" upfiledata/\" fst(UBound(fst)) '【inet1控件上傳文件到ftp服務(wù)器的 [upfiledata] 目錄下】
isbusy = True
Do While isbusy'【讓程序等待文件上傳結(jié)束】
isbusy = Inet1.StillExecuting
DoEvents
Loop
Text1.Text = \"\"
Command1.Enabled = True'【文件傳送完,恢復(fù)上傳按鈕按變成可用】
'【重新提交網(wǎng)頁,傳遞已傳送的文件名給asp文件,以保存文件名到數(shù)據(jù)庫】
Shell \"explorer.exe http://192.168.1.1/ upfile /u1.asp?fn=\" fst(UBound(fst))\"
Exit Sub
errh: '【提示出錯信息】
MsgBox Err.Description, , \"信息提示\"
Command1.Enabled = True'【出錯提示后,重新恢復(fù)上傳按鈕按變成可用】
End If
End If
End Sub
控件設(shè)計完成,點擊【文件】菜單下面的【生成工程1ocx】,在彈出的【生成工程】對話框中輸入a.ocx,生成控件。
(3)打包控件。
第一步:打開VB自帶的【package deployment 向?qū)А砍绦颉?/p>
第二步:選擇工程保存的位置,點擊【打包】。
第三步:選擇【Internet包1】點擊【下一步】按鈕。
第四步:在包類型對話框中選擇【Internet軟件包】,點擊【下一步】按鈕。
第五步:選擇包保存的位置,默認(rèn)即可,點擊【下一步】按鈕。
第六步:【文件】列表框中的文件全部勾選,點擊【下一步】按鈕。
第七步:在【文件】列表框中分別選中每個文件,都在【文件源】框中設(shè)置為第一項:【包含在此壓縮文件中】,點擊【下一步】按鈕。
第八步:在安全設(shè)置中【設(shè)置腳本安全性】為【是】,【設(shè)置初次化安全性】為【是】,這個設(shè)置很關(guān)鍵,一定要設(shè)置為【是】,如果設(shè)置為【否】,控件將無法在客戶端正常顯示,點擊【下一步】按鈕。
第九步:點擊【完成】按鈕,控件打包完成,生成的包文件名為“ a.cab ”。
(4)編寫【u1.asp】文件,用來傳遞數(shù)據(jù)給控件,同時接收控件傳回的數(shù)據(jù)。
用記事本新建【u1.asp】文件,寫代碼如下:
<%@ language=VBscript %>
<%
dim conn
dim connectstr
set conn=server.createobject(\"adodb.connection\")
connectstr=\"provider=microsoft.jet.oledb.4.0;data source=\" server.mappath(\"db.mdb\")
conn.Open connectstr'【打開對數(shù)據(jù)庫db.mdb的連接】
Set rs =server.createobject(\"adodb.recordset\")
rs.Open \"user\",conn,3,3 '【打開user表獲得ftp的用戶名和密碼】
if not rs.eof then
session(\"us\")=rs(“username”) '【把數(shù)據(jù)保存到session變量中】
session(\"pd\")=rs(“password”)
end if
rs.close
%>
打開工程保存的文件夾【G:\\用VB開發(fā)文件上傳控件,用于網(wǎng)頁】,里面有個【包】文件夾,保存了剛才打包的控件,【a.cab文件】和【a.htm】文件。用記事本打開文件a.htm,找到如下這段代碼