譚華山,楊 有,余 平
(重慶師范大學計算機與信息科學學院,重慶401331)
據統計,目前國內70% ~80%以上網站都是采用Web動態網頁結合后臺數據庫架設而成[1,2]。網站的用戶,在瀏覽器中輸入一個動態網頁網址(前臺網頁)后,服務器執行動態網頁中的程序代碼,根據請求動態獲取后臺數據庫中所需要的數據,最后生成標準格式的網頁,返回給瀏覽器。網站的管理員,使用后臺管理系統(后臺數據庫操作),維護后臺數據庫,為前臺動態網頁提供數據。處理過程如圖1所示。常用的程序語言有 ASP、JSP、PHP 等;數據庫有 ACCESS、SQL Server、MySQL 等。

圖1 動態網站結構圖
對于前臺網頁界面,一般先由美工設計網頁版面,然后由網站程序員編寫代碼讀取數據庫中的內容放入網頁版面中。網頁版面設計不同,相應的程序設計也不同,因而就前臺網頁來說,無通用性可言,只有針對不同網頁單獨設計。
對于后臺數據庫操作,由于后臺數據庫主要由大量數據表、視圖和查詢等組成,所以其主要的操作為數據表的操作,而視圖和查詢的后臺操作與數據表類似。對于數據表而言,其常用操作包括數據表結構操作和數據表記錄操作等。數據表結構操作包括建立數據表、修改字段(名稱、類型、寬度)、增加字段和刪除字段。數據表記錄操作包括瀏覽記錄、增加記錄、修改記錄和刪除記錄。由于所有網站的后臺數據庫操作基本相同,因而具有通用性,且后臺數據庫操作對操作界面的版面格式要求不高,可以使用通用網頁界面模板。
在圖1所示的動態網站結構中,后臺數據庫往往具有大量數據表。網站的傳統設計中,針對不同的數據表設計不同的操作界面,工作量大,而且都是重復類似工作。另外,當數據表發生變化時(如字段增加、刪除等),需要重新修改相應的操作界面,維護極為不方便。針對動態網站結構的這一特點,多位學者提出了不同的解決方案。Takada H.[3]等人設計和實現了一個通用用戶界面,用于 AWSC(Automatic Web Service Composition),其中使用了HTN本體原理。孫雷[4]采用MVC(Model-View-Controller)模式,基于Struts框架包進行開發,實現了一個動態通用編輯界面,主要用于收集用戶信息,生成報表。方建良等人使用PB實現了一種通用數據編輯界面,具有保證應用程序邏輯獨立性和在應用程序中實現參照完整性約束檢驗的特點[5]。這些編輯器面向的用戶不一樣,開發的目的和技術也不相同,具有特定的應用場合。Gang Tu[6]等人還提出了數據表設計的一些建議,用以改善數據表的查詢性能。唐燦[7]對HTML5、Flash和Silverlight等新興WEB界面技術進行了總結和分析,指出Web應用程序開發應該面對這些變革。針對動態網站結構的這一特點,在此提出了一個BS模式下基于ADO(ActiveX Data Objects)對象的通用數據表編輯器方案,該編輯器使用可視化操作方式,具有數據表建立操作、數據表結構操作和數據表記錄操作三大功能。該方案通過傳輸數據表名和相關參數到通用編輯器,自動建立風格統一的、可視化的操作界面,在不需要額外編寫程序代碼的情況下,實現后臺數據庫的維護工作。相對于傳統的網站后臺管理系統開發,該方案自動化程序高,簡化了大量重復工作,操作簡單,極大的提高了網站后臺管理系統的開發效率。
通用數據表編輯器的結構如圖2所示,它包括3個部分:BS模式下基于ADO對象的通用數據表創建編輯器(簡稱創建編輯器)、BS模式下基于ADO對象的通用數據表結構編輯器(簡稱結構編輯器)和BS模式下基于ADO對象的通用數據表記錄編輯器(簡稱記錄編輯器)。

圖2 通用數據表編輯器的總體結構
雖然不同的網站可能使用不同的數據庫,但現在常用數據庫均支持SQL語言,所以在此提出的通用數據表編輯器使用SQL語言完成各種數據庫操作。需要注意的是不同的數據庫,對于SQL的實現方法略有不同,這造成相同功能的SQL語句,其語法略有不同,在編寫通用數據表編輯器程序時需要加以區分。
創建編輯器主要用于在建立網站之初,建立各種基礎數據表。
傳統建立數據表的方法有兩種方法。一是在程序中根據需要,手工編寫建立數據表的SQL語句,然后執行程序建立數據表。此方法的缺點在于,編寫SQL語句比較繁瑣,存在大量機械重復工作,效率不高,容易出錯。二是使用數據庫本身提供的界面建立數據表。此方法要求用戶必須掌握數據庫的操作方法,且必須擁有直接操作數據庫的權限。對于某些數據庫,出于安全考慮,不允許普通用戶直接操作數據庫。另外,不同種類的數據庫的操作方法各不相同,操作方法也比較繁瑣。
此處提出的創建編輯器,使用網頁形式,在瀏覽器中以可視化操作界面進行操作,操作方法簡單,易學易用,界面友好,不易出錯。在字段定義界面中,用戶根據需要可以反復增加、刪除字段,也可以修改已經存在的字段。用戶可以定義字段的名稱、類型及寬度。另外,字段的默認值、完整性約束等也可在此界面中定義。當字段定義完成后,創建編輯器根據字段定義的內容,自動生成建立數據表的SQL語句:Create Table…。然后創建編輯器使用ADO對象,將Create Table語句傳遞給數據庫,生成數據表。
結構編輯器主要用于編輯數據庫中已經建立好的數據表的結構。傳統編輯數據表結構的方法也有兩種:一是根據不同的編輯目的,手工編寫對應的SQL語句,然后執行程序完成數據表編輯操作;二是使用數據庫本身提供的界面編輯數據表。這兩種方法的缺點與創建編輯器中所述內容相似。

圖3 結構編輯器流程圖
此處提出的結構編輯器,同樣使用網頁形式,在瀏覽器中以可視化操作界面進行操作,其過程如圖3所示。結構編輯器首先使用ADO對象獲取數據表的結構信息,然后判明操作種類,再根據操作種類生成Alter Table語句,最后使用ADO對象提交語句,完成對數據表結構的修改。
記錄編輯器主要用于編輯數據表中的記錄,包括記錄的瀏覽(顯示)、增加、修改、刪除等。由于不同數據表的內容不同,傳統的處理方式是對于不同的數據表設計不同的操作界面。對于一些具有特殊要求的數據表,這種傳統做法是合適的。但對于大多數數據表而言,其處理方式大致相同,即主要完成數據表的瀏覽、增加、修改、刪除等基本操作。
此處提出的記錄編輯器使用通用數據表處理界面,其通用界面包括數據表瀏覽界面、記錄增加界面、記錄修改界面、記錄刪除界面。各界面均是首先通用ADO對象獲取數據表的結構信息,根據權限參數表自動生成操作界面,然后根據用戶操作要求,生成不同功能的SQL語句,通過ADO對象提交給數據庫,完成各自不同的操作,其過程如圖4所示。

圖4 記錄編輯器流程圖
由于網站后臺用戶可能有多個,不同用戶具有的權限一般不同,所以不同用戶對同一數據表的不同記錄可能具有不同的權限。并且,對于同一條記錄中的不同字段,不同用戶也可能具有不同的權限。在通用數據表編輯器中,可以通過設置權限參數表來完成權限處理。在此的做法是在調用通用數據表編輯器之前,根據網站的用戶權限信息,生成權限參數表,然后將權限參數表作為參數3傳遞給通用數據表編輯器。
當增加記錄時,根據字段的類型不同,自動生成不同輸入方式。如字符型字段使用文本框,邏輯型字段使用單選按鈕組,備注型字段使用文本區域等。字段的類型通過ADO對象獲得。在執行此項功能時,還可以通過權限參數表,指定不同字段的特殊要求。比如“日期”字段,用來指示該記錄是什么時間錄入的,用戶在編輯記錄時自動取當前計算機的時間,不需要用戶輸入,則在權限參數表中指定“日期”字段的操作權限為readonly。
增加記錄權限參數表是一個三元二維數組:addParameter(n,1)指定字段名、addParameter(n,2)指定字段處理方式、addParameter(n,3)指定可選的默認設置值。addParameter(n,2)的取值及其含義如表1所示。對于數據表中的字段,在addParameter數組中不需要全部說明。如字段沒在addParameter數組中說明,則其輸入框為可修改的空白框,相當于notuse。

表1 增加記錄權限參數表的取值及其含義
當修改記錄時,首先使用ADO對象取出字段類型及記錄內容,然后根據不同的字段類型,自動生成不同的輸入框,并將原有記錄內容填入輸入框中。在修改記錄時,也可以通過權限參數表,指定不同字段的特殊要求。例如主鍵“ID”字段,在修改記錄時只能查看,不允許修改。
修改記錄權限參數表也是一個三元二維數組:alterParameter(n,1)指定字段名、alterParameter(n,2)指定字段處理方式、alterParameter(n,3)指定可選的默認設置值。alterParameter(n,2)的取值及其含義如表2所示。對于數據表中的字段,在alterParameter數組中也不需要全部說明。如字段沒在alterParameter數組中說明,則顯示該字段原有數據,當前用戶可以隨意修改,相當于notuse。

表2 修改記錄權限參數表取值
當瀏覽數據表時,使用二維表格的形式顯示數據表中的記錄,每條記錄顯示一行,每頁顯示多條記錄,整個數據表分頁顯示。在執行此項功能時,可以通過權限參數表指定某些字段是否需要顯示。瀏覽權限參數表是一個二元二維數組:showParameter(n,1)指定字段名、showParameter(n,2)指定該字段是否顯示(取值為“NO”表示不顯示該字段,否則顯示該字段)。對于沒有在權限參數表中指定的字段,均顯示。當刪除記錄時,首先顯示刪除確認對話框,用戶確認后,再刪除數據表中的記錄。
在網站后臺數據庫的處理上,通用數據表編輯器實現了功能集成化、界面統一化、操作可視化,簡單易用,即使用戶沒有高深的數據庫知識和程序設計知識也可以通過編輯器對后臺數據庫進行處理。降低了網站開發難度,提高了網站開發速度,且使得網站后期維護更加簡單、快捷。文中提出的編輯器突出通用性,其使用過程類似于函數調用,只需傳入幾個參數,就可以通過Web方式處理后臺數據庫中的大量數據表。該通用數據表編輯器在重慶師范大學計算機學院網站、重慶交旅游輪有限公司網站等十多個網站投入實際使用,效果良好,達到預期設計要求。
當然,對于有特殊處理要求的數據表,通用數據表編輯器可能不能完成其功能要求。解決方法有兩種。一是采用傳統方法,針對特殊處理要求單獨設計處理界面;二是擴充通用數據表編輯器的功能,針對常見的特殊要求編寫更多的特殊處理模塊,在調用通用數據表編輯器時通過參數指定使用不同的特殊處理模塊。另外,通用數據表編輯器在啟動時,需要首先使用ADO對象與數據庫建立連接。與數據庫建立連接時,要明確知道數據庫地址、數據庫登錄名和數據庫登錄密碼。
[1]游向鋒.SQL注入式攻擊的分析與防范[J].電腦編程技巧與維護,2009(1):83-85
[2]王云,郭外萍,陳承歡.Web項目中的SQL注入問題研究與防范方法[J].計算機工程與設計.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]孫雷.動態通用編輯界面在B/S模式中設計[J].電腦知識與技術,2005(9):9-11
[5]方建良.基于PB的通用數據編輯界面的研究與實現[J].計算機與現代化,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界面前端技術綜述[J].重慶工商大學學報:自然科學版,2009,26(4):350-354