黃金華
(龍巖技師學(xué)院,福建 龍巖 364000)
隨著社會經(jīng)濟(jì)的快速發(fā)展,企業(yè)、機(jī)關(guān)、社會各單位之間數(shù)據(jù)交換的日漸頻繁,對交換的數(shù)據(jù)量、交換的速度、交換的安全性等性能的要求也越來越高。目前,只有動態(tài)的數(shù)據(jù)交互才可以滿足信息不斷變化的時代,隨著應(yīng)用技術(shù)的需求變化,靜態(tài)數(shù)據(jù)交互技術(shù)漸漸的退出了信息技術(shù)的舞臺。筆者根據(jù)多年的教學(xué)體會,簡要分析幾種比較流行的Web動態(tài)數(shù)據(jù)庫交互的技術(shù),以及它們的使用方法;共同行們參考。
網(wǎng)絡(luò)技術(shù)的發(fā)展,也使計算機(jī)Web系統(tǒng)由以前的靜態(tài)跨度到動態(tài)。程序是否需要在服務(wù)器端運(yùn)行,這是判斷一個系統(tǒng)是動態(tài)系統(tǒng)還是靜態(tài)系統(tǒng)的重要標(biāo)志。我們經(jīng)??吹降膆tml頁面就是個靜態(tài)頁面文件。它的特點是頁面的內(nèi)容不會改變,GIF格式的動畫、FLASH、滾動文字等,這些只是視覺上的“動態(tài)效果”,與我們這里要涉及的動態(tài)Web是不同的概念。
動態(tài)Web是指在遠(yuǎn)程服務(wù)器上運(yùn)行的程序、它們會隨客戶的不同需求、不同時間返回不同的內(nèi)容。如果遠(yuǎn)程服務(wù)程序需要的業(yè)務(wù)數(shù)據(jù)是專門的數(shù)據(jù)庫來管理,并提供訪問、維護(hù)的,這種情形就是動態(tài)Web數(shù)據(jù)庫。目前比較流行的動態(tài)Web技術(shù)有ASP、ASPX(ASP的擴(kuò)展)、PHP、JSP。它們都提供專門的對象或者函數(shù)與數(shù)據(jù)庫之間交互。
ASP(Active Server Page),即為動態(tài)服務(wù)器頁面。CGI(Common Gateway Interface)是用于定義Web服務(wù)器與外部程序之間通信的標(biāo)準(zhǔn),它能夠生成動態(tài)網(wǎng)頁內(nèi)容,效率比較高,性能比較好,但是開發(fā)的難度很大。為了能夠降低開發(fā)的難度,微軟公司開發(fā)了ASP技術(shù),用它代替先前的CGI腳本程序,通過ASP這個中間媒介,其它程序可以很好的與數(shù)據(jù)庫和進(jìn)行通信,而且它性能高,開發(fā)難度低,是一種簡單、方便的編程工具。ASP網(wǎng)頁是以.asp作為文件后綴名的,由于這種技術(shù)簡單,方便,所以現(xiàn)在常被用于各種動態(tài)網(wǎng)站中。 當(dāng)客戶端瀏覽器向Web服務(wù)器端發(fā)送一個.asp頁面請求的時候,IIS會根據(jù)請求的頁面是.asp了,還是其它文件,如果是.asp,IIS會調(diào)用相應(yīng)的組件去解析這個請求的.asp文件,把它通過轉(zhuǎn)換,把它生成瀏覽器識別的HTML標(biāo)記?;谏鲜鲞^程,我們在商業(yè)網(wǎng)站中,我們可以在.asp中包含COM組件來處理商業(yè)業(yè)務(wù),而這樣做即安全,也不會降低性能。除了嵌入COM組件外,還可以包含HTML標(biāo)記、普通文本、腳本命令,通過對這些技術(shù)的組合使用,我們可以生成動態(tài)的HTML網(wǎng)頁,根據(jù)業(yè)務(wù)的變化生成不同的用戶界面。ASP網(wǎng)頁與HTML相比,它擁有以下特點:
(1)首先ASP技術(shù)可以突破靜態(tài)網(wǎng)頁功能限制,比如說動態(tài)界面,動態(tài)數(shù)據(jù)填充,實現(xiàn)動態(tài)網(wǎng)頁技術(shù);
(2)在開發(fā)與應(yīng)用過程中,ASP文件被包含在HTML代碼所組成的文件中的,修改和測試都比較方便;
(3)服務(wù)器上IIS可以通過.asp后綴名來調(diào)用相應(yīng)的組件去解析ASP文件,并將結(jié)果以HTML格式傳送到客戶端瀏覽器上,因此各種瀏覽器都可以正常瀏覽ASP所產(chǎn)生的網(wǎng)頁;
(4)ASP技術(shù)提供了一些內(nèi)置對象,使用這些對象可以訪問服務(wù)器的信息,比如服務(wù)器的IP地址,也可以從web瀏覽器中得到用戶通過HTML表單提交的信息;
(5)ASP技術(shù)可以使用服務(wù)器端的各種COM組件來完成商務(wù)邏輯任務(wù);
(6)ASP技術(shù)的安全性高,因為它是二次解析過的程序,源代碼不會被泄露。
ASP主要用途是使客戶端與服務(wù)器端進(jìn)行動態(tài)的交互,而目前的商業(yè)數(shù)據(jù)大多都存儲在數(shù)據(jù)庫中。根據(jù)實際情況,ASP Web常用的數(shù)據(jù)庫有ACCESS和SQLServer,如果數(shù)據(jù)量相當(dāng)大的使用Oracle,通常情況下都使用SQL Server作為服務(wù)器端的數(shù)據(jù)庫。
為了能夠使客戶端與服務(wù)器端進(jìn)行數(shù)據(jù)交互。ASP技術(shù)中提供了DatabaseAccess組件ADO。通過訪問ADO組件的七個對象和四個集合來訪問數(shù)據(jù)庫。它們分別是:
(1)Connection對象是用于建立與后臺數(shù)據(jù)庫的連接,實際開發(fā)中需要創(chuàng)建連接池對象。
(2)Command對象是用于執(zhí)行訪問數(shù)據(jù)庫的SQL指令。
(3)Parameters對象和Parameters集合是為Command對象提供數(shù)據(jù)和參數(shù)。
(4)RecordSet對象是為存放訪問數(shù)據(jù)庫后的數(shù)據(jù)信息。
(5)Field對象和Field集合提供對RecordSet中當(dāng)前記錄的各個字段進(jìn)行訪問。
(6)Property對象和Properties集合提供有關(guān)信息,供 Connection、Command、RecordSet、Field 對象使用。
(7)Error對象和Errors集合提供訪問數(shù)據(jù)庫時的錯誤信息,這個對象可以為客戶提供友好交互體驗。
為了能夠使用COM組件中的對象,ASP提供了幾個內(nèi)置對象,Application對象,Session對象,Request對象,Response對象還有Sever對象等。通過對這幾個內(nèi)置對象的使用來完成數(shù)據(jù)的交互功能。由于這些對象提供的功能比較豐富,下面只列舉一種通過Server對象訪問數(shù)據(jù)庫的方法。
(1)創(chuàng)建連接對象
connObject=Server.CreateObject(“ADODB.Connection”);
connObject.Open(“DataSource”);//DataSource 為數(shù)據(jù)源
(2)創(chuàng)建 Command 對象
strSql= “DELETE file_Name FROM TABLE_NAME;”;
commObject=Server.CreateCommand(“ADODB.Command”);
commObject.CommandText=strSql;
commObject.ActiveConnection=connObject;
(3)執(zhí)行命令
commObject.Excute();
(4)關(guān)閉連接
connObject.Close();
JSP(Java Server Pages)是由Sun Microsystems公司倡導(dǎo)、許多公司參與一起建立的一種動態(tài)網(wǎng)頁技術(shù)標(biāo)準(zhǔn)。JSP使用Java編程語言編寫類XML的tags和scriptlets,來封裝產(chǎn)生動態(tài)網(wǎng)頁的處理邏輯。在客戶在瀏覽器端訪問JSP頁面時,瀏覽器會把該請求發(fā)送到Web服務(wù)器端。Web服務(wù)器在遇到訪問JSP網(wǎng)頁的請求時,首先執(zhí)行其中的程序段,然后將執(zhí)行結(jié)果連同JSP文件中的HTML代碼一起返回給客戶。
JSP中的Java程序段可以操作數(shù)據(jù)庫、重新定向網(wǎng)頁等,以實現(xiàn)建立動態(tài)網(wǎng)頁所需要的功能。像ASP一樣,JSP也提供了些內(nèi)置對象,Java程序通過這些內(nèi)置對象與其它的應(yīng)用程序交互信息 (比如瀏覽器、數(shù)據(jù)庫)。request對象,該對象封裝了用戶提交的信息,通過調(diào)用該對象相應(yīng)的方法可以獲取封裝的信息,即使用該對象可以獲取用戶提交信息。
response對象,對客戶的請求做出動態(tài)的響應(yīng),向客戶端發(fā)送數(shù)據(jù)。
session對象,標(biāo)示一個唯一的客戶端與服務(wù)器端的會話。
除了利用這些對象來管理頁面,得到用戶登陸數(shù)據(jù)外,還需要與數(shù)據(jù)庫交互,JSP與數(shù)據(jù)庫交互是利用Java語言提供的類來與數(shù)據(jù)庫交互的,比如數(shù)據(jù)庫的鏈接是使用Java中的JDBC技術(shù)。
PHP(Hypertext Preprocessor)超級文本預(yù)處理語言的縮寫。PHP是一種HTML內(nèi)嵌式的語言。它與ASP技術(shù)有幾分相似,都是為了使客戶端與服務(wù)器端動態(tài)交互而被開發(fā)出來的一種技術(shù)語言。PHP語言的風(fēng)格有類似于C語言,跨平臺,既可以用于Window平臺,也可以用于Linux平臺,被很多的網(wǎng)站編程人員所推崇。
PHP是目前最熱門的Web開發(fā)語言,它簡單高效、開源免費(fèi)、跨平臺等特性受到廣大Web開發(fā)人員的歡迎。與PHP經(jīng)常搭配的數(shù)據(jù)庫管理器是MySQL。它像WINDOWS API一樣提供了很多接口,可以動態(tài)的訪問數(shù)據(jù)庫。比較常用的幾個函數(shù)是:mysql_connect():用于連接數(shù)據(jù)庫;mysql_query():用于執(zhí)行SQL命令;mysql_select_db()用于查詢數(shù)據(jù)庫;還有mysql_close():用于關(guān)閉連接。PHP使用起來簡單,通過這幾個函數(shù)的使用,就能夠很好的于數(shù)據(jù)庫進(jìn)行交互,實現(xiàn)動態(tài)功能。
2.4.1 動態(tài)Web的體系結(jié)構(gòu)設(shè)計
在軟件開發(fā)過程中,在前期除了做好需求分析外,還需要考慮的是整個軟件系統(tǒng)的架構(gòu)。目前比較流行的架構(gòu)有過濾器風(fēng)格體系結(jié)構(gòu)、黑板倉庫風(fēng)格體系結(jié)構(gòu)、事件風(fēng)格體系結(jié)構(gòu)、多層風(fēng)格的體系結(jié)構(gòu)、瘦客戶端風(fēng)格。動態(tài)Web數(shù)據(jù)庫采用瘦客戶端與多層體系結(jié)構(gòu)風(fēng)格相結(jié)合的方式。這種結(jié)構(gòu)實際應(yīng)用比較多、安全、穩(wěn)定、易擴(kuò)展。
圖1 三層B/S模式Web數(shù)據(jù)庫系統(tǒng)結(jié)構(gòu)
三層B/S模式是從傳統(tǒng)胖客戶端C/S模式發(fā)展起來的新的Web模式。由于采用多層體系結(jié)構(gòu),B/S結(jié)構(gòu)包括客戶層、中間層和數(shù)據(jù)服務(wù)層。三層B/S模式Web數(shù)據(jù)庫系統(tǒng)結(jié)構(gòu)如圖1所示。在實際應(yīng)用中,這種系統(tǒng)結(jié)構(gòu)使得網(wǎng)路傳輸?shù)呢?fù)擔(dān)減輕、使得數(shù)據(jù)的安全性增加、增強(qiáng)了系統(tǒng)業(yè)務(wù)的擴(kuò)展性同時精簡了系統(tǒng)的維護(hù)。
2.4.2 動態(tài)Web數(shù)據(jù)庫應(yīng)用
在實際的應(yīng)用中,Web數(shù)據(jù)庫只是一個大型的系統(tǒng)架構(gòu)中的一個模塊,這個模塊與其它業(yè)務(wù)模塊關(guān)聯(lián),它有效的存儲數(shù)據(jù)(一般情況下是對某一個系統(tǒng)的業(yè)務(wù)模型數(shù)據(jù))。它們之間的關(guān)系如圖2所示:
圖2 Web數(shù)據(jù)庫應(yīng)用架構(gòu)
這是整個Web數(shù)據(jù)庫應(yīng)用的核心基礎(chǔ)架構(gòu)。由于業(yè)務(wù)不同,涉及到的數(shù)據(jù)也不同,對于比較敏感的數(shù)據(jù)在實際應(yīng)用中一般都用安全性比較高的獨立服務(wù)器,在該服務(wù)器上運(yùn)行的數(shù)據(jù)庫的設(shè)置都比較復(fù)雜。在該結(jié)構(gòu)中,連接池是為了提升性能(如并發(fā)訪問)而設(shè)計的,如果采用ASP技術(shù),在該連接池中存儲的是多個連接對象,也就是Connection對象。業(yè)務(wù)協(xié)議是從業(yè)務(wù)處理群中發(fā)過來的,在一般的系統(tǒng)中,它可能是一個SQL句,但是在大型系統(tǒng)中,為了提升性能,一般把SQL句寫成存儲過程,而存儲在數(shù)據(jù)庫中,而業(yè)務(wù)協(xié)議只是存儲過程的標(biāo)號,并通過業(yè)務(wù)分發(fā)機(jī)制去連接相應(yīng)的數(shù)據(jù)庫,并且把數(shù)據(jù)返回給業(yè)務(wù)處理群。業(yè)務(wù)處理群得到數(shù)據(jù)后,可以利用系統(tǒng)對象(如果是ASP則為Session、Application對象或其它)作額外的系統(tǒng)業(yè)務(wù)處理。最終把處理后的結(jié)果通過信息服務(wù)器返回給客戶端瀏覽器。
動態(tài)Web數(shù)據(jù)庫技術(shù)是目前企業(yè)或者是政府機(jī)關(guān)搭建信息平臺時經(jīng)常用到得技術(shù)。在這些技術(shù)中,主流的是JSP與ASP。由于Java語言的跨平臺性強(qiáng)導(dǎo)致了JSP可以跨平臺實現(xiàn),在這方面ASP技術(shù)就顯得有些局限性。但是無論選用什么樣的技術(shù),動態(tài)Web數(shù)據(jù)庫的在實際開發(fā)應(yīng)用中的體系架構(gòu)是不會改變的,業(yè)務(wù)邏輯是不會改變的。用軟件行業(yè)的一句話來說就是“語言只是對程序設(shè)計的描述,一種設(shè)計可以用多種語言來實現(xiàn)”。只有不斷的將應(yīng)用技術(shù)改造、創(chuàng)新、升級,才能滿足和適應(yīng)社會經(jīng)濟(jì)發(fā)展的需要創(chuàng)造出更多更大的價值。