譚華山,楊 有,余 平
(重慶師范大學(xué)計算機與信息科學(xué)學(xué)院,重慶401331)
據(jù)統(tǒng)計,目前國內(nèi)70% ~80%以上網(wǎng)站都是采用Web動態(tài)網(wǎng)頁結(jié)合后臺數(shù)據(jù)庫架設(shè)而成[1,2]。網(wǎng)站的用戶,在瀏覽器中輸入一個動態(tài)網(wǎng)頁網(wǎng)址(前臺網(wǎng)頁)后,服務(wù)器執(zhí)行動態(tài)網(wǎng)頁中的程序代碼,根據(jù)請求動態(tài)獲取后臺數(shù)據(jù)庫中所需要的數(shù)據(jù),最后生成標準格式的網(wǎng)頁,返回給瀏覽器。網(wǎng)站的管理員,使用后臺管理系統(tǒng)(后臺數(shù)據(jù)庫操作),維護后臺數(shù)據(jù)庫,為前臺動態(tài)網(wǎng)頁提供數(shù)據(jù)。處理過程如圖1所示。常用的程序語言有 ASP、JSP、PHP 等;數(shù)據(jù)庫有 ACCESS、SQL Server、MySQL 等。
圖1 動態(tài)網(wǎng)站結(jié)構(gòu)圖
對于前臺網(wǎng)頁界面,一般先由美工設(shè)計網(wǎng)頁版面,然后由網(wǎng)站程序員編寫代碼讀取數(shù)據(jù)庫中的內(nèi)容放入網(wǎng)頁版面中。網(wǎng)頁版面設(shè)計不同,相應(yīng)的程序設(shè)計也不同,因而就前臺網(wǎng)頁來說,無通用性可言,只有針對不同網(wǎng)頁單獨設(shè)計。
對于后臺數(shù)據(jù)庫操作,由于后臺數(shù)據(jù)庫主要由大量數(shù)據(jù)表、視圖和查詢等組成,所以其主要的操作為數(shù)據(jù)表的操作,而視圖和查詢的后臺操作與數(shù)據(jù)表類似。對于數(shù)據(jù)表而言,其常用操作包括數(shù)據(jù)表結(jié)構(gòu)操作和數(shù)據(jù)表記錄操作等。數(shù)據(jù)表結(jié)構(gòu)操作包括建立數(shù)據(jù)表、修改字段(名稱、類型、寬度)、增加字段和刪除字段。數(shù)據(jù)表記錄操作包括瀏覽記錄、增加記錄、修改記錄和刪除記錄。由于所有網(wǎng)站的后臺數(shù)據(jù)庫操作基本相同,因而具有通用性,且后臺數(shù)據(jù)庫操作對操作界面的版面格式要求不高,可以使用通用網(wǎng)頁界面模板。
在圖1所示的動態(tài)網(wǎng)站結(jié)構(gòu)中,后臺數(shù)據(jù)庫往往具有大量數(shù)據(jù)表。網(wǎng)站的傳統(tǒng)設(shè)計中,針對不同的數(shù)據(jù)表設(shè)計不同的操作界面,工作量大,而且都是重復(fù)類似工作。另外,當(dāng)數(shù)據(jù)表發(fā)生變化時(如字段增加、刪除等),需要重新修改相應(yīng)的操作界面,維護極為不方便。針對動態(tài)網(wǎng)站結(jié)構(gòu)的這一特點,多位學(xué)者提出了不同的解決方案。Takada H.[3]等人設(shè)計和實現(xiàn)了一個通用用戶界面,用于 AWSC(Automatic Web Service Composition),其中使用了HTN本體原理。孫雷[4]采用MVC(Model-View-Controller)模式,基于Struts框架包進行開發(fā),實現(xiàn)了一個動態(tài)通用編輯界面,主要用于收集用戶信息,生成報表。方建良等人使用PB實現(xiàn)了一種通用數(shù)據(jù)編輯界面,具有保證應(yīng)用程序邏輯獨立性和在應(yīng)用程序中實現(xiàn)參照完整性約束檢驗的特點[5]。這些編輯器面向的用戶不一樣,開發(fā)的目的和技術(shù)也不相同,具有特定的應(yīng)用場合。Gang Tu[6]等人還提出了數(shù)據(jù)表設(shè)計的一些建議,用以改善數(shù)據(jù)表的查詢性能。唐燦[7]對HTML5、Flash和Silverlight等新興WEB界面技術(shù)進行了總結(jié)和分析,指出Web應(yīng)用程序開發(fā)應(yīng)該面對這些變革。針對動態(tài)網(wǎng)站結(jié)構(gòu)的這一特點,在此提出了一個BS模式下基于ADO(ActiveX Data Objects)對象的通用數(shù)據(jù)表編輯器方案,該編輯器使用可視化操作方式,具有數(shù)據(jù)表建立操作、數(shù)據(jù)表結(jié)構(gòu)操作和數(shù)據(jù)表記錄操作三大功能。該方案通過傳輸數(shù)據(jù)表名和相關(guān)參數(shù)到通用編輯器,自動建立風(fēng)格統(tǒng)一的、可視化的操作界面,在不需要額外編寫程序代碼的情況下,實現(xiàn)后臺數(shù)據(jù)庫的維護工作。相對于傳統(tǒng)的網(wǎng)站后臺管理系統(tǒng)開發(fā),該方案自動化程序高,簡化了大量重復(fù)工作,操作簡單,極大的提高了網(wǎng)站后臺管理系統(tǒng)的開發(fā)效率。
通用數(shù)據(jù)表編輯器的結(jié)構(gòu)如圖2所示,它包括3個部分:BS模式下基于ADO對象的通用數(shù)據(jù)表創(chuàng)建編輯器(簡稱創(chuàng)建編輯器)、BS模式下基于ADO對象的通用數(shù)據(jù)表結(jié)構(gòu)編輯器(簡稱結(jié)構(gòu)編輯器)和BS模式下基于ADO對象的通用數(shù)據(jù)表記錄編輯器(簡稱記錄編輯器)。
圖2 通用數(shù)據(jù)表編輯器的總體結(jié)構(gòu)
雖然不同的網(wǎng)站可能使用不同的數(shù)據(jù)庫,但現(xiàn)在常用數(shù)據(jù)庫均支持SQL語言,所以在此提出的通用數(shù)據(jù)表編輯器使用SQL語言完成各種數(shù)據(jù)庫操作。需要注意的是不同的數(shù)據(jù)庫,對于SQL的實現(xiàn)方法略有不同,這造成相同功能的SQL語句,其語法略有不同,在編寫通用數(shù)據(jù)表編輯器程序時需要加以區(qū)分。
創(chuàng)建編輯器主要用于在建立網(wǎng)站之初,建立各種基礎(chǔ)數(shù)據(jù)表。
傳統(tǒng)建立數(shù)據(jù)表的方法有兩種方法。一是在程序中根據(jù)需要,手工編寫建立數(shù)據(jù)表的SQL語句,然后執(zhí)行程序建立數(shù)據(jù)表。此方法的缺點在于,編寫SQL語句比較繁瑣,存在大量機械重復(fù)工作,效率不高,容易出錯。二是使用數(shù)據(jù)庫本身提供的界面建立數(shù)據(jù)表。此方法要求用戶必須掌握數(shù)據(jù)庫的操作方法,且必須擁有直接操作數(shù)據(jù)庫的權(quán)限。對于某些數(shù)據(jù)庫,出于安全考慮,不允許普通用戶直接操作數(shù)據(jù)庫。另外,不同種類的數(shù)據(jù)庫的操作方法各不相同,操作方法也比較繁瑣。
此處提出的創(chuàng)建編輯器,使用網(wǎng)頁形式,在瀏覽器中以可視化操作界面進行操作,操作方法簡單,易學(xué)易用,界面友好,不易出錯。在字段定義界面中,用戶根據(jù)需要可以反復(fù)增加、刪除字段,也可以修改已經(jīng)存在的字段。用戶可以定義字段的名稱、類型及寬度。另外,字段的默認值、完整性約束等也可在此界面中定義。當(dāng)字段定義完成后,創(chuàng)建編輯器根據(jù)字段定義的內(nèi)容,自動生成建立數(shù)據(jù)表的SQL語句:Create Table…。然后創(chuàng)建編輯器使用ADO對象,將Create Table語句傳遞給數(shù)據(jù)庫,生成數(shù)據(jù)表。
結(jié)構(gòu)編輯器主要用于編輯數(shù)據(jù)庫中已經(jīng)建立好的數(shù)據(jù)表的結(jié)構(gòu)。傳統(tǒng)編輯數(shù)據(jù)表結(jié)構(gòu)的方法也有兩種:一是根據(jù)不同的編輯目的,手工編寫對應(yīng)的SQL語句,然后執(zhí)行程序完成數(shù)據(jù)表編輯操作;二是使用數(shù)據(jù)庫本身提供的界面編輯數(shù)據(jù)表。這兩種方法的缺點與創(chuàng)建編輯器中所述內(nèi)容相似。
圖3 結(jié)構(gòu)編輯器流程圖
此處提出的結(jié)構(gòu)編輯器,同樣使用網(wǎng)頁形式,在瀏覽器中以可視化操作界面進行操作,其過程如圖3所示。結(jié)構(gòu)編輯器首先使用ADO對象獲取數(shù)據(jù)表的結(jié)構(gòu)信息,然后判明操作種類,再根據(jù)操作種類生成Alter Table語句,最后使用ADO對象提交語句,完成對數(shù)據(jù)表結(jié)構(gòu)的修改。
記錄編輯器主要用于編輯數(shù)據(jù)表中的記錄,包括記錄的瀏覽(顯示)、增加、修改、刪除等。由于不同數(shù)據(jù)表的內(nèi)容不同,傳統(tǒng)的處理方式是對于不同的數(shù)據(jù)表設(shè)計不同的操作界面。對于一些具有特殊要求的數(shù)據(jù)表,這種傳統(tǒng)做法是合適的。但對于大多數(shù)數(shù)據(jù)表而言,其處理方式大致相同,即主要完成數(shù)據(jù)表的瀏覽、增加、修改、刪除等基本操作。
此處提出的記錄編輯器使用通用數(shù)據(jù)表處理界面,其通用界面包括數(shù)據(jù)表瀏覽界面、記錄增加界面、記錄修改界面、記錄刪除界面。各界面均是首先通用ADO對象獲取數(shù)據(jù)表的結(jié)構(gòu)信息,根據(jù)權(quán)限參數(shù)表自動生成操作界面,然后根據(jù)用戶操作要求,生成不同功能的SQL語句,通過ADO對象提交給數(shù)據(jù)庫,完成各自不同的操作,其過程如圖4所示。
圖4 記錄編輯器流程圖
由于網(wǎng)站后臺用戶可能有多個,不同用戶具有的權(quán)限一般不同,所以不同用戶對同一數(shù)據(jù)表的不同記錄可能具有不同的權(quán)限。并且,對于同一條記錄中的不同字段,不同用戶也可能具有不同的權(quán)限。在通用數(shù)據(jù)表編輯器中,可以通過設(shè)置權(quán)限參數(shù)表來完成權(quán)限處理。在此的做法是在調(diào)用通用數(shù)據(jù)表編輯器之前,根據(jù)網(wǎng)站的用戶權(quán)限信息,生成權(quán)限參數(shù)表,然后將權(quán)限參數(shù)表作為參數(shù)3傳遞給通用數(shù)據(jù)表編輯器。
當(dāng)增加記錄時,根據(jù)字段的類型不同,自動生成不同輸入方式。如字符型字段使用文本框,邏輯型字段使用單選按鈕組,備注型字段使用文本區(qū)域等。字段的類型通過ADO對象獲得。在執(zhí)行此項功能時,還可以通過權(quán)限參數(shù)表,指定不同字段的特殊要求。比如“日期”字段,用來指示該記錄是什么時間錄入的,用戶在編輯記錄時自動取當(dāng)前計算機的時間,不需要用戶輸入,則在權(quán)限參數(shù)表中指定“日期”字段的操作權(quán)限為readonly。
增加記錄權(quán)限參數(shù)表是一個三元二維數(shù)組:addParameter(n,1)指定字段名、addParameter(n,2)指定字段處理方式、addParameter(n,3)指定可選的默認設(shè)置值。addParameter(n,2)的取值及其含義如表1所示。對于數(shù)據(jù)表中的字段,在addParameter數(shù)組中不需要全部說明。如字段沒在addParameter數(shù)組中說明,則其輸入框為可修改的空白框,相當(dāng)于notuse。
表1 增加記錄權(quán)限參數(shù)表的取值及其含義
當(dāng)修改記錄時,首先使用ADO對象取出字段類型及記錄內(nèi)容,然后根據(jù)不同的字段類型,自動生成不同的輸入框,并將原有記錄內(nèi)容填入輸入框中。在修改記錄時,也可以通過權(quán)限參數(shù)表,指定不同字段的特殊要求。例如主鍵“ID”字段,在修改記錄時只能查看,不允許修改。
修改記錄權(quán)限參數(shù)表也是一個三元二維數(shù)組:alterParameter(n,1)指定字段名、alterParameter(n,2)指定字段處理方式、alterParameter(n,3)指定可選的默認設(shè)置值。alterParameter(n,2)的取值及其含義如表2所示。對于數(shù)據(jù)表中的字段,在alterParameter數(shù)組中也不需要全部說明。如字段沒在alterParameter數(shù)組中說明,則顯示該字段原有數(shù)據(jù),當(dāng)前用戶可以隨意修改,相當(dāng)于notuse。
表2 修改記錄權(quán)限參數(shù)表取值
當(dāng)瀏覽數(shù)據(jù)表時,使用二維表格的形式顯示數(shù)據(jù)表中的記錄,每條記錄顯示一行,每頁顯示多條記錄,整個數(shù)據(jù)表分頁顯示。在執(zhí)行此項功能時,可以通過權(quán)限參數(shù)表指定某些字段是否需要顯示。瀏覽權(quán)限參數(shù)表是一個二元二維數(shù)組:showParameter(n,1)指定字段名、showParameter(n,2)指定該字段是否顯示(取值為“NO”表示不顯示該字段,否則顯示該字段)。對于沒有在權(quán)限參數(shù)表中指定的字段,均顯示。當(dāng)刪除記錄時,首先顯示刪除確認對話框,用戶確認后,再刪除數(shù)據(jù)表中的記錄。
在網(wǎng)站后臺數(shù)據(jù)庫的處理上,通用數(shù)據(jù)表編輯器實現(xiàn)了功能集成化、界面統(tǒng)一化、操作可視化,簡單易用,即使用戶沒有高深的數(shù)據(jù)庫知識和程序設(shè)計知識也可以通過編輯器對后臺數(shù)據(jù)庫進行處理。降低了網(wǎng)站開發(fā)難度,提高了網(wǎng)站開發(fā)速度,且使得網(wǎng)站后期維護更加簡單、快捷。文中提出的編輯器突出通用性,其使用過程類似于函數(shù)調(diào)用,只需傳入幾個參數(shù),就可以通過Web方式處理后臺數(shù)據(jù)庫中的大量數(shù)據(jù)表。該通用數(shù)據(jù)表編輯器在重慶師范大學(xué)計算機學(xué)院網(wǎng)站、重慶交旅游輪有限公司網(wǎng)站等十多個網(wǎng)站投入實際使用,效果良好,達到預(yù)期設(shè)計要求。
當(dāng)然,對于有特殊處理要求的數(shù)據(jù)表,通用數(shù)據(jù)表編輯器可能不能完成其功能要求。解決方法有兩種。一是采用傳統(tǒng)方法,針對特殊處理要求單獨設(shè)計處理界面;二是擴充通用數(shù)據(jù)表編輯器的功能,針對常見的特殊要求編寫更多的特殊處理模塊,在調(diào)用通用數(shù)據(jù)表編輯器時通過參數(shù)指定使用不同的特殊處理模塊。另外,通用數(shù)據(jù)表編輯器在啟動時,需要首先使用ADO對象與數(shù)據(jù)庫建立連接。與數(shù)據(jù)庫建立連接時,要明確知道數(shù)據(jù)庫地址、數(shù)據(jù)庫登錄名和數(shù)據(jù)庫登錄密碼。
[1]游向鋒.SQL注入式攻擊的分析與防范[J].電腦編程技巧與維護,2009(1):83-85
[2]王云,郭外萍,陳承歡.Web項目中的SQL注入問題研究與防范方法[J].計算機工程與設(shè)計.2010,31(5):976-978,1016
[3]TAKADA H,INCHEON P.Design of General User Interface for Automatic Web Service Composition[C].Proceedings of 2008 Japan-China Joint Workshop on Frontier Computer Science and Technology.27-28 Dec.,2008.Nagasahi,Japan.75-78
[4]孫雷.動態(tài)通用編輯界面在B/S模式中設(shè)計[J].電腦知識與技術(shù),2005(9):9-11
[5]方建良.基于PB的通用數(shù)據(jù)編輯界面的研究與實現(xiàn)[J].計算機與現(xiàn)代化,2006(6):61-63,78
[6]GANG T,WEI F,LIU H Q.Inquiry of Design on Data Table[C].Proceedings of the Second International Symposium on Knowledge Acquisition and Modeling,2009(KAM2009).Nov.30-Dec.1,2009.Wuhan,China.3:33-36
[7]唐燦.下一代WEB界面前端技術(shù)綜述[J].重慶工商大學(xué)學(xué)報:自然科學(xué)版,2009,26(4):350-354