議asp技術(shù)的運(yùn)用
時(shí)間:2022-04-07 11:38:00
導(dǎo)語(yǔ):議asp技術(shù)的運(yùn)用一文來(lái)源于網(wǎng)友上傳,不代表本站觀點(diǎn),若需要原創(chuàng)文章可咨詢客服老師,歡迎參考。
一、asp技術(shù)簡(jiǎn)介
asp技術(shù)asp(activeserverpages動(dòng)態(tài)網(wǎng)頁(yè))是微軟公司推出的一種用以取代cgi(commongatewayinterface通用網(wǎng)關(guān)接口)的技術(shù)。目前,internet上的許多基于windows平臺(tái)的web站點(diǎn)已開(kāi)始應(yīng)用asp來(lái)替換cgi。簡(jiǎn)單地講,asp是一個(gè)位于服務(wù)器端的腳本運(yùn)行環(huán)境,通過(guò)這種環(huán)境,用戶可以創(chuàng)建和運(yùn)行動(dòng)態(tài)的交互式web服務(wù)器應(yīng)用程序,如交互式動(dòng)態(tài)網(wǎng)頁(yè),包括使用html表單收集和處理信息,上傳與下載等等。通常情況下,用戶通過(guò)瀏覽器看到的網(wǎng)頁(yè)大多是靜態(tài)的,目前internet上的許多站點(diǎn),仍然提供"靜態(tài)"(static)的主頁(yè)內(nèi)容。所謂"靜態(tài)",指的就是站點(diǎn)的主頁(yè)內(nèi)容是"固定不變"的。當(dāng)瀏覽器通過(guò)internet的http(hypertexttransportprotocol)協(xié)議,向站點(diǎn)服務(wù)器(webserver)要求提供主頁(yè)的內(nèi)容時(shí),站點(diǎn)服務(wù)器收到要求后,就傳送原已設(shè)計(jì)好的靜態(tài)的html的文件數(shù)據(jù)給瀏覽器。一個(gè)"靜態(tài)"的站點(diǎn),若要更新主頁(yè)的內(nèi)容,必須手動(dòng)的來(lái)更新其html的文件數(shù)據(jù)。而隨著web應(yīng)用的發(fā)展,用戶希望能夠看到根據(jù)要求而動(dòng)態(tài)生成的主頁(yè),例如響應(yīng)用戶查詢數(shù)據(jù)庫(kù)的要求、生成報(bào)表等。當(dāng)在瀏覽器上填好表單(form)的輸入數(shù)據(jù),以提供http要求時(shí),可以在站點(diǎn)服務(wù)器中執(zhí)行的應(yīng)用程序,而不只是一個(gè)html文件。
站點(diǎn)服務(wù)器收到要求執(zhí)行的應(yīng)用程序,分析表單(form)的輸入數(shù)據(jù),將執(zhí)行的結(jié)果以html的格式傳送給瀏覽器。根據(jù)用戶請(qǐng)求生成動(dòng)態(tài)主頁(yè)的傳統(tǒng)方法有cgi、isapi等。cgi是根據(jù)瀏覽器端的http請(qǐng)求激活響應(yīng)進(jìn)程,每一個(gè)請(qǐng)求對(duì)應(yīng)一個(gè)進(jìn)程。當(dāng)同時(shí)有很多請(qǐng)求時(shí),程序擠占系統(tǒng)資源,造成效率低下;isapi針對(duì)這一缺點(diǎn)進(jìn)行改進(jìn),利用dll(動(dòng)態(tài)鏈接庫(kù))技術(shù),以線程代替進(jìn)程,提高了性能和速度,但要考慮線程的同步問(wèn)題,而且開(kāi)發(fā)步驟煩瑣。這兩種技術(shù)和另一普遍使用的開(kāi)發(fā)動(dòng)態(tài)網(wǎng)頁(yè)的技術(shù)java都還存在著另外一個(gè)問(wèn)題,那就是開(kāi)發(fā)困難,程序的開(kāi)發(fā)和html寫(xiě)作是兩個(gè)完全不同的過(guò)程,需要專門(mén)的程序員開(kāi)發(fā)。而較簡(jiǎn)單的開(kāi)發(fā)技術(shù)如javascript和idc(internetdatabaseconnector)等功能有限,不敷使用。
asp使用的activex技術(shù)基于開(kāi)放設(shè)計(jì)環(huán)境,用戶可以自己定義和制作組件加入其中,使自己的動(dòng)態(tài)網(wǎng)頁(yè)幾乎具有無(wú)限的擴(kuò)充能力,這是傳統(tǒng)的cgi等程序所遠(yuǎn)遠(yuǎn)不及的地方。asp與常見(jiàn)的在client端實(shí)現(xiàn)動(dòng)態(tài)主頁(yè)的技術(shù)如javaapplet、activexcontrol、vbscript、javascript等不同,asp中的命令和script語(yǔ)句都是由服務(wù)器來(lái)解釋執(zhí)行的,執(zhí)行結(jié)果產(chǎn)生動(dòng)態(tài)生成的web頁(yè)面并送到瀏覽器;而client端技術(shù)的script命令則是由瀏覽器來(lái)解釋執(zhí)行。由于asp是在服務(wù)器端解釋執(zhí)行,開(kāi)發(fā)者可以不必考慮瀏覽器是否支持asp;同時(shí)由于它在服務(wù)器端執(zhí)行,開(kāi)發(fā)者也不必?fù)?dān)心別人下載程序從而竊取編程邏輯。
asp通過(guò)后綴名為.asp的asp文件來(lái)實(shí)現(xiàn),一個(gè).asp文件相當(dāng)于一個(gè)可執(zhí)行文件,因此必須放在web服務(wù)器上有可執(zhí)行權(quán)限的目錄下。當(dāng)用戶從瀏覽器輸入了.asp文件的地址后,瀏覽器就將這個(gè)url請(qǐng)求發(fā)給webserver,如果webserver上裝了asp,就調(diào)用asp。asp讀出相應(yīng).asp文件,解釋并執(zhí)行命令,動(dòng)態(tài)生成一個(gè)html頁(yè)面回傳webserver,然后webserver再把結(jié)果發(fā)送給瀏覽器。asp文件的制作和html類似,且和html開(kāi)發(fā)集成,可以在同一個(gè)過(guò)程完成,利用asp將可以執(zhí)行的腳本嵌入到html文件中(將html文件的后綴名改為.asp),這使得html文件的編寫(xiě)與腳本的開(kāi)發(fā)融合在一起。通過(guò)asp內(nèi)置的對(duì)象、服務(wù)器組件(servercomponent)可以完成非常復(fù)雜的任務(wù),而且用戶還可以自己開(kāi)發(fā)或利用別人開(kāi)發(fā)的服務(wù)器組件完成專門(mén)的任務(wù)。asp比較網(wǎng)關(guān)及服務(wù)器擴(kuò)展模式有著以下優(yōu)點(diǎn):
(1)完全與html文件融合在一起;
(2)容易創(chuàng)建,不需要其它編譯、鏈接程序;
(3)面向?qū)ο蟮牟⑼ㄟ^(guò)activexserver對(duì)象可擴(kuò)展。
二、電子商務(wù)數(shù)據(jù)訪問(wèn)方式
電子商務(wù)是指通過(guò)電子方式,并在網(wǎng)絡(luò)基礎(chǔ)上實(shí)現(xiàn)物資、人員過(guò)程的協(xié)調(diào),以便商業(yè)交換的活動(dòng)。在電子商務(wù)系統(tǒng)中,web提供了與客戶進(jìn)行通信聯(lián)絡(luò)的有效手段,利用web技術(shù),實(shí)現(xiàn)web服務(wù)器與數(shù)據(jù)庫(kù)系統(tǒng)的連接,完成對(duì)數(shù)據(jù)的處理與查詢,用戶可以通過(guò)操作簡(jiǎn)單易學(xué)的瀏覽器來(lái)查詢處理所需要的各種數(shù)據(jù)。實(shí)現(xiàn)web服務(wù)器與數(shù)據(jù)庫(kù)的連接一般有兩種方法:一種是利用中間件技術(shù)在兩者之間建立連接和通信,如cgi(通用網(wǎng)關(guān)接口)和api(應(yīng)用程序編程接口)。
web服務(wù)器通過(guò)調(diào)用cgi程序?qū)崿F(xiàn)與web瀏覽器的交互,即cgi程序接受瀏覽器發(fā)給web服務(wù)器的信息,進(jìn)行處理后,將相應(yīng)結(jié)果再送回給web服務(wù)器,通過(guò)web服務(wù)器將信息傳送給瀏覽器。但cgi程序在響應(yīng)速度和資源利用等方面有較大局限性,客戶端每請(qǐng)求一個(gè)cgi程序,服務(wù)器端便打開(kāi)一個(gè)進(jìn)程,當(dāng)請(qǐng)求的數(shù)量較大時(shí)容易引起瓶頸現(xiàn)象,開(kāi)發(fā)人員常利用api編程來(lái)擴(kuò)展服務(wù)器功能,api程序占系統(tǒng)資源少,運(yùn)行效率較高,但它的編程較cgi程序更為復(fù)雜;另一種是由瀏覽器中的java小應(yīng)用程序(javaapplet)通過(guò)瀏覽器訪問(wèn)web服務(wù)器上的數(shù)據(jù)庫(kù),利用了jdbc(javadatabaseconnectivity)技術(shù),它通過(guò)jdbc提供的api實(shí)現(xiàn)對(duì)webserver的訪問(wèn)。由于javaapplet本身的局限性,目前大多數(shù)的應(yīng)用是基于中間件技術(shù)的。
asp也是屬于中間件的一種模式,但在windows平臺(tái)上它比較網(wǎng)關(guān)及服務(wù)器擴(kuò)展模式有著較大的優(yōu)點(diǎn)。網(wǎng)關(guān)的最大特點(diǎn)是它的平臺(tái)無(wú)關(guān)性,但網(wǎng)關(guān)程序通常較難編寫(xiě)和改變。網(wǎng)關(guān)程序通常是一個(gè)獨(dú)立的程序,并不和html文件融合在一起,它需要用如c、c++、vb、perl等語(yǔ)言來(lái)編寫(xiě)?yīng)毩⒌膽?yīng)用程序,而asp應(yīng)用改變了這一點(diǎn)。使用asp不僅可以讀取access和sqlserver的數(shù)據(jù)庫(kù),而且還可以讀取其他odbc(opendatabaseconnect開(kāi)放式數(shù)據(jù)庫(kù)互聯(lián))兼容的數(shù)據(jù)庫(kù)。
在asp中訪問(wèn)數(shù)據(jù)庫(kù)是通過(guò)ado(activexdatabaseobject活動(dòng)數(shù)據(jù)對(duì)象)及事務(wù)處理語(yǔ)句來(lái)實(shí)現(xiàn)的。ado是一種操作microsoft所支持的數(shù)據(jù)庫(kù)的方法,是一項(xiàng)容易使用并且可擴(kuò)展的將數(shù)據(jù)庫(kù)訪問(wèn)添加到web頁(yè)的技術(shù)。ado對(duì)象的使用與dao(數(shù)據(jù)訪問(wèn)對(duì)象)、rdo(遠(yuǎn)程數(shù)據(jù)對(duì)象)的方式相似。在asp中,ado可以看作是一個(gè)服務(wù)器組件,更簡(jiǎn)單點(diǎn)說(shuō),是一系列的對(duì)象,應(yīng)用這些功能強(qiáng)大的對(duì)象,即可輕松完成對(duì)數(shù)據(jù)庫(kù)復(fù)雜的操作。
三、asp在電子商務(wù)中的應(yīng)用
在電子商務(wù)中,對(duì)用戶而言,進(jìn)行網(wǎng)上信息查詢的目的是尋找自己需要的產(chǎn)品或服務(wù),而對(duì)于商品或服務(wù)提供者來(lái)說(shuō),其目的則是向用戶推銷自己的產(chǎn)品或服務(wù)。因此,讓用戶通過(guò)瀏覽器查詢服務(wù)器的后端數(shù)據(jù)庫(kù)是許多web服務(wù)提供者必需有的服務(wù),asp通過(guò)內(nèi)置的adodb組件來(lái)實(shí)現(xiàn)這一功能??梢允褂胊do去編寫(xiě)緊湊簡(jiǎn)明的腳本以便連接到odbc兼容的數(shù)據(jù)庫(kù)和oledb兼容的數(shù)據(jù)源。具體的操作步驟可以歸納為以下幾步:
①創(chuàng)建數(shù)據(jù)庫(kù)源名(dsn)adodb通過(guò)odbc工作,因此要在odbc中設(shè)置dsn(數(shù)據(jù)源名)。打開(kāi)windows的"控制面板",雙擊"odbc"的圖標(biāo),然后選擇"文件dsn"的屬性頁(yè),單擊<添加>,選擇數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序,然后單擊"下一步",按照屏幕的指示鍵入數(shù)據(jù)源文件的名稱,然后單擊"下一步",再單擊"完成"創(chuàng)建數(shù)據(jù)源。
②創(chuàng)建數(shù)據(jù)庫(kù)鏈接鏈接用以保持一些關(guān)于正在訪問(wèn)的數(shù)據(jù)的動(dòng)態(tài)信息,以及鏈接者信息。利用adodb的成員函數(shù)open和先前設(shè)定的dsn與數(shù)據(jù)庫(kù)連接,其語(yǔ)法如下:setconnect=server.createobject("adodb.connection")''''創(chuàng)建了鏈接對(duì)象connect。connect.open("dsn=dsnname;uid=userid;pwd=password")''''打開(kāi)鏈接。dsnname為數(shù)據(jù)源名;userid為用戶名;password為用戶口令。
③創(chuàng)建數(shù)據(jù)對(duì)象ado中的數(shù)據(jù)對(duì)象通常保存的是查詢結(jié)果。recordset是ado中最復(fù)雜的對(duì)象,有許多屬性和方法,靈活運(yùn)用,可以達(dá)到許多好的效果。其創(chuàng)建方法如下:setrecordset=connect.execute(sqtstr)''''創(chuàng)建并打開(kāi)了對(duì)象recordset,sqtstr是一個(gè)串,代表一條標(biāo)準(zhǔn)的sql語(yǔ)句。例如:sqlstr="select*fromb1"setrecordset=connect.execute(sqlstr)這條語(yǔ)句執(zhí)行后,對(duì)象recordset中就保存了b1中的所有記錄。
④操作數(shù)據(jù)庫(kù)可利用execute方便地執(zhí)行數(shù)據(jù)的插入、修改、刪除等操作。如執(zhí)行插入操作:sqlstr="insertintob1values(1,2)"connect.execute(sqlstr)
⑤關(guān)閉數(shù)據(jù)對(duì)象和鏈接在使用了ado對(duì)象之后,一定要關(guān)閉數(shù)據(jù)對(duì)象和鏈接。在asp中通過(guò)調(diào)用方法close實(shí)現(xiàn)關(guān)閉。關(guān)閉創(chuàng)建的數(shù)據(jù)對(duì)象:recordset.closesetrecordset=nothing關(guān)閉創(chuàng)建的鏈接對(duì)象:connect.closesetconnect=nothing完整的程序片段:
//產(chǎn)生組件實(shí)例
<%setconnect=server.createobject("adodb.connection")
//連接數(shù)據(jù)庫(kù)
connect.open("dsn=dsnname;uid=userid;pwd=password")
//執(zhí)行查詢
sql=select*fromtablenamesetrs=connect.execute(sql)%>
//顯示結(jié)果
<%dowhilenotrs.eof%>
<%=rs(fieldname)%><%rs.movenextloop%>
上述是用asp訪問(wèn)數(shù)據(jù)庫(kù)的全過(guò)程,由于應(yīng)用面向?qū)ο笏枷?,所有操作都比較簡(jiǎn)單,用戶需要注意的僅是對(duì)數(shù)據(jù)結(jié)構(gòu)的了解、當(dāng)前所操作的對(duì)象及對(duì)象的屬性等等,只要對(duì)這些有了清晰的認(rèn)識(shí),再加上asp強(qiáng)大功能,在網(wǎng)絡(luò)上使用數(shù)據(jù)庫(kù),實(shí)現(xiàn)用戶與頁(yè)面間交換信息,就再也不是什么難事了。
[nextpage]
四、主要功能程序段
4、1打開(kāi)數(shù)據(jù)庫(kù)
optionexplicit
dimconn,connstr,db,rs
db="database/#myshop.mdb"http://數(shù)據(jù)庫(kù)路徑
setconn=server.createobject("adodb.connection")
connstr="provider=microsoft.jet.oledb.4.0;datasource="&server.mappath(""&db&"")
conn.openconnstr
4.2數(shù)據(jù)庫(kù)查詢操作
//大類查訊
setrs=server.createobject("adodb.recordset")
//只讀方式打開(kāi)
rs.open"selectanclass,anclassidfromanclass",conn,1,1
dowhilenotrs.eof
response.write"<ahref=javascript:turnx(''''r"&rs("anclassid")&"'''')>"
&trim(rs("anclass"))&"</a>"
rs.movenext
loop
rs.close
//小類查詢
dimrs2
setrs2=server.createobject("adodb.recordset")
rs2.open"selectnclass,nclassidfromnclasswhereanclassid="&rs("anclassid")&"orderbynclassidorder",conn,1,1
dowhilenotrs2.eof
response.write"<ahref=class.asp?aid="
&rs("anclassid")&"&nid="&rs2("nclassid")&">"
&trim(rs2("nclass"))&"</a>"
rs2.movenext
loop
4.3添加記錄操作
setrs=server.createobject("adodb.recordset")
//可寫(xiě)方式
rs.open"selectbookid,username,zhuangtai,zongerfromactions",conn,1,3
rs.addnew//添加一條新記錄
rs("bookid")=bookid//添加相應(yīng)的記錄
rs("username")=username
…………
rs("zhuangtai")=6
rs("zonger")=0
rs.update//更新數(shù)據(jù)庫(kù)
4.4刪除記錄操作
//從表actions中刪除actionid匹配的記錄;conn.execute"deletefromactionswhereactionid="
&request.querystring("actionid")
4.5記錄的修改和查看
setrs=server.createobject("adodb.recordset")
rs.open"select*frombookswherebookid="&bookid,conn,1,3
rs("anclassid")=int(request("anclassid"))//修改各項(xiàng)記錄
………………
rs.update
rs.close
五、結(jié)束語(yǔ)
隨著web技術(shù)的發(fā)展,基于intranet的電子商務(wù)系統(tǒng)無(wú)疑較傳統(tǒng)商務(wù)有著更大的應(yīng)用前景,如何提務(wù)系高這種電子商統(tǒng)中的數(shù)據(jù)訪問(wèn)效率及事務(wù)處理能力仍是當(dāng)前人們所關(guān)注的問(wèn)題。