基于B/S體系結構開發(fā)應用系統(tǒng)
摘要 本文介紹了組件以及ActiveX技術,分析了Browser/Server體系結構開發(fā)應用軟件的特點和不足。提出了克服該不足的一種方法。最后給出了一個應用實例。
本文引用地址:http://2s4d.com/article/202164.htm關鍵詞 WEB ,COM ,應用軟件,服務器
1 引言
由于客戶服務器兩層結構存在靈活性差、升級困難、維護工作量大等缺陷,已較難適應當前信息技術與網(wǎng)絡技術發(fā)展的需要。隨著WEB技術的日益成熟,Browse/Server(簡稱B/S)結構已成為取代Browser/Server(簡稱C/S)結構的一種全新技術。采用該結構軟件的優(yōu)勢在于:(1)無須開發(fā)客戶端軟件,維護和升級方便;(2)可跨平臺操作,任何一臺機器只要裝有WWW瀏覽器軟件,均可作為客戶機來訪問系統(tǒng);(3)具有良好的開放性和可擴充性;(4)可采用防火墻技術來保證系統(tǒng)的安全性,有效地適應了當前用戶對管理信息系統(tǒng)的新需求。因此該結構在管理信息系統(tǒng)開發(fā)領域中獲得飛速發(fā)展,成為應用軟件研制中一種流行的體系結構。
本文在對B/S體系結構分析的基礎上,提出了一種新的體系結構,把B/S與C/S相結合,將組件技術和ActiveX技術分別應用在服務器端和客戶端,開發(fā)高效、安全的應用系統(tǒng)。最后給出了一個應用實例。
2 . COM組件技術和ActiveX技術
COM是一種技術標準。它是由微軟公司創(chuàng)建,提供了使多個應用程序或組件對象協(xié)同工作并相互通信的能力。COM組件是遵循COM規(guī)范編寫、以WIN32動態(tài)鏈接庫(DLL)或可執(zhí)行文件(EXE)的形式發(fā)布的可執(zhí)行的二進制代碼。遵循COM的規(guī)范標準,使組件與應用、組件與組件之間可以相互操作,極其方便地建立可伸縮的應用系統(tǒng)。從工程的角度看,組件在應用開發(fā)方面具有以下特點:
(1) 組件與開發(fā)的工具語言無關。開發(fā)人員可以根據(jù)需要和愛好選擇特定語言工具實現(xiàn)組件的開發(fā)。常用的開發(fā)工具是VB、VC和Delphi。將組件編譯成DLL或EXE置于服務器端??捎行ПWo商業(yè)秘密。
(2) 通過接口有效保證了組件的復用性。一個組件具有若干個接口,每個接口代表組件的某個屬性或方法。其它組件或應用程序可以設置或調(diào)用這些屬性和方法來進行特定的邏輯處理。組件和應用程序的連接是通過其接口實現(xiàn)的。負責集成的開發(fā)人員無須了解組件功能的如何實現(xiàn),而只須創(chuàng)建組件對象與其接口建立連接。在保證接口一致性的前提下,可以調(diào)換組件、更新版本,也可以將組件應用在不同的系統(tǒng)中。
(3) 組件運行效率高、便于使用和管理。因為組件是二進制代碼,比ASP腳本運行效率高,所以核心的商務邏輯計算任務必須由組件來負責,ASP腳本只起組裝組件的角色。而且組件在網(wǎng)絡上的位置可被透明地分配,組件和使用它的程序既能在同一進程中運行,也可在不同進程或不同的機器上運行。組件之間是相互分離和獨立的。利用MTS或COM+對組件管理更加方便。
ActiveX是遵循COM/DCOM規(guī)程而開發(fā)的用于INTERNET的一種對象鏈接與嵌入技術(OLE)。COM是應OLE設計者的需求而誕生的。其基本的出發(fā)點是想讓某個軟件通過一個通用的機構為另一個軟件提供服務。對于基于WEB的應用而言,它提供了使組件嵌入到WEB頁面以擴展交互功能的應用機制??蛻舳丝丶敲嫦蛴脩舻?,以可視化的圖形視頻或文字界面、或者音頻形式在瀏覽器上出現(xiàn)。但它可能并不是瀏覽器的組成部分。這些控件原先是放在服務器上的。當瀏覽器發(fā)出請求時,WEB服務器回傳頁面,由瀏覽器負責解釋。在解釋過程中,若發(fā)現(xiàn)頁面中要求調(diào)用ActiveX控件時,則用該控件的在頁面中注明的ID值先在本地的注冊表內(nèi)進行查詢。若已經(jīng)存在,則說明該控件已經(jīng)在本地安裝,然后通過注冊表中的相關信息直接使用該控件;否則就要根據(jù)頁面中所提示的該控件所在的服務器上的路徑到服務器上去下載并且自動完成在本地的安裝注冊,使該控件成為本地資源,供今后使用,這就是所謂“一次下載,永久使用“。客戶端控件一旦在本地安裝完畢,就等價于一個可執(zhí)行的應用程序,它能訪問使用本地的資源,甚至進行遠程訪問。當然,這可能帶來了安全性問題。
3 基于B/S體系結構開發(fā)應用系統(tǒng)
3.1 B/S三層體系結構
在B/S體系結構系統(tǒng)中,用戶通過瀏覽器向分布在網(wǎng)絡上的許多服務器發(fā)出請求,服務器對瀏覽器的請求進行處理,將用戶所需信息返回到瀏覽器。B/S結構簡化了客戶機的工作,客戶機上只需配置少量的客戶端軟件。服務器將擔負更多的工作,對數(shù)據(jù)庫的訪問和應用程序的執(zhí)行將在服務器上完成。瀏覽器發(fā)出請求,而其余如數(shù)據(jù)請求、加工、結果返回以及動態(tài)網(wǎng)頁生成等工作全部由Web Server完成。實際上B/S體系結構是把二層C/S結構的事務處理邏輯模塊從客戶機的任務中分離出來,由Web服務器單獨組成一層來負擔其任務,這樣客戶機的壓力減輕了,把負荷分配給了Web服務器。這種三層體系結構如圖1所示。
這種結構不僅把客戶機從沉重的負擔和不斷對其提高的性能的要求中解放出來,也把技術維護人員從繁重的維護升級工作中解脫出來。由于客戶機把事務處理邏輯部分分給了功能服務器,使客戶機一下子苗條了許多,不再負責處理復雜計算和數(shù)據(jù)訪問等關鍵事務,只負責顯示部分,所以維護人員不再為程序的維護工作奔波于每個客戶機之間,而把主要精力放在功能服務器上程序的更新工作。這種三層結構在層與層之間相互獨立,任何一層的改變不會影響其它層的功能。
3.2 B/S三層體系結構的不足
經(jīng)過近一兩年的應用,B/S體系結構也暴露出了許多不足地方,具體表現(xiàn)在以下幾個方面:
(1) 由于瀏覽器只是為了進行WEB瀏覽而設計的,當其應用于WEB應用系統(tǒng)時,許多功能不能實現(xiàn)或?qū)崿F(xiàn)起來比較困難。比如通過瀏覽器進行大量的數(shù)據(jù)輸入,或進行報表的應答都是比較困難和不便的。
(2) 復雜的應用構造困難。雖然可以用ActiveX、Java等技術開發(fā)較為復雜的應用,但是相對于發(fā)展已非常成熟C/S的一系列應用工具來說,這些技術的開發(fā)復雜,并沒有完全成熟的技術供使用。
(3) HTTP可靠性低有可能造成應用故障,特別是對于管理者來說,采用瀏覽器方式進行系統(tǒng)的維護是非常不安全與不方便的。
(4) WEB服務器成為對數(shù)據(jù)庫的唯一的客戶端,所有對數(shù)據(jù)庫的連接都通過該服務器實現(xiàn)。WEB服務器同時要處理與客戶請求以及與數(shù)據(jù)庫的連接,當訪問量大時,服務器端負載過重。
(5) 由于業(yè)務邏輯和數(shù)據(jù)訪問程序一般由JavaScript、VBScript等嵌入式小程序?qū)崿F(xiàn),分散在各個頁面里,難以實現(xiàn)共享,給升級和維護也帶來了不便。同時由于源代碼的開放性,使得商業(yè)規(guī)則很容易暴露,而商業(yè)規(guī)則對應用程序來說則是非常重要的。
為克服以上不足,在原有B/S體系結構基礎上,采用一種新的體系結構,如圖2所示。
在該種結構體系中,一些需要用WEB處理的,滿足大多數(shù)訪問者請求的功能界面(如信息發(fā)布查詢界面)采用B/S結構。后臺只需少數(shù)人使用的功能應用(如數(shù)據(jù)庫管理維護界面)采用C/S結構。組件位于WEB應用程序中,客戶端發(fā)出HTTP請求到WEB SERVER。WEB SERVER將請求傳送給WEB應用程序。WEB應用程序?qū)?shù)據(jù)請求傳送給數(shù)據(jù)庫服務器,數(shù)據(jù)庫服務器將數(shù)據(jù)返回WEB應用程序。然后再由WEB SERVER將數(shù)據(jù)傳送給客戶端。對于一些實現(xiàn)起來困難的功能或一些需要豐富的HTML頁面,通過在頁面中嵌入ActiveX控件來實現(xiàn)。
采用這種結構優(yōu)點在于:(1)充分發(fā)揮了充分了B/S與C/S體系結構的優(yōu)勢,彌補了二者不足。充分考慮用戶利益,保證瀏覽查詢者方便操作的同時也使得系統(tǒng)更新簡單,維護簡單靈活,易于操作。(2)信息發(fā)布采用B/S結構,保持了瘦客戶端的優(yōu)點。裝入客戶機的軟件可以采用統(tǒng)一的WWW瀏覽器。而且由于WWW瀏覽器和網(wǎng)絡綜合服務器都是基于工業(yè)標準,可以在所有的平臺上工作。(3)數(shù)據(jù)庫端采用C/S結構,通過ODBC/JDBC連接。這一部分只涉及到系統(tǒng)維護、數(shù)據(jù)更新等,不存在完全采用C/S結構帶來的客戶端維護工作量大等缺點。并且在客戶端可以構造非常復雜的應用,界面友好靈活,易于操作,能解決許多B/S存在的固有的缺點。(4)對于原有基于C/S體系結構的應用,可以非常容易地升級到這種體系結構,只需開發(fā)用于發(fā)布的WWW界面,可以保留原有的C/S結構的某些子系統(tǒng),充分地利用現(xiàn)有系統(tǒng)的資源。使得現(xiàn)有系統(tǒng)或資源無需大的改造即可以連接使用,保護了用戶以往的投資(5)通過在瀏覽器中嵌入ActiveX控件可以實現(xiàn)在瀏覽器中不能實現(xiàn)或?qū)崿F(xiàn)起來比較困難的功能。比如通過瀏覽器進行報表的應答。另外,在客戶端ActiveX控件的加盟,可以豐富HTML頁面,產(chǎn)生另人驚奇的效果。(6)將服務器端劃分為WEB服務器和WEB應用程序兩部分。WEB應用程序采用組件技術實現(xiàn)三層體系結中的商業(yè)邏輯部分,達到封裝源代碼,保護知識產(chǎn)權的目的。Internet應用程序大部分屬于分布式應用程序,采用組件技術一個重要特點就是它的處理能力能夠隨著用戶數(shù)量、數(shù)據(jù)量所需性能的提高而增加。COM的無逢擴展集COM+,有著如內(nèi)存數(shù)據(jù)庫、負載平衡等強大的功能。
4 實例
下面以某學校學生管理系統(tǒng)為例說明B/S結構軟件的設計方法,該系統(tǒng)采用B/S體系結構與COM+技術相結合。通過該系統(tǒng)管理人員可以對學生的學籍、學生的日常表現(xiàn)、學生的學習成績、學校教師、學校的資產(chǎn)進行管理與維護。任課教師可以通過瀏覽器查詢所教班級學生各種相關信息。學校管理人員通過瀏覽器對學校的學生、教師等信息進行管理與維護以及有關查詢統(tǒng)計功能。學校資產(chǎn)管理人員通過C/S體系結構實現(xiàn)對學校資產(chǎn)的管理維護。
本系統(tǒng)結合了ASP技術和COM+技術,是一個三層結構。表示層由ASP頁面組成,用以實現(xiàn)WEB頁面顯示和調(diào)用COM+組件,業(yè)務邏輯和數(shù)據(jù)訪問由一組用VC實現(xiàn)的COM+組件構成。為了便于維護、升級和實現(xiàn)分布式應用,在實現(xiàn)過程中,又將業(yè)務邏輯層和數(shù)據(jù)訪問層分離開,ASP頁面不直接調(diào)用數(shù)據(jù)訪問層,而是通過業(yè)務邏輯層來調(diào)用數(shù)據(jù)庫。
4.1 COM組件技術應用
該系統(tǒng)的實現(xiàn)主要分為三個部分:數(shù)據(jù)庫、COM+組件和ASP頁面。其中數(shù)據(jù)庫與ASP頁面的實現(xiàn)與一般B/S結構的WEB應用相似。COM+實現(xiàn)可分為三個步驟:COM+組件的設計、COM+應用程序的生成和組件注冊、基于屬性編程。該管理系統(tǒng)利用VC中的ATL開發(fā)COM+組件。下面是該系統(tǒng)中一個定制組件部分主要代碼
在showscore.asp頁面中接受、辨別用戶的查詢請求,做出不同的查詢處理。當客戶的身分為教師或教務員時,可以查詢所有學生的成績;當客戶的身分為學生時,只能查詢本人的成績。
定制COM組件Score.dll進行查詢處理。首先設計該組件的接口,為組件設計四個屬性:SubjNo(課程號),Term(課程所屬學期),ClassNo(班級號)和StuNo(學號)。定義兩個方法RequeryScores和RequeryAllScores,分別對教師、教務部門和學生的請求做出相應的處理,并將查詢結果集返回給用戶。
以下是實現(xiàn)該組件Score.dll接口描述以及實現(xiàn)方法的部分代碼,從中可以看到組件的接口是如何實現(xiàn)的:
import ocidl.idl;
[
object,
uuid(46C01798-BE39-4FC0-A25D-718BA31DFADC),
dual,
helpstring(IStudentScore Interface),
pointer_default(unique)
]
interface IStudentScore : IDispatch{
[propget, id(1), helpstring(課程號)] HRESULT SubjNo([out, retval] BSTR *pVal);
[propput, id(1), helpstring(課程號)] HRESULT SubjNo([in] BSTR newVal);
//其它接口部分從略
[id(5), helpstring(method RequeryScores)] HRESULT RequeryScores(([out,retval]LPDISPATCH* ppRecordset));
};
STDMETHODIMP CStudentScore::RequeryScores()
{
HRESULT hr=S_OK;
IobjectContext* m_spObjectContext=NULL;
//利用ADO訪問數(shù)據(jù)庫
::CoInitialize(NULL);
_RecordsetPtr pRecordSet=NULL,pRecordSetClone=NULL;
BSTR bstrDSN=::SysAllocString(LProvider=SQLOLEDB.1;Persist Security Info=True;
Password=;Initial Catalog=pubs;Data Source=zhudamiing;User ID=sa);
BSTR bstrSQL;
try{
GetObjectContext(m_spObjectContext);
pRecordSet.CreateInstance(__uuidof(Recordset));
//根據(jù)查詢要求(查詢所有課程、查詢特定學期所有課程、查詢指定課程、查詢
//特定學期某一課程)進行不同操作生成相應SQL語句,程序具體處理從略
pRecordSet->CursorLocation = adUseClient;
pRecordSet->Open(bstrSQL,bstrDSN,adOpenKeyset,adLockOptimistic,adCmdText);
pRecordSet->PutRefActiveConnection(NULL);
pRecordSetClone = pRecordSet->Clone(adLockOptimistic);
pRecordSetClone->QueryInterface(IID_IDispatch, (void**)ppRecordset);
pRecordSet->Close();
pRecordSet = NULL;
::SysFreeString(bstrDSN);
::SysFreeString(bstrSQL);
//事物成功完成,則提交該事物
I f(m_spObjectContext-)
m_spObjectContext->SetComplete();
}
catch(_com_error e){
if(m_spObjectContext) //事物失敗,回滾事物處理
m_spObjectContext->SetAbort()
// 其他錯誤處理,從略
}
return hr;
}
RequeryAllScores()實現(xiàn)部分從略。另外ASP調(diào)用實現(xiàn)部分比較簡單從略。
組件編譯結束后可以用COM+組件服務管理工具來管理COM+組件及其所在的應用程序。COM+組件服務是個圖形界面的管理工具,利用它可以安裝和發(fā)布組件、配置組件及其所在應用程序的屬性,以實現(xiàn)組件安全性、MTS支持、排對組件、設置組件構造參數(shù)等。
4。2 ActiveX技術應用
在本系統(tǒng)中許多報表的打印如學生成績打印、學籍報表、學籍卡打印等需要特殊的格式。而瀏覽器所提供的打印功能無法實現(xiàn)。為此可采用ActiveX技術,實現(xiàn)在WEB環(huán)境下的本地端打印和報表生成。具體實現(xiàn)過程為:(1)WWW服務器在接到用戶請求后調(diào)用WEB應用程序中的相應組件,通過組件訪問數(shù)據(jù)庫,對數(shù)據(jù)處理生成報表數(shù)據(jù),以文件形式存儲于WEB服務器中相應目錄下。(2)WWW服務器向用戶瀏覽器發(fā)送內(nèi)嵌ActiveX控件的HTML頁面,并在HTML頁面里的(OBJECT)標志中的param屬性里指明數(shù)據(jù)文件的URL地址。(3)HTML頁面根據(jù)所提供的ActiveX標志從WWW服務器上下載ActiveX控件到本地端,并在瀏覽器里執(zhí)行。ActiveX控件在客戶瀏覽器里完成初始化工作以后,則需直接與服務器端聯(lián)系,以獲取報表數(shù)據(jù)。ActiveX控件與服務器端的連接采用HTTP協(xié)議所提供的GET方法,根據(jù)數(shù)據(jù)文件在WWW服務器上的URL地址,直接將數(shù)據(jù)文件從WWW服務器下載到本地端。(4)對數(shù)據(jù)文件進行解析,輸入到控件的存儲顯示模塊里,用以存儲顯示。(5)當用戶按下打印按鈕時,ActiveX調(diào)用打印模塊進行打印輸出。
5 結束語
隨著INTERNET普及,基于B/S體系結構開發(fā)應用程序變?yōu)榱餍械姆绞?。將組件技術應用到B/S體系結構中,實現(xiàn)業(yè)務邏輯封裝,提高軟件的可重性和可維護性。
參考文獻:
[1]余英 ,梁剛 VC實踐與提高COM和COM+篇. 中國鐵道出版社
[2]林子禹等 基于WEB與組件技術的企業(yè)應用系統(tǒng)設計模型 計算機工程與應用 2000.6.
[3]夏驕雄等 基于Intranet的管理信息系統(tǒng) 小型微型計算機系統(tǒng) 2001、4
[4]樓偉進,應飚.COM/DCOM/COM+組件技術 :計算機應用2000、4.
[5]張震、張曾科 一種新的WEB數(shù)據(jù)庫系統(tǒng)結構
更多計算機與外設信息請關注:21ic計算機與外設頻道
評論