???? 關(guān)鍵詞:網(wǎng)絡(luò),體系結(jié)構(gòu),特點(diǎn),方案
1 引 言
九十年代末,隨著網(wǎng)絡(luò)技術(shù)在各行各業(yè)的深入應(yīng)用,IT行業(yè)又出現(xiàn)了一種低費(fèi)用、低管理開銷、并享有Client/Server計(jì)算模式優(yōu)點(diǎn)的新型體系結(jié)構(gòu)——三層網(wǎng)絡(luò)體系結(jié)構(gòu)。如果把C/S體系結(jié)構(gòu)稱為“胖客戶機(jī)/服務(wù)器”計(jì)算模式,那么,三層體系結(jié)構(gòu)可以稱為“瘦客戶機(jī)/服務(wù)器”計(jì)算模式。
2 技術(shù)特點(diǎn)
三層(或多層)結(jié)構(gòu)的特點(diǎn)是在兩層結(jié)構(gòu)的基礎(chǔ)上加入一個(gè)(或多個(gè))中間件層。它將C/S體系結(jié)構(gòu)中原本運(yùn)行于客戶端的應(yīng)用程序移到了中間件層,客戶端只負(fù)責(zé)顯示與用戶交互的界面及少量的數(shù)據(jù)處理(如數(shù)據(jù)合法性檢驗(yàn))工作。客戶端將收集到的信息(請(qǐng)求)提交給中間件服務(wù)器,中間件服務(wù)器進(jìn)行相應(yīng)的業(yè)務(wù)處理(包括對(duì)數(shù)據(jù)庫(kù)的操作),再將處理結(jié)果反饋給客戶機(jī)。
與傳統(tǒng)的C/S體系結(jié)構(gòu)相比,三層體系結(jié)構(gòu)存在以下優(yōu)點(diǎn):
2.1 客戶端零維護(hù)
在三層體系結(jié)構(gòu)中,幾乎所有的業(yè)務(wù)處理都是在中間件Web Server上完成的,客戶端只需要安裝支持Java的瀏覽器即可,不用做任何其它安裝和配置工作,所以也就不存在客戶端維護(hù)的問題,真正實(shí)現(xiàn)了“客戶端零維護(hù)”。處理業(yè)務(wù)時(shí),操作員可以直接通過Web瀏覽器訪問Web Server進(jìn)行業(yè)務(wù)處理工作。
2.2 可擴(kuò)展性好
三層體系結(jié)構(gòu)的可擴(kuò)展性好體現(xiàn)在以下四個(gè)方面:
第一,工作節(jié)點(diǎn)的可擴(kuò)展性好。由于三層體系結(jié)構(gòu)的客戶端零維護(hù)的特點(diǎn),使增加一個(gè)工作節(jié)點(diǎn)的工作簡(jiǎn)單到了只需增加一臺(tái)裝有Web瀏覽器的PC機(jī)即可。
第二,應(yīng)用系統(tǒng)的可擴(kuò)展性好。好的應(yīng)用系統(tǒng)應(yīng)該能方便地實(shí)現(xiàn)一定程度上業(yè)務(wù)的變化和業(yè)務(wù)單元的增加。三層體系結(jié)構(gòu)采用面向?qū)ο蟮姆治龊驮O(shè)計(jì)模式,將業(yè)務(wù)模塊都封裝到了業(yè)務(wù)類和服務(wù)類中,所以,如果一個(gè)業(yè)務(wù)流程變了,或需要增加一個(gè)新的業(yè)務(wù)模塊,只需替換或增加新的業(yè)務(wù)類和服務(wù)類即可。
第三,業(yè)務(wù)邏輯與用戶界面及數(shù)據(jù)庫(kù)分離,使得當(dāng)用戶業(yè)務(wù)邏輯發(fā)生變化時(shí)只需更改中間層的控件/組件/JB/EJB即可。
第四,便于數(shù)據(jù)庫(kù)移植。由于客戶端不直接訪問數(shù)據(jù)庫(kù),而是通過一個(gè)中間層進(jìn)行訪問,所以,在改變數(shù)據(jù)庫(kù)、驅(qū)動(dòng)程序或存儲(chǔ)方式時(shí)無(wú)需改變客戶端配置,只要集中改變中間件上的持久化層的數(shù)據(jù)庫(kù)連接部分即可。
2.3 安全性好
在三層體系結(jié)構(gòu)中,客戶端只能通過Web Server而不能直接訪問數(shù)據(jù)庫(kù),這大大提高了系統(tǒng)的安全性。如果對(duì)系統(tǒng)提出更高的安全性要求的話,還可以通過防火墻進(jìn)行屏蔽。
2.4 資源重用性好
由于將業(yè)務(wù)邏輯集中到Web Server統(tǒng)一處理,三層體系結(jié)構(gòu)可以更好地利用共享資源。例如數(shù)據(jù)庫(kù)連接是一項(xiàng)很消耗系統(tǒng)資源、影響響應(yīng)時(shí)間的事件,在三層體系結(jié)構(gòu)中可以將數(shù)據(jù)庫(kù)連接放在緩沖池中統(tǒng)一管理,由不同應(yīng)用共享,并有效控制連接的數(shù)量。
3 組成結(jié)構(gòu)
三層結(jié)構(gòu)主要由以下三部分組成:
3.1 客戶端
客戶端的主要任務(wù)是顯示用戶界面,接收用戶事件。三層體系結(jié)構(gòu)中,用戶界面通過瀏覽器顯示,WebServer將應(yīng)答最終以HTML為載體下載到客戶端瀏覽器,經(jīng)瀏覽器(如IE、NetScape)進(jìn)行解釋,得到最終的用戶界面。從技術(shù)的角度劃分,客戶端程序由以下幾部分組成:
3.1.1 HTML
HTML是所有界面元素的載體,標(biāo)題、正文、Table、Form、Script程序段、Applet、ActiveXControl……所有這些都是通過<標(biāo)識(shí)></標(biāo)識(shí)>嵌在HTML中的。HTML是各種瀏覽器的通用語(yǔ)言,界面上的一切對(duì)象都要嵌入到HTML中才能被瀏覽器所解釋。
3.1.2 CSS
對(duì)CSS的翻譯,國(guó)內(nèi)不同文獻(xiàn)有不同的解釋,比較通用的解釋是“層疊風(fēng)格表單”。層疊風(fēng)格表單的標(biāo)準(zhǔn)是由W3C組織制定的,目前市面上各個(gè)瀏覽器普遍支持的是CSS1標(biāo)準(zhǔn)。
層疊風(fēng)格表單定義了一個(gè)文檔元素的顯示特性。
HTML標(biāo)識(shí)符所包含的每一個(gè)元素都可以被定義到一個(gè)或多個(gè)內(nèi)容顯示的設(shè)置。從功能上講,CSS可以細(xì)分為CSS1/2和CSS-P(層疊風(fēng)格表單定位)。CSS1/2的作用是設(shè)置文檔元素的顏色、字體等顯示特性;CSS-P的作用是設(shè)置文檔元素在頁(yè)面上的精確位置。
對(duì)于創(chuàng)建一個(gè)中型或大型企業(yè)的管理信息系統(tǒng),這樣大規(guī)模的基于Web Server的系統(tǒng)來(lái)說(shuō),使用CSS是一個(gè)理想的選擇。它可以有效地保證所有頁(yè)面呈現(xiàn)統(tǒng)一的顯示風(fēng)格,同時(shí)也能減少大量編碼工作。
3.1.3 Script
Script是指某一種腳本語(yǔ)言,目前主要有JavaScript和VBScript兩種通用的腳本語(yǔ)言。由于網(wǎng)景的Netscape不支持VBScript,所以要想編寫跨瀏覽器的腳本程序,JavaScript是唯一的選擇。
從功能上講,Script可以分為客戶端腳本和服務(wù)端腳本,由于在三層體系結(jié)構(gòu)中,服務(wù)端的控制和應(yīng)答由Servlet和JSP完成,所以系統(tǒng)只使用客戶端腳本。
客戶端腳本的主要作用是:檢查錄入數(shù)據(jù)的合理性,充當(dāng)過濾器的作用,保證提交給Web Server的數(shù)據(jù)是合法的;結(jié)合業(yè)務(wù)規(guī)則,控制界面元素的顯示特性;在必要情況下進(jìn)行cookie操作。
3.1.4 Object
Object是嵌入HTML中的外來(lái)對(duì)象,常用的Object有兩種:Java Applet和MSActiveX Control。當(dāng)系統(tǒng)對(duì)界面的靈活性及功能的需求超出了HTML和Script的實(shí)現(xiàn)范圍時(shí),開發(fā)者往往會(huì)考慮到Object技術(shù)。
Applet是運(yùn)行于客戶端的Java小應(yīng)用程序,隨包容它的頁(yè)面一起下載到客戶端,由支持Java的瀏覽器(帶有Java虛擬機(jī))解釋并運(yùn)行。
ActiveXControl的作用類似于Applet,所不同的是它只能運(yùn)行于Windows平臺(tái)的客戶端,而且只在第一次訪問包容ActiveX Control頁(yè)面時(shí)下載并安裝ActiveXControl,直到服務(wù)端的ActiveXControl版本升級(jí)了才會(huì)下載第二次。
3.2 中間件服務(wù)器
中間件服務(wù)器由Web Server和Java ApplicationServer兩部分組成,有的中間件將這兩部分集成到了一起。
3.2.1 Web Server
HTTPServer使用基本的服務(wù)器構(gòu)架,它在啟動(dòng)時(shí)創(chuàng)建自己的服務(wù)處理線程池。在線程處理池中的線程進(jìn)入循環(huán),監(jiān)聽來(lái)自客戶端的HTTP請(qǐng)求,并使用HTTP協(xié)議,對(duì)來(lái)到的HTTP請(qǐng)求進(jìn)行處理。所有的HTTP連接都傳給它們。HTTP請(qǐng)求到來(lái)后,服務(wù)處理線程根據(jù)URL和Server的配置信息進(jìn)行必要的授權(quán)檢查,決定調(diào)用哪個(gè)Servlet來(lái)處理請(qǐng)求,然后將Servlet處理之后的結(jié)果作為應(yīng)答反饋給客戶端。
在HTTP Server中有幾個(gè)處于核心地位的Servlet,它們提供標(biāo)準(zhǔn)的HTTP功能。這幾個(gè)核心的Servlet分別是:File Servlet,用于處理對(duì)文件服務(wù)的請(qǐng)求,Cgi Servlet,提供基本的CGI功能,InvokerServlet,作為一個(gè)元Servlet(meta-servlet),負(fù)責(zé)其它Servlet的加載、擊活和刪除;Dispatcher Servlet:間離部分可信和完全可信的Servlet,使它們?cè)诟髯园踩摹吧诚洹崩飯?zhí)行。
網(wǎng)絡(luò)應(yīng)用級(jí)協(xié)議有多種,如HTTP、FTP、SMTP等,其中,HTTP協(xié)議是最安全、應(yīng)用最廣的協(xié)議,HTTP請(qǐng)求是被防火墻視為安全的請(qǐng)求。因此,三層結(jié)構(gòu)中間件都帶有HTTPServer,它是三層結(jié)構(gòu)中間件的門戶,是聯(lián)系客戶端和真正處理業(yè)務(wù)的Application Server的橋梁和紐帶。
3.2.2 Java Application Server
Application Server是中間件的核心部分,是真正實(shí)現(xiàn)業(yè)務(wù)功能的服務(wù),它接受HTTPServer分配的請(qǐng)求,做出相應(yīng)處理,再將處理結(jié)果傳遞給HTTPServer,由HTTPServer形成HTTP應(yīng)答反饋給客戶端。
3.2.3 數(shù)據(jù)庫(kù)服務(wù)器
數(shù)據(jù)庫(kù)服務(wù)器是業(yè)務(wù)對(duì)象的屬性得以永久性保存的載體。保證對(duì)象持久的最直接的方法是使用面向?qū)ο蟮臄?shù)據(jù)庫(kù)管理系統(tǒng),它是專門為存儲(chǔ)和共享對(duì)象而設(shè)計(jì)的。目前,大型三層體系結(jié)構(gòu)應(yīng)用系統(tǒng)中用的較多的關(guān)系型數(shù)據(jù)庫(kù)有Orcale、DB2、Sysbase等。
4 實(shí)現(xiàn)分類
三層結(jié)構(gòu)體系存在著J2EE和Windows DNA兩大陣營(yíng)。
4.1 基于Windows DNA結(jié)構(gòu)的實(shí)現(xiàn)方案
如果采用Windows DNA體系結(jié)構(gòu),則數(shù)據(jù)庫(kù)應(yīng)考慮微軟的SQLServer。SQLServer數(shù)據(jù)庫(kù)僅適用于中小企業(yè)級(jí)。
采用Windows DNA的優(yōu)勢(shì)在于,目前絕大多數(shù)桌面操作系統(tǒng)都是微軟的Windows平臺(tái),而且我們所常用的辦公軟件也是微軟的產(chǎn)品。這樣很容易將電子商務(wù)系統(tǒng)與日常辦公結(jié)合起來(lái)。另外,微軟的產(chǎn)品價(jià)格平易近人。再者,Windows2000不僅本身自帶了IISWeb server,而且也完全集成了COM+-中間件服務(wù),無(wú)需再額外選擇所謂的“中間件”服務(wù)器。另外,采用Windows DNA結(jié)構(gòu),開發(fā)效率要比采用J2EE效率高50%以上。
采用Windows DNA的缺點(diǎn)在于,系統(tǒng)的平臺(tái)兼容性、移植性差。這是眾所周知的,無(wú)需贅述。
基于Windows DNA結(jié)構(gòu)的實(shí)現(xiàn)方案簡(jiǎn)單地說(shuō)就是:ASP+ActiveXControl+COM++ODBC。
4.2 基于J2EE的實(shí)現(xiàn)方案
J2EE是一種利用Java 2平臺(tái)來(lái)簡(jiǎn)化諸多與多級(jí)企業(yè)解決方案的開發(fā)、部署和管理相關(guān)的復(fù)雜問題的體系結(jié)構(gòu)。J2EE技術(shù)的基礎(chǔ)就是核心Java平臺(tái)或Java 2平臺(tái)的標(biāo)準(zhǔn)版,J2EE不僅鞏固了標(biāo)準(zhǔn)版中的許多優(yōu)點(diǎn),例如“編寫一次、到處運(yùn)行”的特性、方便存取數(shù)據(jù)庫(kù)的JDBC API、CORBA技術(shù)以及能夠在Internet應(yīng)用中保護(hù)數(shù)據(jù)的安全模式等等,同時(shí)還提供了對(duì)EJB(Enterprise JavaBeans)、Java ServletsAPI、JSP(Java Server Pages)以及XML技術(shù)的全面支持。
Sun公司在企業(yè)版中增加了一整套核心企業(yè)應(yīng)用程序編程界面,而所有這些界面均為標(biāo)準(zhǔn)的模塊化組件。J2EE技術(shù)還為這些組件提供一整套企業(yè)服務(wù),通過自動(dòng)化的方式完成應(yīng)用程序開發(fā)中的諸多耗時(shí)且費(fèi)力的艱難工作,為用戶提供一種可創(chuàng)建廣泛兼容的企業(yè)解決方案而無(wú)需進(jìn)行復(fù)雜編程的平臺(tái)。利用這一優(yōu)勢(shì)可以方便地開發(fā)出高質(zhì)量的、適合企業(yè)使用的應(yīng)用程序,還可極大地減少產(chǎn)品研發(fā)上市時(shí)間、成本和風(fēng)險(xiǎn)。
概括起來(lái),J2EE體系結(jié)構(gòu)的優(yōu)點(diǎn)是:
Java Servlet和JSP都要編譯為Java Class才作為Servlet運(yùn)行,因此執(zhí)行性能會(huì)明顯提高。
Java Servlet和JSP中可以完全使用Java進(jìn)行編程,可以完成許多簡(jiǎn)單的商業(yè)邏輯,特別是JSP,可以直接書寫HTML,因此簡(jiǎn)化了頁(yè)面的輸出,這樣就保留了腳本語(yǔ)言易于使用的優(yōu)點(diǎn)。
復(fù)雜的商業(yè)邏輯以組件的形式部署在EJBServer中。由于EJBServer提供了多種組件事務(wù)服務(wù),使系統(tǒng)更能夠應(yīng)付大量的并發(fā)用戶和管理復(fù)雜的事務(wù)邏輯。
EJBServer中集成的組件命名服務(wù)可以使組件位置透明化,簡(jiǎn)化了組件的部署和客戶端應(yīng)用的維護(hù)。
開發(fā)過程易于分工,可以由專人負(fù)責(zé)編寫組件,其他人組裝頁(yè)面。
J2EE平臺(tái)全面支持和實(shí)施XML,這種強(qiáng)大的組合可使XML具備跨平臺(tái)的兼容性,甚至用于對(duì)XML代碼進(jìn)行語(yǔ)法檢查和調(diào)試的工具也可與平臺(tái)無(wú)關(guān)。J2EE技術(shù)和XML技術(shù)分別是企業(yè)開發(fā)的陰陽(yáng)兩極,因?yàn)閄ML可實(shí)施獨(dú)立于平臺(tái)的數(shù)據(jù),而J2EE平臺(tái)則可實(shí)施獨(dú)立于平臺(tái)的解決方案。XML可通過移植的方式表現(xiàn)數(shù)據(jù),因此就對(duì)Java技術(shù)的可移植性構(gòu)成了補(bǔ)充。
基于J2EE結(jié)構(gòu)的實(shí)現(xiàn)方案是:JSP+JavaBeans/EJB+Servlet+JDBC。
5 實(shí)現(xiàn)案例
??? 筆者以Windows DNA方式做了一個(gè)實(shí)現(xiàn)案例:
此案例服務(wù)器站建立在Windows2000上,數(shù)據(jù)庫(kù)服務(wù)器選用的是SQLServer 6.5。數(shù)據(jù)庫(kù)中存放了大量的單位基本信息,經(jīng)過身份確認(rèn)的用戶可以根據(jù)各自不同的需求對(duì)這些數(shù)據(jù)進(jìn)行相應(yīng)的操作,如數(shù)據(jù)的上報(bào),查詢等。案例中主要用到了ASP和JavaScript等方法。
5.1 建立連接
為了建立與數(shù)據(jù)庫(kù)的連接,可以通過兩種方式:一種是建立DNS,另一種是OLE DB。這里我們用了DNS方式建立了一個(gè)SQL的數(shù)據(jù)源Convote。一個(gè)DSN連接通常需要的參數(shù)有:DSN名,用戶名,口令,例如我們用用戶名“users”,口令“pass”,通過DSN
連接數(shù)據(jù)庫(kù)。
5.2 用戶登陸
用戶輸入用戶名和密碼后提交,用下列語(yǔ)句取得用戶信息:
取得用戶名和密碼后與數(shù)據(jù)庫(kù)內(nèi)的用戶名和密碼進(jìn)行比較,正確的可以進(jìn)入系統(tǒng),否則提示出錯(cuò)。
5.3 數(shù)據(jù)查詢
與數(shù)據(jù)庫(kù)的連接結(jié)束后一定要關(guān)閉連接:conntemp.close()
5.5 ActiveX控件
當(dāng)用戶的需求用Script無(wú)法滿足時(shí),我們常常要用到Java Applet和MSActiveX控件。這里,就MSActiveX控件有個(gè)實(shí)例。ActiveX控件把主機(jī)應(yīng)用程序顯示和操作組件所需的附加支持包含在GUI環(huán)境中,還可以把OCX組件放在網(wǎng)頁(yè)當(dāng)中。
如當(dāng)用戶需要在客戶端進(jìn)行IC卡的讀寫時(shí),由于IC卡的讀寫是較復(fù)雜的程序,單純用Script語(yǔ)句根本就無(wú)法實(shí)現(xiàn)此功能。此時(shí)我們就需要用到ActiveX控件。用VB編寫了一個(gè)ActiveX OCX,把它嵌入HTML中,讓第一次訪問的用戶隨頁(yè)面一起下載,同時(shí)OCX所要調(diào)用的DLL也隨著OCX一起下載到客戶端,于是控件在客戶端就可以執(zhí)行起來(lái)。
這里我們使用的是Asp頁(yè)面靜態(tài)調(diào)用ActiveX控件的方法:
之后,就可以在ASP語(yǔ)句中使用此ActiveX組件的幾個(gè)方法了。
讀卡界面如圖3所示。
??? 點(diǎn)擊讀卡,則可以讀出卡內(nèi)信息,如圖4所示。
??? 總之,B/S模式應(yīng)是今后的發(fā)展方向。
評(píng)論
查看更多