基于java的web服務(wù)器畢業(yè)論文_第1頁
已閱讀1頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、<p>  基于JAVA的web服務(wù)器</p><p>  摘 要:應(yīng)用服務(wù)器是當前基于Web的軟件開發(fā)的重要的支撐平臺。本文通過研究Web應(yīng)用服務(wù)器的功能需求以及基于組件的軟件開發(fā)模式,結(jié)合JAVA規(guī)范和超文本傳輸協(xié)議,設(shè)計并實現(xiàn)了基于JAVA的Web應(yīng)用服務(wù)器—DM WAS,為Web客戶部署Web應(yīng)用程序提供支持,從而更加方便地使用DM的數(shù)據(jù)存儲和訪問服務(wù)。</p><p>

2、  關(guān)鍵字:JAVA;應(yīng)用服務(wù)器;超文本傳輸協(xié)議;多線程</p><p><b>  緒論</b></p><p><b>  1.1課題背景</b></p><p>  隨著信息處理流程越來越復(fù)雜,需要存取的數(shù)據(jù)量越來越龐大,數(shù)據(jù)庫逐漸成為存儲和處理數(shù)據(jù)的主要工具,它是許多公司整體業(yè)務(wù)結(jié)構(gòu)形成的基礎(chǔ)。在傳統(tǒng)的客戶機/服務(wù)

3、器兩層體系結(jié)構(gòu)中,應(yīng)用程序的處理在前臺的客戶端和后臺的數(shù)據(jù)庫服務(wù)器之間分擔,客戶端發(fā)出數(shù)據(jù)請求,服務(wù)器響應(yīng)并處理請求,把處理的結(jié)果再回送到發(fā)出請求的客戶端??蛻魴C/服務(wù)器結(jié)構(gòu)因為其靈活性得到了較廣泛的應(yīng)用,但對于大型軟件系統(tǒng)而言,這種結(jié)構(gòu)在系統(tǒng)的部署、可擴展性和可維護性方面還存在著不足,典型的有胖客戶機/瘦服務(wù)器和瘦客戶機/胖服務(wù)器體系結(jié)構(gòu)。Internet的發(fā)展給傳統(tǒng)應(yīng)用軟件的開發(fā)帶來了深刻的影響,基于Internet和Web的軟件和

4、應(yīng)用系統(tǒng)無疑需要更為開放和靈活的體系結(jié)構(gòu)。隨著Internet/Intranet技術(shù)的普及、電子商務(wù)技術(shù)的發(fā)展等,數(shù)據(jù)庫技術(shù)又面臨著新的挑戰(zhàn),一種新的、更具生命力的體系結(jié)構(gòu)被廣泛采用,這就是所謂的三層和多層應(yīng)用體系模型。一個典型的三層模型由前端客戶層、中間服務(wù)器層和后端數(shù)據(jù)庫層所組成,在這種模型中,業(yè)務(wù)邏輯被放到系統(tǒng)服務(wù)和用戶接口之間的中間層,從而使業(yè)務(wù)邏輯與用戶界面的表示層分開,同時與后端系統(tǒng)保持相對獨</p><

5、p>  在三層和多層應(yīng)用模型中,應(yīng)用服務(wù)器是最核心的基礎(chǔ)軟件,國際上許多著名的計算機公司和開放源碼組織紛紛推出了各自的產(chǎn)品和系統(tǒng),如IBM Websphere、BEAWeblogic、Oracle9iAS、SUN iPlanet、開放源碼JBoss和ENHYDRA等,這其中有很多是由數(shù)據(jù)庫廠家開發(fā)的,以便為企業(yè)應(yīng)用提供整體解決方案。</p><p>  DM數(shù)據(jù)庫管理系統(tǒng)是華中科技大學(xué)數(shù)據(jù)庫與多媒體技術(shù)研究

6、所研制的分布式多媒體數(shù)據(jù)庫管理系統(tǒng)。為了滿足DM數(shù)據(jù)庫在分布式環(huán)境下,特別是多層應(yīng)用軟件體系結(jié)構(gòu)中企業(yè)級應(yīng)用的需求,搶占數(shù)據(jù)庫管理系統(tǒng)前沿技術(shù)的制高點,研發(fā)支持可擴展標記語言(Extensible Markup Language,XML)的數(shù)據(jù)庫管理系統(tǒng)XDM4和支持XML、符合Java規(guī)范的Web應(yīng)用服務(wù)器已成為DM下一步的目標。正是在這一背景下,本課題提出開發(fā)支持JAVA標準的Web應(yīng)用服務(wù)器,為基于Java、XML和數(shù)據(jù)庫的Web

7、應(yīng)用提供存儲、查詢、發(fā)布數(shù)據(jù)的能力,并提供部署、運行應(yīng)用的環(huán)境。</p><p>  1.2 Web應(yīng)用服務(wù)器的定義及功能</p><p>  1.2.1. Web基本概念</p><p>  WWW采用Web頁面的方式進行信息的存儲與傳遞,Web信息存儲在Web站點上,用戶通過Web瀏覽器訪問頁面。Web頁面是由HTML語言編寫,并由瀏覽器翻譯解釋的。建立Web的

8、愿望是通過易于使用的超文本接口,提供通過的文件共享。完整的Web結(jié)構(gòu)應(yīng)包括:HTTP協(xié)議、Web服務(wù)器、通用網(wǎng)關(guān)接口、Web應(yīng)用程序接口、Web瀏覽器。Web體系結(jié)構(gòu)如圖2-1所示。</p><p>  圖2-1 Web體系結(jié)構(gòu)</p><p>  HTTP協(xié)議:HTTP(Hyptertext Transfer Protocol)就是超文本傳輸協(xié)議,是WWW服務(wù)的支撐協(xié)議,它實現(xiàn)了服務(wù)器和

9、客戶機間信息交流。Web以兩個主要的協(xié)議為基礎(chǔ)即HTTP及TCP/IP協(xié)議。HTTP用于Web瀏覽器與Web服務(wù)器之間的數(shù)據(jù)交換,瀏覽器使用超文本標記語言HTML;TCP/IP為網(wǎng)絡(luò)傳輸控制協(xié)議。HTTP協(xié)議工作在TCP協(xié)議之上,在很多方面,理解HTTP協(xié)議是理解Web的關(guān)鍵。</p><p>  Web服務(wù)器:是指駐留在因特網(wǎng)上某種類型計算機的程序。它是在網(wǎng)絡(luò)中信息提供者基于HTTP的為實現(xiàn)信息發(fā)布、資料查詢、

10、數(shù)據(jù)處理等諸多應(yīng)用搭建基本平臺的服務(wù)器,其主要功能是提供網(wǎng)上信息瀏覽服務(wù)。</p><p>  通用網(wǎng)關(guān)接口(CGI):Common Gateway Interface的簡稱,是在Web服務(wù)器端的一個通用接口,用來調(diào)用外部程序進行計數(shù)、查詢數(shù)據(jù)庫、生成定制的圖像,或完成其他任務(wù)。其主要的功能是在WWW環(huán)境下,從客戶端傳遞一些訊息給Web服務(wù)器,再由Web服務(wù)器去啟動所指定的程序來完成特定的工作。</p>

11、;<p>  Web應(yīng)用程序接口:Web應(yīng)用程序是運行在服務(wù)器端的可執(zhí)行程序或動態(tài)連接庫。它們可以響應(yīng)用戶要求,動態(tài)產(chǎn)生超文本頁面,并將信息提供給客戶瀏覽器。Web應(yīng)用程序接口就是一組函數(shù),可以幫助開發(fā)者借助服務(wù)器配置文件中的指令來創(chuàng)建自己的應(yīng)用程序。這些指令就是服務(wù)器執(zhí)行一個請求的步驟,包括訪問授權(quán)、根據(jù)文件根目錄的路徑轉(zhuǎn)換、存在性驗證、文件類型判別以及服務(wù)器的正確執(zhí)行。</p><p>  We

12、b瀏覽器:Web瀏覽器用于通過URL(Uniform Resource Locator,同一資源定位符)來獲取并顯示W(wǎng)eb網(wǎng)頁的一種軟件工具。在Windows環(huán)境中較為流行的Web瀏覽器為Netscape Navigator和Internet Explorer。用戶也可在AutoCAD等軟件的系統(tǒng)內(nèi)部直接調(diào)用Web瀏覽器進入Web網(wǎng)絡(luò)世界。</p><p>  1.2.2 Web的工作機制</p>

13、<p>  Web系統(tǒng)的工作主要就是進行Web頁面的交互,一個典型的Web頁面有一個基礎(chǔ)頁面和內(nèi)嵌的資源對象組成?;A(chǔ)頁面一般按照標準的語法結(jié)構(gòu)——超文本標記語言(HTML)書寫,而內(nèi)嵌資源(圖象、聲音等)的統(tǒng)一資源定位符(URL)則按一定格式包含在基礎(chǔ)頁面之內(nèi)[1]。這里從用戶的角度來描述Web頁面的交互過程。為了顯示用戶所制定的一個頁面,瀏覽器需要完成下列步驟:</p><p>  1.瀏覽器首先需

14、要對URL中所包含的服務(wù)器名進行域名解析;</p><p>  2.服務(wù)器與瀏覽器建立一條到該IP地址的TCP連接,這段時間稱為連接建</p><p><b>  立時間;</b></p><p>  3.瀏覽器在該TCP連接上向服務(wù)器發(fā)送HTTP請求,從瀏覽器發(fā)送請求到它收到第一個響應(yīng)IP包的時間稱為請求及響應(yīng)時間;</p>&

15、lt;p>  4.如HTTP響應(yīng)的消息多于一個包,從瀏覽器收到第一個IP包到它收到所有IP包之間的時間稱為傳送時間;</p><p>  5.在瀏覽器得到完整的響應(yīng)消息后,基礎(chǔ)頁面的傳送就結(jié)束了,而瀏覽器需要分析所獲得的頁面,并提取出其中包含的資源對象的URL;</p><p>  6.在得到所有的內(nèi)嵌資源后,瀏覽器根據(jù)具體的格式(HTML、聲音、圖片、動畫等)解釋這些資源,并把它們

16、傳送給用戶。</p><p>  圖2-2表示了獲取一個Web頁面的過程。</p><p>  圖2-2獲取Web頁面的過程</p><p>  由Web的結(jié)構(gòu)以及工作過程可以看出,Web服務(wù)器是整個Web系統(tǒng)的重要組成部分,在Web系統(tǒng)的頁面交互的過程中也占有舉足輕重的作用。因此,改善Web系統(tǒng)的性能,其中關(guān)鍵的一環(huán)就是提高Web服務(wù)器的性能,如何優(yōu)化Web服務(wù)器

17、的性能也就成了人們一直以來在提高Web性能方面共同關(guān)注的課題。</p><p>  1.2.3 Web應(yīng)用服務(wù)器</p><p>  Web應(yīng)用服務(wù)器是Web計算環(huán)境下產(chǎn)生的新型中間件,為創(chuàng)建、部署、運行、集成和管理事務(wù)性Web應(yīng)用提供了一個跨平臺的運行環(huán)境。</p><p>  近年來,許多研究人員、組織機構(gòu)對Web應(yīng)用服務(wù)器分別提出了不同的定義,但到目前為止,W

18、eb應(yīng)用服務(wù)器仍然沒有一個完全統(tǒng)一的定義。</p><p>  C.Mohan在文獻中認為,應(yīng)用服務(wù)器是傳統(tǒng)事務(wù)處理監(jiān)控器(transaction processing monitor)在Web環(huán)境下的現(xiàn)代等同物,是事務(wù)性服務(wù)在線應(yīng)用的執(zhí)行平臺,將現(xiàn)代的應(yīng)用環(huán)境與歷史遺留數(shù)據(jù)源集成是應(yīng)用服務(wù)器最重要的特征之一。</p><p>  Ritter在文獻中認為,應(yīng)用服務(wù)器是位于以瀏覽器為基礎(chǔ)的

19、前端和歷史遺留應(yīng)用的后端之間的、基于組件的服務(wù)器端軟件,它高速存取后端系統(tǒng)的信息,處理業(yè)務(wù)邏輯,集成企業(yè)計算中的資源和應(yīng)用,為安全、狀態(tài)維護、數(shù)據(jù)訪問、數(shù)據(jù)存取提供中間件服務(wù)。</p><p>  文獻認為應(yīng)用服務(wù)器是為創(chuàng)建、部署、運行、集成和管理事務(wù)性Web應(yīng)用提供一系列運行時服務(wù)(如消息、事務(wù)、安全、應(yīng)用集成等)的可伸縮、高可用、高可靠、高效的中間件平臺。應(yīng)用服務(wù)器需滿足Web計算的特定需求,所以,應(yīng)用服務(wù)器

20、通常同時具有Web服務(wù)器的功能,亦稱為Web應(yīng)用服務(wù)器。</p><p>  每種定義有其側(cè)重的方向,一般來說,Web應(yīng)用服務(wù)器應(yīng)具有幾個大的功能。</p><p><b>  1.業(yè)務(wù)邏輯處理3</b></p><p>  業(yè)務(wù)邏輯是用戶為完成某項功能所部署的應(yīng)用程序組件。處理業(yè)務(wù)邏輯是應(yīng)用服務(wù)器的主要功能。與應(yīng)用程序相關(guān)的業(yè)務(wù)邏輯可以由可重

21、用組件組成,而不需要每個開發(fā)者自己開發(fā)。一旦組件被創(chuàng)建,就可以被部署到應(yīng)用服務(wù)器中運行。大多數(shù)應(yīng)用服務(wù)器提供某種機制用于指定組件的持久性、事務(wù)處理和安全性等。</p><p><b>  2.數(shù)據(jù)訪問</b></p><p>  應(yīng)用服務(wù)器提供一整套數(shù)據(jù)訪問機制,用于管理與關(guān)系型數(shù)據(jù)庫(如Oracle,SQL Server)的連接。開發(fā)人員只需要提供必要的連接參數(shù)就可

22、以透明地訪問數(shù)據(jù)源而不需要知道訪問具體是如何實現(xiàn)的。</p><p><b>  3.事務(wù)管理</b></p><p>  事務(wù)處理是企業(yè)計算中最重要的內(nèi)容之一。過去,Web開發(fā)人員和應(yīng)用程序開發(fā)人員習慣于自己完成數(shù)據(jù)庫事務(wù)管理。對于沒有經(jīng)驗的開發(fā)人員來說,自己控制事務(wù)既煩瑣而且又容易出錯。而在應(yīng)用服務(wù)器環(huán)境中,開發(fā)人員所要關(guān)心的只是業(yè)務(wù)邏輯的實現(xiàn),有關(guān)數(shù)據(jù)庫的事務(wù)處

23、理應(yīng)交由應(yīng)用服務(wù)器管理。應(yīng)用服務(wù)器提供不同級別的事務(wù)控制,以滿足開發(fā)人員的不同需求。</p><p><b>  4.狀態(tài)和會話管理</b></p><p>  應(yīng)用服務(wù)器必須在同一用戶會話過程的多次請求之間維護有關(guān)的狀態(tài)數(shù)據(jù)。在應(yīng)用服務(wù)器環(huán)境中,應(yīng)用服務(wù)器一般是通過會話對象來保持用戶狀態(tài)數(shù)據(jù)的。</p><p>  會話對象的唯一功能就是保存

24、服務(wù)器端的數(shù)據(jù),它使那些存在安全風險的數(shù)據(jù)遠離瀏覽器端,從而保證了系統(tǒng)的安全性。</p><p><b>  5.安全服務(wù)</b></p><p>  為了獲得對資源的訪問權(quán),客戶端必須通過服務(wù)器的認證,因此應(yīng)用服務(wù)器必須要有驗證用戶的安全設(shè)施。大多數(shù)服務(wù)器采用基于角色的訪問控制機制。</p><p>  此外,也有一些服務(wù)器提供對安全服務(wù)的驗

25、證(如操作系統(tǒng),LDAP等),更高級的安全通過用戶主機上數(shù)字認證的使用來實現(xiàn)。一旦用戶身份被驗證,服務(wù)器將允許或禁止該用戶訪問組件和服務(wù)器所管理的數(shù)據(jù)庫連接等。</p><p><b>  6.數(shù)據(jù)庫連接池</b></p><p>  基于Web應(yīng)用服務(wù)器的應(yīng)用開發(fā)不可避免地要訪問數(shù)據(jù)庫。當客戶端在頁面中請求數(shù)據(jù)或更新數(shù)據(jù)時,服務(wù)器必須連接數(shù)據(jù)庫以完成工作。如果用戶每

26、次提交頁面時都要執(zhí)行數(shù)據(jù)庫的連接和斷開操作,系統(tǒng)的性能就會變得很差,因為在一個事務(wù)周期中建立到數(shù)據(jù)庫的連接是一個費時而又浪費系統(tǒng)資源的操作。應(yīng)用服務(wù)器通常采用數(shù)據(jù)庫連接池技術(shù)來優(yōu)化數(shù)據(jù)庫連接,它不為每一個用戶保持單獨連接,而是維護了一個連接池來緩存已有的數(shù)據(jù)庫連接。如果用戶需要查詢或更新數(shù)據(jù),相應(yīng)組件就會請求服務(wù)器從連接池中分配一個可用連接。當一個事務(wù)結(jié)束后,連接池收回該連接以待重用。</p><p>  7.負

27、載平衡和失敗恢復(fù)</p><p>  為了滿足Web計算環(huán)境下大規(guī)模用戶的并發(fā)訪問,Web應(yīng)用服務(wù)器需要提供可信賴性、高伸縮性等特性,提高系統(tǒng)整體性能和吞吐量,這就要求服務(wù)器需提供某種負載平衡和失敗恢復(fù)機制。</p><p>  負載平衡意味著一組服務(wù)器可以被集中成為一個服務(wù)器集群。發(fā)往服務(wù)器的</p><p>  請求被一個代理服務(wù)器處理后委派給服務(wù)器集群中最空閑

28、的服務(wù)器,此后發(fā)送該請求的客戶端將直接與那臺服務(wù)器通信。具有負載平衡機制的系統(tǒng)一般應(yīng)具有良好的擴展性,以便當客戶端請求負載的增加時,更多的服務(wù)器主機能夠被加入到服務(wù)器集群中。</p><p>  失敗恢復(fù)機制增強了服務(wù)器的容錯性。如果集群內(nèi)某臺服務(wù)器失效停機,新的請求將被重新分配給其它某臺服務(wù)器。簡單的失敗恢復(fù)不能解決所有問題,如果在某項任務(wù)的執(zhí)行過程中服務(wù)器停機,負載平衡機制將會發(fā)現(xiàn)這個問題并將該任務(wù)重新分配給

29、其它服務(wù)器,但是請求該任務(wù)的用戶的狀態(tài)和會話數(shù)據(jù)將對新服務(wù)器不再可用。正因為這個缺陷,有的應(yīng)用服務(wù)器提供會話級失敗恢復(fù),狀態(tài)和會話數(shù)據(jù)將被復(fù)制給集群內(nèi)其它服務(wù)器或是被存儲在永久性存儲介質(zhì)(如數(shù)據(jù)庫)中,使用戶數(shù)據(jù)對每個服務(wù)器總是保持可用。</p><p>  1.3 JAVA簡介與技術(shù)</p><p>  1.3.1 JAVA簡介</p><p>  Java的誕生

30、需追溯到1991年。當時,在Sun公司內(nèi),有一個稱為Green的項目,這個項目的工程師受命設(shè)計一種小型的計算機語言,用于機頂盒、家電控制芯片等消費類設(shè)備。但是1993年交互式電視及PDA市場開始滑坡,而Internet開始盛行,Sun公司將市場目標投向Internet。1994年,原來的項目組編寫了一個HotJava瀏覽器,當時正是這個瀏覽器吸引了全世界的眼球,1995年秋,Netscape決定讓其瀏覽器支持Java,并在1996年年初

31、發(fā)布了支持Java的版本。這意味著Java語言開始流行起來。后來,IBM、Oracle、Symantec、BEA、Inprise等許多著名IT公司都注冊了Java使用許可證,甚至心不甘、情不愿的Microsoft也開始支持Java,Java逐漸成為了一個工業(yè)標準。</p><p>  Sun于1996年年初發(fā)布了Java的第一個版本,在1998年召開的JavaOne大會上,又發(fā)布了Java 1.2版,這就是常說的

32、Java 2,它以功能全面、具有高度擴展能力的新版本換掉了原來的GUI界面和圖形工具包。朝著“一次編寫,到處運行”的宏偉目標又前進了一大步。</p><p>  1999年,Sun宣布了以Java 2平臺為核心的JAVA、J2SE和J2ME三大平臺。今天,這三大平臺迅速推進,滿足著不斷增長的市場需求。2002年2月,Sun發(fā)布了J2SE 1.4版,成為最具競爭優(yōu)勢的企業(yè)級應(yīng)用與服務(wù)的快速開發(fā)平臺。該產(chǎn)品已通過中文

33、編碼國家標準GB18030的檢測,標志著Java開發(fā)將在中國提速。</p><p>  2002年9月,JAVA 1.4在日本JavaOne開發(fā)者大會上預(yù)演,并于2003年第一季度正式交付客戶使用。而J2ME平臺已被全球20多家頂尖的手機生產(chǎn)商在100多種不同類型的Java手機中采用。</p><p>  2004年10月,Sun公司正式發(fā)布JDK 5.0版。作為通過JCP研發(fā)的最大規(guī)模的

34、項目之一,有大約160位專家成員參與了JDK 5.0版本的研發(fā)。JDK 5.0提供了100多個新特性,從易用性和各個破記錄的性能來看,JDK 5.0的推出被認為是Java平臺和編程語言近10年來最重大的升級。</p><p>  現(xiàn)今Java聯(lián)盟成員公司超過了400個,其中包括 Oracle、SAP、Sony、Motorola、Nokia、HP和Philips等。Java聯(lián)盟的Java開發(fā)者超過300萬。JAVA

35、下載量超過100萬,許可證接收方達35個。J2ME手機超過1 500萬部,應(yīng)用達5 000多個。</p><p>  1.3.2 Java的特點</p><p>  Java語言是一種優(yōu)秀的編程語言。它最大的優(yōu)點就是與平臺無關(guān),在Windows 2000、Windows XP、Solaris、Linux、Mac OS及其他平臺上,都可以使用相同的代碼?!耙淮尉帉?,到處運行”的特點,使得系統(tǒng)

36、的移植、平臺的遷移變得十分容易。</p><p>  Java語言的設(shè)計者借鑒了C++的設(shè)計,Java語言是完全面向?qū)ο蟮恼Z言,而C++至多只能算準“面向?qū)ο蟆钡恼Z言。Java語言的語法結(jié)構(gòu)與C++語言的語法結(jié)構(gòu)十分相似,這使得C++程序員學(xué)習Java語言相當容易。當然,如果僅僅是對C++改頭換面,那么就不會有今天Java熱鬧的場面了,但這種借鑒是取其精華、去其糟粕的“拿來主義”的借鑒。Java語言提供的許多有用

37、的新特性,使得Java語言比C++語言更易使用且不容易出錯。簡單地說,Java具有以下的特性:簡潔性、面向?qū)ο蟆⒎植际竭\算、健壯性、安全性,跨平臺、可移植。</p><p>  1.3.3 JAVA技術(shù)</p><p>  為了適應(yīng)多層分布式體系結(jié)構(gòu)的發(fā)展,人們相繼開發(fā)了很多應(yīng)用服務(wù)器產(chǎn)品。但不幸的是,大多數(shù)應(yīng)用服務(wù)器還沒有一個明確統(tǒng)一的標準,各個應(yīng)用服務(wù)器都是按照自己的模式來提供服務(wù)。這

38、就導(dǎo)致了開發(fā)人員不能夠?qū)橐环N應(yīng)用服務(wù)器開發(fā)的應(yīng)用程序組件安全可靠地移植到另外一種應(yīng)用服務(wù)器中。</p><p>  基于上述原因,業(yè)界迫切需要一個服務(wù)器端組件體系機構(gòu)的統(tǒng)一標準。這個統(tǒng)一標準需要明確定義出應(yīng)用程序組件所必須遵循的統(tǒng)一的接口,讓組件不再只能面向一種特定的應(yīng)用服務(wù)器,而是能夠在遵循相同標準的不同的應(yīng)用服務(wù)器間安全可靠地移植。組件供應(yīng)商因此不用再顧慮他們提供的組件與服務(wù)器的兼容性問題以及諸如運行時所需

39、要的安全、事務(wù)等服務(wù)和支持,從而可以專注于開發(fā)具體業(yè)務(wù)邏輯問題的解決方案。</p><p>  正是基于這樣的需求,JAVA應(yīng)運而生。JAVA是一種利用Java2平臺來簡化諸多與多級企業(yè)解決方案的開發(fā)、部署和管理相關(guān)的復(fù)雜問題的體系結(jié)構(gòu)。JAVA提供了多層分布式的應(yīng)用系統(tǒng)模型、重用組件的能力、統(tǒng)一的安全模型和靈活的事務(wù)控制?;诮M件的JAVA企業(yè)應(yīng)用系統(tǒng)具有平臺獨立性,所以不受任何軟件產(chǎn)品和任何軟件廠商應(yīng)用程序接

40、口(Application Program Interface,API)的約束。JAVA具有如下一系列明顯的優(yōu)點:</p><p>  1.JAVA是一個分布式應(yīng)用系統(tǒng)的平臺,幾乎包括了企業(yè)級應(yīng)用系統(tǒng)開發(fā)所需要的各種技術(shù);</p><p>  2. Java使得企業(yè)級應(yīng)用真正實現(xiàn)“一次開發(fā),到處運行”;</p><p>  3.由于JAVA是一個規(guī)范,任何遵循該規(guī)范

41、開發(fā)的應(yīng)用程序組件都能夠在實現(xiàn)了該規(guī)范的應(yīng)用服務(wù)器上方便的移植并得到重用;</p><p>  4.JAVA具有開放性和統(tǒng)一性,用戶不必再受具體軟硬件體系結(jié)構(gòu)的約束;</p><p>  5.JAVA提供了基于組件的開發(fā)技術(shù),使得企業(yè)級應(yīng)用程序的開發(fā)更加容易。</p><p>  基于Java和Web的企業(yè)級分布式應(yīng)用開發(fā)的標準,目前大多數(shù)主流應(yīng)用服務(wù)器都已經(jīng)支持J

42、AVA。JAVA包含多項核心技術(shù)。</p><p>  1.企業(yè)JavaBeans(Enterprise Java Beans,EJB)</p><p>  EJB是JAVA中最重要、最核心的部分,它是一種服務(wù)器端的組件模型。一個EJB是一個運行在應(yīng)用服務(wù)器端的非可視化的軟件組件。EJB提供了一個框架來開發(fā)和實施分布式業(yè)務(wù)邏輯,簡化了中間層的開發(fā),它通過提供對中間層服務(wù)的支持,如數(shù)據(jù)庫連接

43、、事務(wù)、安全等,顯著地簡化了具有可伸縮性和高度復(fù)雜性的企業(yè)級應(yīng)用的開發(fā)。</p><p>  EJB規(guī)范定義了四種基本的Bean類型。</p><p>  (1)無狀態(tài)會話Bean(Stateless session bean):它提供某種單一的服務(wù),不保存與特定客戶的對話狀態(tài),在服務(wù)器發(fā)生故障時無法繼續(xù)存在,其生命周期相對較短。</p><p>  (2)有狀態(tài)會

44、話Bean(Stateful session bean):它提供了一種保持會話狀態(tài)的服務(wù),每個實例都與特定的客戶機相關(guān)聯(lián),且只用于一個單一的線程,在與客戶機的方法調(diào)用之間維持對話狀態(tài)。有狀態(tài)會話Bean在服務(wù)器發(fā)生故障時無法繼續(xù)生存,生命周期相對較短。</p><p>  (3)實體Bean(Entity bean):它代表業(yè)務(wù)上的實體,包含與數(shù)據(jù)相關(guān)的邏輯。實體Bean一般與數(shù)據(jù)庫形成一種對象/關(guān)系映射,一個實

45、體Bean可以代表一個數(shù)據(jù)庫中存儲的對象。他們能夠通過一個主關(guān)鍵字來識別并可以被不同的客戶端所共享。EJB容器負責管理這些對象的持久性。實體Bean在服務(wù)器發(fā)生故障后能繼續(xù)存在。</p><p>  (4)消息驅(qū)動Bean(Message-Driver bean):它是EJB2.0新引入的一種Bean類型,用來監(jiān)聽消息的對象。消息驅(qū)動Bean在接收到Java消息服務(wù)(Java Message Service,JM

46、S)的消息后執(zhí)行,它們是事務(wù)可知的和無狀態(tài)的,一般用來執(zhí)行一些異步的方法調(diào)用。</p><p><b>  2.Servlet</b></p><p>  Servlet是一種獨立于平臺和協(xié)議的服務(wù)器端Java應(yīng)用程序,用來拓展基于請求響應(yīng)模式的服務(wù)器端的能力。Servlet位于Web服務(wù)器端,由Web服務(wù)器動態(tài)加載和卸載。Servlet具有多線程、持久性、靈活性及易

47、于訪問其它網(wǎng)絡(luò)資源等特點,為創(chuàng)建基于Web的應(yīng)用程序提供了基于組件的、平臺獨立性的方法。</p><p>  3.Java服務(wù)器端頁面(Java Server Pages,JSP)</p><p>  JSP是Sun公司提出的一種基于Java的服務(wù)器端動態(tài)頁面技術(shù),是Servlet技術(shù)的擴展。與ASP相比,JSP更具有平臺獨立性。JSP頁面由HTML代碼和嵌入其中的Java代碼以及JSP標

48、記所組成。服務(wù)器在頁面被客戶端請求以后對這些Java代碼和標記進行處理,然后將生成的HTML頁面返回給客戶端的瀏覽器。</p><p>  4.Java數(shù)據(jù)庫連接(Java Database Connectivity,JDBC)</p><p>  JDBC API是一個標準的數(shù)據(jù)庫訪問接口,以一種統(tǒng)一的方式來對各種各樣的關(guān)系數(shù)據(jù)庫進行存取。與ODBC一樣,JDBC為開發(fā)人員隱藏了不同數(shù)據(jù)

49、庫的不同特性。</p><p>  另外,由于JDBC建立在Java的基礎(chǔ)上,因此還提供了數(shù)據(jù)庫存取的平臺獨立性。</p><p>  5.Java事務(wù)API(Java Transaction API,JTA)和Java事務(wù)服務(wù)(JavaTransaction Service,JTS)</p><p>  事務(wù)處理是企業(yè)計算中最主要的內(nèi)容之一。JTA和JTS為JAV

50、A平臺提供了分布式事務(wù)服務(wù)。一個分布式的事務(wù)涉及一個事務(wù)管理器和一個或者多個資源管理器。一個資源管理器是任何類型的持久性的數(shù)據(jù)存儲。事務(wù)管理器負責協(xié)調(diào)所有事務(wù)參與者之間的通信。JTA事務(wù)比JDBC事務(wù)功能更強,JDBC事務(wù)局限于一個數(shù)據(jù)庫連接,而JTA事務(wù)可以有多個參與者。</p><p>  6.Java名字和目錄接口(Java Naming and Directory Interface,JNDI)</

51、p><p>  JNDI API被用于執(zhí)行名字和目錄服務(wù)。由于JAVA應(yīng)用程序組件一般分布在不同的機器上,所以需要一種機制以便于組件客戶使用者查找和引用組件及資源。在JAVA體系中,使用JNDI定位各種對象,這些對象包括EJB、JDBC數(shù)據(jù)源及消息連接等。JNDI為企業(yè)應(yīng)用中的多種命名和目錄服務(wù)提供統(tǒng)一接口,使應(yīng)用程序組件可以統(tǒng)一訪問這些命名和目錄服務(wù)。</p><p><b>  

52、7.JMS</b></p><p>  JMS被用來支持開發(fā)面向消息的分布式計算系統(tǒng),它提供創(chuàng)建、發(fā)送、接收、</p><p>  讀取消息的服務(wù)。JMS的目的是提供給消息系統(tǒng)中的客戶一個固定的接口,而且與底層的消息提供者無關(guān)。它提供了通用的消息模型以支持不同的異步和同步通訊機制,按處理機制的不同,可分為發(fā)布/訂閱(PUB/SUB)模型和點到點(P2P)排隊模型。</p&

53、gt;<p><b>  系統(tǒng)總體設(shè)計</b></p><p>  2.1 Web應(yīng)用服務(wù)器DM WAS功能需求</p><p>  Web應(yīng)用服務(wù)器是多層體系結(jié)構(gòu)中的關(guān)鍵部件,Web應(yīng)用服務(wù)器有其共有的功能特性,包括客戶端連接管理、狀態(tài)和會話管理、業(yè)務(wù)邏輯處理、數(shù)據(jù)庫連接、安全管理和事務(wù)管理等。</p><p>  具體到JAV

54、A中,一個符合JAVA規(guī)范的Web應(yīng)用服務(wù)器需要提供的服務(wù)除了要滿足一般需求外,還有其特殊之處,主要表現(xiàn)在如下幾個方面。</p><p><b>  1.Web容器服務(wù)</b></p><p>  Web容器負責加載和執(zhí)行Web應(yīng)用程序,接受Web請求,返回動態(tài)的Web頁面。Web容器中的組件可使用EJB容器中的組件完成復(fù)雜的業(yè)務(wù)邏輯。</p><

55、p><b>  2.EJB容器服務(wù)</b></p><p>  負責管理EJB組件的生存期和EJB組件的狀態(tài),調(diào)度EJB實例池以及池中的EJB組件,管理執(zhí)行EJB規(guī)范的Java類和EJB組件服務(wù)的接口插入類。</p><p><b>  3.命名服務(wù)</b></p><p>  服務(wù)器要提供JNDI的實現(xiàn)以便實現(xiàn)相關(guān)

56、資源的綁定和查找。</p><p><b>  4.事務(wù)服務(wù)</b></p><p>  負責處理分布式事務(wù),提供對EJB組件的事務(wù)管理。在JAVA中,一個事務(wù)資源可能是JDBC連接、JMS會話或者是JCA資源適配器的連接。事務(wù)之間的聯(lián)系是隱含的分布式請求傳遞。該服務(wù)要實現(xiàn)JTA規(guī)范,允許從客戶端的應(yīng)用軟件中明確的開始和結(jié)束事務(wù)。</p><p&g

57、t;<b>  5.數(shù)據(jù)庫服務(wù)</b></p><p>  負責處理數(shù)據(jù)源對象。數(shù)據(jù)源是為了處理數(shù)據(jù)庫連接的標準JDBC管理對象。數(shù)據(jù)庫服務(wù)在服務(wù)器中創(chuàng)建、加載數(shù)據(jù)源,同時負責管理連接池。</p><p><b>  6.安全服務(wù)</b></p><p>  執(zhí)行JAVA規(guī)范指定的訪問服務(wù)器組件和應(yīng)用程序的授權(quán)機制。<

58、;/p><p><b>  2.2系統(tǒng)架構(gòu)分析</b></p><p>  軟件架構(gòu)的設(shè)計是決定軟件系統(tǒng)的性能和可擴展性等質(zhì)量指標的重要因素。在基于JAVA的Web應(yīng)用服務(wù)器的實現(xiàn)產(chǎn)品中,開源的Tomcat應(yīng)用服務(wù)器在系統(tǒng)架構(gòu)方面給了我們很多有益的啟迪。</p><p>  2.2.1 Tomcat體系結(jié)構(gòu)分析</p><p&g

59、t;  Tomcat是Sun公司官方推薦的Servlet和JSP容器。Tomcat從4.0版本開始,在體系結(jié)構(gòu)上進行了調(diào)整,與4.0之前所采用的基于模塊的鏈式控制結(jié)構(gòu)相比,Tomcat在4.0之后采用了面向組件的設(shè)計方式,各部分功能都是由組件提供的,控制流程通過組件之間的通訊完成。</p><p>  設(shè)計組件時應(yīng)該從不同的問題領(lǐng)域,站在不同的觀點上分析,把每一種屬性分別考慮。例如Tomcat中的FileLogg

60、er組件,它用于把系統(tǒng)日志信息保存到文件系統(tǒng)中。按照這種模式分析,我們從不同的角度看待它:它如何啟動服務(wù)、停止服務(wù)和進行通訊?它的具體的功能有哪些?別的組件可以發(fā)給它哪些消息?基于這些考慮,F(xiàn)ileLogger組件實現(xiàn)了兩種接口:Lifecycle(生存期接口)和LoggerBase(基本功能接口)。Tomcat中使用了Inversion of Control(IOC)模式,其意思是組件總是通過外部進行管理的。組件需要的信息總是來源于外

61、部,實際上組件在生存期的各個階段都是被創(chuàng)建它的組件管理的。在Tomcat4.0中就是通過這種組件之間的相互控制和調(diào)用實現(xiàn)各個功能的。</p><p>  Tomcat的基本流程是首先通過解析XML格式的配置文件(server.xml和web.xml),獲得系統(tǒng)的配置和應(yīng)用信息,然后加載定制的組件模塊提供各種系統(tǒng)服務(wù)。Tomcat的常用組件包括:Server、Service、Connector、Engine、Hos

62、t、Context。</p><p>  Server代表整個Tomcat的Catalina Servlet容器,它包含一個或多個Service;Service由一個或者多個連接器(Connector)以及一個共享的處理引擎(Engine)組成,Engine負責處理所有Connector所獲得的客戶請求;Connector在某個指定端口上偵聽客戶請求,并將獲得的請求交給Engine來處理,從Engine處獲得響應(yīng)

63、結(jié)果,并返回給客戶端;Engine代表一個Service所屬的請求處理機,它接受所有Connector傳遞過來的客戶端請求,將處理結(jié)果返回給Connector,由Connector將最終響應(yīng)返回給客戶端,Engine必須配置在Service組件下;Engine下可以配置多個Host,每個Host都有一個域名,當Engine獲得一個請求時,它把該請求匹配到某個Host上,把請求交給該Host來處理;Host代表一個虛擬主機,每個虛擬主機和

64、某個網(wǎng)絡(luò)域名相匹配。每個虛擬主機下都可以部署一個或者多個Web應(yīng)用程序,每個Web應(yīng)用程序?qū)?yīng)于一個Context,有一個Context路徑;一個Context對應(yīng)于一個Web應(yīng)用程序,</p><p><b>  2.2.2組件技術(shù)</b></p><p>  組件技術(shù)越來越廣泛地應(yīng)用于軟件系統(tǒng)設(shè)計中,它是為提高軟件的可重用性而提出的,其思想是將軟件按一定的標準封裝

65、成組件,對外提供一組訪問接口,指明組件與容器或與其它組件交互的機制。面向組件的技術(shù)(Component-Oriented,CO)是比面向?qū)ο蟮募夹g(shù)更高一層的抽象,它融合了面向?qū)ο蟮膬?yōu)點,加入了安全性和可擴展的模塊設(shè)計,可以更好的映射問題域空間。采用面向組件的設(shè)計會帶來很多好處,可以提高復(fù)用性、降低耦合度和通過組裝構(gòu)成系統(tǒng)等。</p><p>  應(yīng)用服務(wù)器系統(tǒng)吸取了組件技術(shù)所提供的優(yōu)點,采用開放的層次組件式結(jié)構(gòu),

66、系統(tǒng)的各種資源均以服務(wù)的形式提供,服務(wù)按功能劃分層次,形成不同組件,服務(wù)與系統(tǒng)核心之間定義公共接口標準,所有服務(wù)采用標準接口實現(xiàn)與底層通訊。采用這種層次式組件結(jié)構(gòu),組件通過核心層定義的公共標準接口實現(xiàn)與底層通訊,系統(tǒng)功能作為組件式服務(wù)部署和管理,整個系統(tǒng)可以在不影響現(xiàn)有應(yīng)用的基礎(chǔ)上,實現(xiàn)對組件的修改和擴展。</p><p>  JAVA是一個基于組件的多層網(wǎng)絡(luò)應(yīng)用體系結(jié)構(gòu),它定義了一套標準化的組件,并為這些組件提

67、供了完整的服務(wù),這意味著應(yīng)用程序的不同部分可以運行在不同的設(shè)備和系統(tǒng)上。其核心是容器,容器提供了組件服務(wù)的運行環(huán)境和對企業(yè)信息系統(tǒng)的標準訪問,還提供了配置和部署應(yīng)用程序行為的機制。</p><p>  2.3 DM WAS體系結(jié)構(gòu)</p><p>  2.3.1服務(wù)器總體設(shè)計框架</p><p>  JAVA平臺從功能上大體可以劃分為兩個大的組成部分:Web服務(wù)器和

68、EJB服務(wù)器。Web服務(wù)器主要是為JSP和Servlet提供運行平臺,實現(xiàn)企業(yè)應(yīng)用程序的Web表示層;EJB服務(wù)器主要是提供EJB組件的運行環(huán)境,為業(yè)務(wù)邏輯事務(wù)層服務(wù)。各個廠商一般會根據(jù)需要有選擇地實現(xiàn)全部或部分JAVA規(guī)范,如OpenEJB是一個實現(xiàn)了EJB規(guī)范的純EJB容器,Tomcat是一個主要提供Servlet和JSP服務(wù)的Web容器,當然它也實現(xiàn)了JNDI、連接池、事務(wù)處理等相關(guān)服務(wù)。</p><p>

69、  在總結(jié)國內(nèi)外Web應(yīng)用服務(wù)器研究的基礎(chǔ)之上,結(jié)合具體的需求分析,我們提出如下系統(tǒng)總體框架,如圖2.1所示。</p><p>  圖2.1 DM WAS總體框架圖</p><p>  由圖中可以看出,整個Web應(yīng)用服務(wù)器的功能是由一個個的組件提供的。采用組件技術(shù),能夠提高系統(tǒng)的可擴展性。整個系統(tǒng)由11種組件組成。</p><p><b>  1.服務(wù)器啟

70、停組件</b></p><p>  服務(wù)器啟停組件實現(xiàn)服務(wù)器的啟動與停止。服務(wù)器啟動時,完成如下一些工作:</p><p>  初始化類裝載器,初始化JNDI服務(wù),讀入服務(wù)器配置文件server.xml(由XML組件中的xml解析器完成解析),根據(jù)配置文件的內(nèi)容配置相應(yīng)的資源服務(wù)(如數(shù)據(jù)源的初始化),啟動“停止服務(wù)器”監(jiān)聽線程并注冊虛擬機停止鉤子(hook),初始化Web應(yīng)用程

71、序上下文,初始化并啟動Http連接管理組件,初始化其它內(nèi)置服務(wù)(如內(nèi)置的數(shù)據(jù)庫等)。</p><p>  2.Http連接管理組件</p><p>  Http連接管理組件負責建立一個或多個ServerSocket并監(jiān)聽來自客戶端的連接請求。它在初始化過程中獲取服務(wù)器啟停組件讀入的服務(wù)器配置信息,如服務(wù)器綁定的IP地址和端口號、線程池能夠允許的最大線程數(shù)和最小線程數(shù)等,建立ServerSo

72、cket,并循環(huán)地接收客戶端的連接。當某個客戶端發(fā)出連接請求時,它建立一個Socket對象并將該對象包裝成request和response對象賦給請求處理任務(wù)的實例,交由線程池處理。</p><p><b>  3.靜態(tài)資源處理器</b></p><p>  靜態(tài)資源處理器完成對靜態(tài)頁面html、圖片等靜態(tài)資源的請求處理。如果用戶請求的是一個目錄,它可根據(jù)服務(wù)器的配置

73、決定是否顯示歡迎頁面、顯示目錄內(nèi)容或給出出錯信息。</p><p>  4.Servlet容器</p><p>  Servlet容器是服務(wù)器的核心,它實現(xiàn)并擴展了Servlet2.3規(guī)范中的絕大多數(shù)接口。Servlet容器在系統(tǒng)啟動過程中完成初始化,包括Web應(yīng)用程序上下文的配置、Web描述符的解析以及根據(jù)Web描述符的配置決定是否預(yù)先裝入某些Servlet。</p>&l

74、t;p>  它實現(xiàn)了基于Session和Cookie的會話管理機制,能夠有效地對用戶會話進行跟蹤。</p><p>  Servlet實例池能夠?qū)τ脩舻恼埱笞龀隹焖夙憫?yīng)。根據(jù)Web描述符能夠處理任何匿名或非匿名的Servlet請求。</p><p><b>  5.JSP引擎</b></p><p>  JSP引擎是服務(wù)器的另一個核心組件

75、,用來處理對JSP頁面的請求。當Servlet容器監(jiān)聽到客戶端請求的是一個JSP頁面時,它將請求轉(zhuǎn)發(fā)給JSP引擎。JSP引擎將對JSP文件進行解析并生成相應(yīng)的Servlet代碼,隨后對生成的Servlet進行編譯并加載到內(nèi)存中,然后將該Servlet交給Servlet容器進行處理。上述過程會隨時因發(fā)生錯誤(如JSP文件寫法不規(guī)范,找不到引用類等)而終止。對于所有的隨后而來的對該JSP文件的請求,JSP引擎將檢查該JSP文件自最后一次被存

76、取后是否經(jīng)過修改。如果沒有修改則請求將交給還在內(nèi)存中的Servlet以一種同時發(fā)生的方式加以處理。由于Servlet始終駐于內(nèi)存,所以響應(yīng)是非??斓摹H绻鸍SP文件被修改了,JSP引擎將自動地對該文件重新編譯,并將結(jié)果取代內(nèi)存中的Servlet,并繼續(xù)上述處理過程。</p><p>  6.數(shù)據(jù)庫連接管理組件</p><p>  數(shù)據(jù)庫連接管理組件管理數(shù)據(jù)庫的連接操作,它包括一個事務(wù)管理器

77、和一個數(shù)據(jù)庫連接池。事務(wù)管理器采用JTA和JTS為開發(fā)者提供數(shù)據(jù)庫的事務(wù)支持,開發(fā)人員可以有選擇地通過JNDI訪問事務(wù)管理器控制事務(wù)或自己使用JDBC接口控制事務(wù)。</p><p>  數(shù)據(jù)庫連接池實現(xiàn)了javax.sql.DataSource接口并對開發(fā)人員屏蔽了引用的細節(jié),開發(fā)人員只需要通過JDNI查找DataSource的邏輯名稱就可以獲得數(shù)據(jù)庫連接從而操縱數(shù)據(jù)庫。</p><p>

78、<b>  7.XML組件</b></p><p>  XML組件包括XML解析器、XSL轉(zhuǎn)換器、XMLJDBC組件等。它負責系統(tǒng)中所有XML文件的解析工作,能夠完成XML文件與關(guān)系數(shù)據(jù)庫之間數(shù)據(jù)的存取與轉(zhuǎn)換,以及與XML數(shù)據(jù)庫的連接。</p><p><b>  8.JNDI組件</b></p><p>  JNDI組件

79、為用戶訪問Java名字和目錄服務(wù)提供了便利,任何有關(guān)JNDI的查找和綁定工作都由該組件完成。</p><p><b>  9.安全管理組件</b></p><p>  安全管理組件采用基于安全域(security realm)的方式實現(xiàn)服務(wù)器中用戶的認證和授權(quán)。在身份認證方面,使用基于HTTP基本驗證方式和基于表單(FORM)的認證方式;在授權(quán)方面,使用基于角色的訪問

80、控制。所有安全操作由服務(wù)器管理,用戶只需在Web應(yīng)用描述符中進行配置。</p><p><b>  10.日志管理組件</b></p><p>  日志管理組件負責系統(tǒng)的日志記錄工作。我們采用了優(yōu)秀的日志記錄軟件Log4j并對其進行了擴展以滿足本地化需求。日志管理組件提供分級方法在程序中嵌入日志記錄語句。日志信息具有多種輸出格式和多個輸出級別,用戶可根據(jù)需要進行定制,

81、以捕捉有關(guān)應(yīng)用程序運行時行為的細節(jié)。</p><p>  11.服務(wù)器接口組件</p><p>  服務(wù)器接口組件負責與DM EJB服務(wù)器的連接工作。它通過JNDI與DM EJB服務(wù)器進行通信,從而實現(xiàn)DM WAS和DM EJB服務(wù)器的互連,形成一個完整的JAVA應(yīng)用服務(wù)器。</p><p>  2.3.2服務(wù)器總體方案的特點</p><p>

82、;  基于JAVA的DM WAS處于Web瀏覽器/DM WAS/DM數(shù)據(jù)庫服務(wù)器三層體系結(jié)構(gòu)的中間層,該服務(wù)器具有6個基本特點。</p><p><b>  1.規(guī)范性</b></p><p>  DM WAS嚴格遵循JAVA規(guī)范,任何符合JAVA規(guī)范的Web應(yīng)用程序都能夠在我們的服務(wù)器中正確地配置和運行。</p><p><b> 

83、 2.適應(yīng)性</b></p><p>  DM WAS嚴格來說是一個Web容器,但我們提供與DM EJB服務(wù)器的整合,從而可以給用戶提供完整的JAVA開發(fā)環(huán)境。</p><p><b>  3.安全性</b></p><p>  在服務(wù)器中可以配置各種組件的安全性,只有被授權(quán)的用戶才能訪問系統(tǒng)資源。每一個客戶隸屬于一個特定的角色,而

84、每個角色只能訪問特定的資源。開發(fā)人員可以在應(yīng)用部署描述符中聲明角色和可被訪問的資源,而不必在應(yīng)用程序中硬編碼安全規(guī)則。</p><p><b>  4.可配置性</b></p><p>  用戶可以通過服務(wù)器配置文件方便地對各項參數(shù)進行修改,從而達到最佳運行效果。</p><p><b>  5.可管理性</b></

85、p><p>  我們提供良好的操作管理界面幫助服務(wù)器管理人員管理服務(wù)器以及部署在服務(wù)器中的Web應(yīng)用程序。</p><p><b>  6.易用性</b></p><p>  服務(wù)器應(yīng)用程序目錄結(jié)構(gòu)規(guī)范,Web應(yīng)用程序部署方便簡單,具有對WAR文件的自動解壓,簡單的批處理文件使得啟停服務(wù)器變得異常方便。</p><p>  

86、2.4 DM WAS的運行過程</p><p>  DM WAS基于HTTP/1.1協(xié)議,支持JAVA中Servlet、JSP、JDBC、JNDI等相關(guān)規(guī)范,能夠部署大多數(shù)基于Web的Java應(yīng)用。DM WAS由服務(wù)器核心類、Java核心類庫、第三方軟件包、一組配置文件和多個Web應(yīng)用程序組成。</p><p>  服務(wù)器在啟動時讀入并解析服務(wù)器配置文件,并初始化一系列服務(wù),包括類裝載器、

87、數(shù)據(jù)庫連接池、JNDI、數(shù)據(jù)源等資源在JNDI上的綁定、線程池、Web應(yīng)用程序的上下文等,最后建立ServerSocket,等待客戶端連接。</p><p><b>  系統(tǒng)技術(shù)實現(xiàn)</b></p><p>  3.1 Http連接管理組件</p><p>  一個客戶機與一個服務(wù)器要進行有效的通信,他們之間必然要遵守某種共同的協(xié)議,當前,瀏覽

88、器和Web服務(wù)器之間大多采用超文本傳輸協(xié)議HTTP進行通信。HTTP協(xié)議是基于TCP/IP協(xié)議之上的應(yīng)用層協(xié)議,具有無連接、無狀態(tài)、面向?qū)ο蟮葞讉€特點。HTTP協(xié)議基于請求/響應(yīng)機制,其工作原理包括四個步驟。</p><p>  1.連接:瀏覽器與服務(wù)器建立連接,打開一個稱為套接字(socket)的虛擬文件,此文件的建立標志著連接建立成功。</p><p>  2.請求:瀏覽器通過sock

89、et向服務(wù)器提交請求。</p><p>  3.應(yīng)答:服務(wù)器接收到該請求后,進行相應(yīng)的事務(wù)處理,然后將處理結(jié)果通過HTTP傳回給瀏覽器。</p><p>  4.關(guān)閉連接:當應(yīng)答結(jié)束后,服務(wù)器斷開與瀏覽器的連接,以保證更多的瀏覽器能夠與服務(wù)器建立連接。</p><p>  Http連接管理組件位于DM WAS的最前端,它在服務(wù)器啟動過程中獲取服務(wù)器配置參數(shù)并初始化,

90、負責監(jiān)聽端口,接收請求消息,并且將處理后的回復(fù)反饋給客戶端。</p><p><b>  3.1.1組件實現(xiàn)</b></p><p>  Http連接管理組件基于HTTP協(xié)議,負責建立一個或多個服務(wù)器Socket并監(jiān)聽來自客戶端的連接請求。當某個客戶端發(fā)出連接請求時,它建立一個Socket對象,讀出Socket輸入輸出流,將輸入流進行解析并提取相關(guān)信息,然后實例化一個

91、請求處理任務(wù),并將輸入輸出流分別包裝成request和response對象賦給該任務(wù),交由線程池處理。流程圖如圖3.1所示。</p><p>  圖3.1 Http連接管理組件流程圖</p><p>  Http連接管理組件由LifeCycle、Server、HttpServer、ConnectionHandler、RequestHandler、Request、Response等類和接口以

92、及實現(xiàn)線程池的相關(guān)類組成。</p><p>  下面詳細介紹一下相關(guān)的數(shù)據(jù)結(jié)構(gòu)。</p><p>  interface LifeCycle{</p><p>  void start()throws LifeCycleException;</p><p>  void stop()throws LifeCycleException;<

93、/p><p>  boolean isStarted();</p><p><b>  }</b></p><p>  LifeCycle代表組件的生命周期接口,其目的是以一種一致的方式來管理組件的啟動與停止。服務(wù)器中所有具有生命周期的組件如服務(wù)器類、應(yīng)用程序上下文類都必須實現(xiàn)該接口。</p><p>  interface

94、 Server extends LifeCycle{</p><p>  String getServerInfo();</p><p>  String getServerName();</p><p>  int getServerPort();</p><p>  String getAppBase();</p><

95、p>  URLClassLoader getWebappParentClassLoader();</p><p><b>  }</b></p><p>  Server代表整個服務(wù)器,它包含服務(wù)器的相關(guān)屬性信息,負責服務(wù)器的啟動與停止。</p><p>  它由服務(wù)器啟停組件調(diào)用。HttpServer類是對Server接口的實現(xiàn),并擴展

96、了對Servlet容器的接口。</p><p>  class ConnectionHandler implements LifeCycle{</p><p>  ServerSocket openSocket()throws LifeCycleException;</p><p>  void accept();</p><p>  voi

97、d handleConnection(Socket socket)throws IOException;</p><p><b>  }</b></p><p>  ConnectionHandler實現(xiàn)了生命周期接口,它根據(jù)Server中的相關(guān)信息建立</p><p>  ServerSocket,循環(huán)地接收客戶端的連接請求。它獲取客戶端的S

98、ocket連接對象,讀取輸入輸出流,然后交給RequestHandler任務(wù)處理。</p><p>  class RequestHandler implements LifeCycle,Task{</p><p>  void parseRequest(InputStream inputstream)</p><p>  void execute(Request

99、request,Response response)</p><p><b>  }</b></p><p>  RequestHandler同時實現(xiàn)了生命周期接口和Task接口,從而可以交給線程池處理。</p><p>  RequestHandler解析輸入流,讀取HTTP請求頭,將輸入輸出流包裝成Request和Response對象,然后

100、被ConnectionHandler放入線程池中,交由線程池執(zhí)行。</p><p>  interface Request extends javax.servlet.http.HttpServletRequest{</p><p>  void setResponse(Response response);</p><p>  void setSocketInpu

101、tStream(InputStream is);</p><p>  void addCookie(Cookie cookie);</p><p>  void addHeader(String headerName,String headerValue);</p><p><b>  }</b></p><p>  i

102、nterface Response extends javax.servlet.http.HttpServletResponse{</p><p>  void setRequest(Request request);</p><p>  void setSocketOutputStream(OutputStream os);</p><p>  void writ

103、eHeaders()throws IOException;</p><p>  void flush()throws IOException;</p><p><b>  }</b></p><p>  Request和Response是對Socket輸入輸出流的包裝并實現(xiàn)了相關(guān)的Servlet接口,以一種對象的形式屏蔽了HTTP底層操作的細節(jié)

104、。</p><p><b>  3.1.2多線程</b></p><p>  Web服務(wù)器應(yīng)用程序常常要處理來自遠程的大量而短小的任務(wù),其特點是單個任務(wù)處理的時間很短而請求的數(shù)目卻很大且很多請求是同時進行的。</p><p>  顯然單線程的處理機制無法滿足我們的需求。在服務(wù)器程序中,使用多線程是提高服務(wù)器性能的捷徑。實踐證明,采用多線程設(shè)計可

105、以極大地改善系統(tǒng)的響應(yīng)性能,提高程序的并行性。</p><p>  多線程,顧名思義就是在應(yīng)用程序中使用多個線程。在服務(wù)器應(yīng)用程序中</p><p>  使用多線程的意思是對于接收的每一個請求我們使用一個單獨的線程進行處理。構(gòu)建多線程應(yīng)用程序時,一個簡單的方法是:每當一個請求到達時就創(chuàng)建一個新線程,然后在新建的這個線程中對該請求進行處理。實際應(yīng)用中,這種方法的缺點是很明顯的:為每個請求創(chuàng)建

106、一個新線程的開銷是很大的;創(chuàng)建過多的線程可能會導(dǎo)致系統(tǒng)由于內(nèi)存消耗過度而導(dǎo)致系統(tǒng)資源不足。</p><p>  資源不足是多線程應(yīng)用中需要注意的一個問題。為了防止資源不足,服務(wù)器應(yīng)對創(chuàng)建和銷毀線程的次數(shù)進行合理的調(diào)整,盡量重用已有的線程。</p><p>  池化技術(shù)被廣泛的應(yīng)用于服務(wù)器端軟件的開發(fā)上。池化技術(shù)簡單來說就是對已創(chuàng)建的對象放在一個池中進行緩存,將來需要某對象時,就從池中獲取,

107、從而達到重用對象的目的。線程池技術(shù)是池化技術(shù)的一種,當需要完成某項任務(wù)時,直接從線程池中取出線程來對任務(wù)進行處理,任務(wù)處理完后,將線程返回線程池,其優(yōu)點是:任務(wù)到達時,由于不需要新建線程,而是直接使用已有線程,提高了應(yīng)用程序的響應(yīng)速度。而且,通過適當?shù)卣{(diào)整線程池中的最大線程數(shù)目和最小線程數(shù)目,可以防止系統(tǒng)資源不足問題。</p><p><b>  3.1.2.1實現(xiàn)</b></p>

108、;<p>  在DM WAS中我們使用了多線程機制,對于單個的請求都交給線程池模塊進行處理。我們使用事件驅(qū)動處理的方法實現(xiàn)線程之間的調(diào)度。在事件驅(qū)動處理的情況下,需要一種發(fā)信機制來控制某一特定線程何時應(yīng)該運行。在Java中,可以使用wait()、notify()和notifyAll()方法向線程發(fā)送信號。這些方法允許線程在一個對象上阻塞,直到所需的條件得到滿足為止,然后再次開始運行。這種設(shè)計減少了CPU占用,因為線程在阻塞

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論