




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、試談?dòng)肑AVA實(shí)現(xiàn)三層體系結(jié)構(gòu)中用戶層與應(yīng)用層摘要:近些年來應(yīng)用程序使用多層體系結(jié)構(gòu)來設(shè)計(jì)已經(jīng)越來越普遍。本文從使用JAVA的角度來論述了三層結(jié)構(gòu)中優(yōu)點(diǎn)和實(shí)現(xiàn)應(yīng)用服務(wù)器層和用戶層的方法和手段。關(guān)鍵字:三層體系結(jié)構(gòu),用戶層,應(yīng)用服務(wù)器層,一.三層結(jié)構(gòu)的簡(jiǎn)單描述及優(yōu)點(diǎn)三層體系結(jié)構(gòu),即用戶層、應(yīng)用層和數(shù)據(jù)庫(kù)服務(wù)器。用戶層主要指用戶界面,它要求盡可能的簡(jiǎn)單,使最終用戶不需要進(jìn)行任何培訓(xùn)就能方便地訪問信息;第二層就是應(yīng)用服務(wù)器,也就是常說的中間件,所有的應(yīng)用系統(tǒng)、應(yīng)用邏輯、控制都在這一層,系統(tǒng)的復(fù)雜性也主要體現(xiàn)在應(yīng)用層;最后的數(shù)據(jù)庫(kù)服務(wù)器存儲(chǔ)大量的數(shù)據(jù)信息和數(shù)據(jù)邏輯,所有與數(shù)據(jù)有關(guān)的安全、完整性控制、數(shù)
2、據(jù)的一致性、并發(fā)操作等都是在第三層完成。采用JAVA的三(N)層結(jié)構(gòu)的優(yōu)點(diǎn)1 .能有效降低建設(shè)和維護(hù)成本,簡(jiǎn)化管理多層應(yīng)用結(jié)構(gòu)在各層次上的組件能單獨(dú)更新、替換或增加、拆除。因此,系統(tǒng)維護(hù)更方便,代價(jià)相對(duì)低得多。而且,因各組件互相獨(dú)立,更換組件就好比更換組合音響的一個(gè)部件,對(duì)系統(tǒng)其它部分并無影響,所以更新維護(hù)更加安全可靠??蛻舳瞬捎檬菘蛻魴C(jī)。因?yàn)?,客戶機(jī)不必進(jìn)行大量的計(jì)算或數(shù)據(jù)處理,它的硬件配置就不需要太高。通過將業(yè)務(wù)邏輯集中到中間層,系統(tǒng)獲得了對(duì)業(yè)務(wù)邏輯的獨(dú)立性,即當(dāng)用戶的需求改變時(shí),開發(fā)人員可以迅速地在中間層(應(yīng)用服務(wù)器)上更新業(yè)務(wù)邏輯,而無需將更新后的應(yīng)用提交到眾多的PC終端系統(tǒng)上去,即客
3、戶端無需任何改動(dòng)(改動(dòng)眾多的客戶端并不是件輕松的事)。2 .適應(yīng)大規(guī)模和復(fù)雜的應(yīng)用需求如果說結(jié)構(gòu)化方法使軟件開發(fā)從一門手工藝術(shù)走向科學(xué)的工程方法,組件技術(shù)則使軟件工程從個(gè)體作坊走向大規(guī)模工業(yè)。雖然,結(jié)構(gòu)化方法對(duì)中小型系統(tǒng)開發(fā)能夠行之有效,但對(duì)大型系統(tǒng),結(jié)構(gòu)化分析的結(jié)果往往是錯(cuò)綜復(fù)雜的網(wǎng)狀結(jié)構(gòu),而不是結(jié)構(gòu)清晰的層次結(jié)構(gòu)。這也正是面向?qū)ο蠓椒▽W(xué)誕生的原因。組件技術(shù)能使復(fù)雜系統(tǒng)的設(shè)計(jì)變得簡(jiǎn)單可行,具有良好的伸縮性。三層或多層結(jié)構(gòu),可以將數(shù)據(jù)處理從客戶端轉(zhuǎn)移到應(yīng)用服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器上。這樣,盡管客戶端與應(yīng)用服務(wù)器之間可能存在著多個(gè)甚至數(shù)百個(gè)的連接,但是應(yīng)用服務(wù)器與數(shù)據(jù)庫(kù)服務(wù)器之間的連接卻只有少數(shù)幾個(gè)
4、,從而達(dá)到減少通信線路上傳遞的數(shù)據(jù)量的目標(biāo)。這樣的功能分配提供了很強(qiáng)的系統(tǒng)可伸縮性,使得在用戶數(shù)量急劇增加時(shí)還能保持系統(tǒng)性能的穩(wěn)定。即使在用戶數(shù)量很大的情況下,數(shù)據(jù)庫(kù)仍能保持良好的工作負(fù)載,保持系統(tǒng)的快速的響應(yīng)速度。3 .可適應(yīng)不斷的變化和新的業(yè)務(wù)需求任何應(yīng)用系統(tǒng)實(shí)施的重點(diǎn)不在于需求確定以后能否實(shí)現(xiàn)這些需求,而是在系統(tǒng)實(shí)施后如何適應(yīng)變化的需求。JAVA系統(tǒng)結(jié)構(gòu)和組件式系統(tǒng)的開發(fā)和維護(hù)過程中,技術(shù)人員可以按照新的需求,通過在不同系統(tǒng)層次上調(diào)度更新的組件或新加入的組件來調(diào)整舊的系統(tǒng),以適應(yīng)新的與不斷變化的要求。以往的系統(tǒng)只能靠專業(yè)維護(hù)人員或系統(tǒng)開發(fā)商的再次開發(fā)或修改原有系統(tǒng),才能滿足新的需求,代價(jià)
5、往往很大,無法保證時(shí)間上的要求。4 .訪問異構(gòu)數(shù)據(jù)庫(kù)多層結(jié)構(gòu)的中間層即應(yīng)用服務(wù)器能夠提供廣泛的異構(gòu)數(shù)據(jù)庫(kù)訪問和復(fù)制能力。傳統(tǒng)的客戶機(jī)/服務(wù)器結(jié)構(gòu)則需要在客戶端安裝許多訪問異構(gòu)數(shù)據(jù)庫(kù)的驅(qū)動(dòng)程序,而三層/多層結(jié)構(gòu)只要在中間層有相應(yīng)的驅(qū)動(dòng)程序就可以訪問異構(gòu)數(shù)據(jù)源。5 .能有效提高系統(tǒng)并發(fā)處理能力傳統(tǒng)的一體化集中式系統(tǒng)或客戶服務(wù)器架構(gòu),在處理大信息量業(yè)務(wù)時(shí),都可能形成瓶頸。而多層體系架構(gòu)的組件式系統(tǒng)將界面、界面發(fā)布、業(yè)務(wù)應(yīng)用邏輯及數(shù)據(jù)存儲(chǔ)分為多個(gè)層次分散管理,邏輯或物理地將它們分開,可減輕系統(tǒng)壓力,提高整體性能。并且中間層可以采取多機(jī)并行的方式,相互備份的方式,保證系統(tǒng)的高可用性。一般情況下進(jìn)行數(shù)據(jù)分
6、析時(shí),每次查詢可能涉及到大量的數(shù)據(jù),往往需要較長(zhǎng)的響應(yīng)時(shí)間,特別在分布式數(shù)據(jù)環(huán)境下,響應(yīng)時(shí)間有時(shí)長(zhǎng)得令人難以忍受。三層(多)層結(jié)構(gòu)提供了客戶端與服務(wù)器之間的異步通信,使得客戶不必等待提交的分析處理結(jié)果而可以繼續(xù)執(zhí)行其他處理任務(wù)。6 .能有效提高系統(tǒng)安全性多層體系結(jié)構(gòu)將數(shù)據(jù)與程序、數(shù)據(jù)控制與應(yīng)用邏輯分層獨(dú)立管理,能更嚴(yán)格地控制信息訪問;信息傳遞中采用數(shù)據(jù)加密技術(shù),可進(jìn)一步減低信息失密的風(fēng)險(xiǎn)。應(yīng)用服務(wù)器內(nèi)建安全控制數(shù)據(jù)庫(kù),實(shí)現(xiàn)應(yīng)用服務(wù)器與數(shù)據(jù)服務(wù)器的雙重權(quán)限控制,對(duì)權(quán)限的劃分更準(zhǔn)確、靈活、嚴(yán)格。新系統(tǒng)在信息訪問、傳遞和存儲(chǔ)三個(gè)環(huán)節(jié)上均有嚴(yán)格的安全措施。由于利用JAVA的三層結(jié)構(gòu)具有這么多的優(yōu)點(diǎn),以
7、至于它的應(yīng)用越來越廣,現(xiàn)在幾乎所有的Web服務(wù)器都采用三(N)層結(jié)構(gòu),所以怎樣采用JAVA實(shí)現(xiàn)三(N)層體系結(jié)構(gòu)成了當(dāng)今程序員希望掌握的一個(gè)熱點(diǎn)。二.利用JAVA實(shí)現(xiàn)三層體系結(jié)構(gòu)中的中間層:服務(wù)器應(yīng)用層。1創(chuàng)建服務(wù)器創(chuàng)建一個(gè)Server類從Thread類繼承過來。聲明一個(gè)ServerSocketM象監(jiān)聽客戶請(qǐng)求。Server類的構(gòu)造函數(shù)創(chuàng)建和啟動(dòng)ServerSocket線程。如果在啟動(dòng)服務(wù)器時(shí)引發(fā)異常,將會(huì)產(chǎn)生一個(gè)出錯(cuò)信息。此構(gòu)造函數(shù)的代碼如下:PublicServer。tryserverSocket=newServerSocket(1001);catch(IoExceptione)fail(
8、e,"Couldnotstartserver");)System.out.println(Serverstarted");This.start();)2實(shí)現(xiàn)監(jiān)聽客戶請(qǐng)求服務(wù)器的run()方法和實(shí)現(xiàn)Runnable接口的所有線程一樣,擁有線程的指令。在這種情況下,服務(wù)器進(jìn)入了個(gè)無限循環(huán)并監(jiān)聽客戶請(qǐng)求。當(dāng)服務(wù)器安全連接到客戶機(jī)時(shí),ServerSocket類的accept()方法接收此連接。服務(wù)器為客戶機(jī)創(chuàng)建一個(gè)用戶定義的類Connection的對(duì)象,將一個(gè)Socket對(duì)象傳入構(gòu)造函數(shù)??蛻魴C(jī)和服務(wù)器之間的通訊通過這個(gè)套接字發(fā)生。run()方法的代碼如下:Publicv
9、oidrun()trywhile(ture)Socketclient=serverSocket.accept();Connectioncon=newConnection(client);)catch(IoExceptione)fail(e,"Notlistening");)3啟動(dòng)服務(wù)器main()方法的代碼如下。它創(chuàng)建了一個(gè)啟動(dòng)線程的Server類的對(duì)象。Publicstaticvoidmain(Stringargs)newServer();)Connection線程以下代碼片段描述了Connection類.ClassConnectionextendsThreadprote
10、ctedSocketnetClient;protectedbufferedReaderfromClient;protectedPrintStreamtoClient;publicconnection(Socketclient)try(fromClient=newBufferedReader(newInputStreamReader(newClient.getInputStream();toClient=newPrintStream(newClient.getOutStream();catch(IoExceptione)(try(netClient.close();catch(IoExcepti
11、one1)(System.err.println(Unabletosetupstreams"+e1);Return;this.start();publicvoidrun()(Stringlogin,password;Try(for(;)(toClient.println(Login:");login=fromClient.readLine();if(logion=null)break;toClient.println(Welcome!Entercommand:");catch(IoExceptione)(finally(try(netClient.close();
12、catch(loExceptione)()Connection類創(chuàng)建一個(gè)BufferedReader對(duì)象(fromClient)和一個(gè)Printstream對(duì)象(toClient)0FromClient使用getInputStream()方法檢索客戶端的輸入:toClient使用getOutPutStream()方法使得服務(wù)器可以把輸出寫到客戶端。這樣一來;就開始了雙工通訊。當(dāng)客戶連接到服務(wù)器時(shí),服務(wù)器使用toClient對(duì)象的Println()方法將"Login:"寫到套接字上,它使用readLien()方法將客戶機(jī)發(fā)送的登陸ID存入字符串變量Login.println(
13、)方法用于將"Password,。提示寫到套接字上.然后,服務(wù)器再次調(diào)用readLine()將用戶輸入存入另一個(gè)變量password服務(wù)器中可以有一個(gè)驗(yàn)證登陸ID和口令以加密的格式存儲(chǔ),這將是解密的地方如果用戶是經(jīng)過授權(quán)的,就可以使用已經(jīng)建立流對(duì)象開始對(duì)話。到了注銷的時(shí)候,服務(wù)器中斷循環(huán).這引起finally程序塊的執(zhí)行,關(guān)閉客戶套接字.關(guān)閉套接字是很關(guān)鍵的,如果讓連接開著,很快就將耗盡服務(wù)器的內(nèi)存.finally程序塊確保連接的關(guān)閉。注意:服務(wù)器是多線程的,每個(gè)客戶都要從服務(wù)器得到它自己的線程。三.利用JAVA實(shí)現(xiàn)三層體系結(jié)構(gòu)中的用戶層。.*;importjava.io.*;pub
14、licclassClient(publicstaticvoidmain(Stringstr)(Socketsocket;Printstreamout=null;BufferedReaderin=null;Try(socket=newSocket(1'”,1001);out=newPrintStream(socket.getOutputStream();in=newBufferedReader(newInputStreamReader(socket.getInputStream();)catch(UnknownHostExceptione)(System.out.p
15、rintln(Unknownhostname');System.exit(l);catch(IOExceptione)(System.out.println(I/Oerror');System.exit(l);BufferedReadersdtin=newBufferedReader(newInputStreamReader(System.in);Stringlogin=in.readLine();System.out.println(login);StringlogName=stdin.readLine();out.println(logName);Stringpassword=in.readLine();System.out.println(password);Stringpass=stdin.readLine();out.println(pass);Stringstr=in.readLing();System.out.println(str);while(str=stdin.readLine()!=null)(out.println(str);if(str.equal(byebye')break;out.close();in.close();stdin.c
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度健康醫(yī)療大數(shù)據(jù)預(yù)付款全新合作協(xié)議
- 二零二五年度幼兒園保育員聘用合同書-幼兒教育創(chuàng)新項(xiàng)目合作
- 二零二五年度環(huán)保咨詢服務(wù)營(yíng)業(yè)執(zhí)照轉(zhuǎn)讓合同
- 二零二五年度一手房購(gòu)房意向金預(yù)定合同
- 2025年度有限責(zé)任公司股東離任協(xié)議書
- 二零二五年度拆除房屋及土地回收合同范本
- 二零二五年度學(xué)校食堂承包經(jīng)營(yíng)與服務(wù)滿意度提升協(xié)議
- 二零二五年度離職后商業(yè)秘密保護(hù)及競(jìng)業(yè)限制合同
- 二零二五年度房屋維修安全責(zé)任保險(xiǎn)協(xié)議
- 二零二五年度美容院養(yǎng)生保健入股合同協(xié)議
- 2024年黑龍江職業(yè)學(xué)院高職單招語文歷年參考題庫(kù)含答案解析
- 股指期貨基礎(chǔ)知識(shí)介紹培訓(xùn)課件
- 2024年北京東城社區(qū)工作者招聘筆試真題
- 2025中智集團(tuán)招聘重要崗位高頻重點(diǎn)提升(共500題)附帶答案詳解
- xx學(xué)校培訓(xùn)部工作職責(zé)
- T-GXAR 005-2024 制冷機(jī)房運(yùn)行維護(hù)規(guī)程
- 開工第一課安全培訓(xùn)總結(jié)精彩
- 二級(jí)WPS Office高級(jí)應(yīng)用與設(shè)計(jì)計(jì)算機(jī)等級(jí)考試試題與參考答案(2024年)
- 電子商務(wù)專業(yè)綜合技能測(cè)試題(附參考答案)
- 前程無憂測(cè)評(píng)題庫(kù)及答案
- 全腦血管造影術(shù)的護(hù)理查房
評(píng)論
0/150
提交評(píng)論