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

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  基于JAVA的web服務(wù)器</p><p>  摘 要:應(yīng)用服務(wù)器是當(dāng)前基于Web的軟件開發(fā)的重要的支撐平臺(tái)。本文通過研究Web應(yīng)用服務(wù)器的功能需求以及基于組件的軟件開發(fā)模式,結(jié)合JAVA規(guī)范和超文本傳輸協(xié)議,設(shè)計(jì)并實(shí)現(xiàn)了基于JAVA的Web應(yīng)用服務(wù)器—DM WAS,為Web客戶部署Web應(yīng)用程序提供支持,從而更加方便地使用DM的數(shù)據(jù)存儲(chǔ)和訪問服務(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ù)庫(kù)逐漸成為存儲(chǔ)和處理數(shù)據(jù)的主要工具,它是許多公司整體業(yè)務(wù)結(jié)構(gòu)形成的基礎(chǔ)。在傳統(tǒng)的客戶機(jī)/服務(wù)

3、器兩層體系結(jié)構(gòu)中,應(yīng)用程序的處理在前臺(tái)的客戶端和后臺(tái)的數(shù)據(jù)庫(kù)服務(wù)器之間分擔(dān),客戶端發(fā)出數(shù)據(jù)請(qǐng)求,服務(wù)器響應(yīng)并處理請(qǐng)求,把處理的結(jié)果再回送到發(fā)出請(qǐng)求的客戶端??蛻魴C(jī)/服務(wù)器結(jié)構(gòu)因?yàn)槠潇`活性得到了較廣泛的應(yīng)用,但對(duì)于大型軟件系統(tǒng)而言,這種結(jié)構(gòu)在系統(tǒng)的部署、可擴(kuò)展性和可維護(hù)性方面還存在著不足,典型的有胖客戶機(jī)/瘦服務(wù)器和瘦客戶機(jī)/胖服務(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ù)庫(kù)技術(shù)又面臨著新的挑戰(zhàn),一種新的、更具生命力的體系結(jié)構(gòu)被廣泛采用,這就是所謂的三層和多層應(yīng)用體系模型。一個(gè)典型的三層模型由前端客戶層、中間服務(wù)器層和后端數(shù)據(jù)庫(kù)層所組成,在這種模型中,業(yè)務(wù)邏輯被放到系統(tǒng)服務(wù)和用戶接口之間的中間層,從而使業(yè)務(wù)邏輯與用戶界面的表示層分開,同時(shí)與后端系統(tǒng)保持相對(duì)獨(dú)</p><

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

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

7、應(yīng)用提供存儲(chǔ)、查詢、發(fā)布數(shù)據(jù)的能力,并提供部署、運(yùn)行應(yīng)用的環(huán)境。</p><p>  1.2 Web應(yīng)用服務(wù)器的定義及功能</p><p>  1.2.1. Web基本概念</p><p>  WWW采用Web頁(yè)面的方式進(jìn)行信息的存儲(chǔ)與傳遞,Web信息存儲(chǔ)在Web站點(diǎn)上,用戶通過Web瀏覽器訪問頁(yè)面。Web頁(yè)面是由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é)議,它實(shí)現(xiàn)了服務(wù)器和

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

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

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

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

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

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

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

16、傳送給用戶。</p><p>  圖2-2表示了獲取一個(gè)Web頁(yè)面的過程。</p><p>  圖2-2獲取Web頁(yè)面的過程</p><p>  由Web的結(jié)構(gòu)以及工作過程可以看出,Web服務(wù)器是整個(gè)Web系統(tǒng)的重要組成部分,在Web系統(tǒng)的頁(yè)面交互的過程中也占有舉足輕重的作用。因此,改善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計(jì)算環(huán)境下產(chǎn)生的新型中間件,為創(chuàng)建、部署、運(yùn)行、集成和管理事務(wù)性Web應(yīng)用提供了一個(gè)跨平臺(tái)的運(yùn)行環(huán)境。</p><p>  近年來,許多研究人員、組織機(jī)構(gòu)對(duì)Web應(yīng)用服務(wù)器分別提出了不同的定義,但到目前為止,W

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

37、的新特性,使得Java語言比C++語言更易使用且不容易出錯(cuò)。簡(jiǎn)單地說,Java具有以下的特性:簡(jiǎn)潔性、面向?qū)ο?、分布式運(yùn)算、健壯性、安全性,跨平臺(tái)、可移植。</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ù)器還沒有一個(gè)明確統(tǒng)一的標(biāo)準(zhǔn),各個(gè)應(yīng)用服務(wù)器都是按照自己的模式來提供服務(wù)。這

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

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

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

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

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

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

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

45、體Bean可以代表一個(gè)數(shù)據(jù)庫(kù)中存儲(chǔ)的對(duì)象。他們能夠通過一個(gè)主關(guān)鍵字來識(shí)別并可以被不同的客戶端所共享。EJB容器負(fù)責(zé)管理這些對(duì)象的持久性。實(shí)體Bean在服務(wù)器發(fā)生故障后能繼續(xù)存在。</p><p>  (4)消息驅(qū)動(dòng)Bean(Message-Driver bean):它是EJB2.0新引入的一種Bean類型,用來監(jiān)聽消息的對(duì)象。消息驅(qū)動(dòng)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是一種獨(dú)立于平臺(tái)和協(xié)議的服務(wù)器端Java應(yīng)用程序,用來拓展基于請(qǐng)求響應(yīng)模式的服務(wù)器端的能力。Servlet位于Web服務(wù)器端,由Web服務(wù)器動(dòng)態(tài)加載和卸載。Servlet具有多線程、持久性、靈活性及易

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

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

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

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

51、p><p>  JNDI API被用于執(zhí)行名字和目錄服務(wù)。由于JAVA應(yīng)用程序組件一般分布在不同的機(jī)器上,所以需要一種機(jī)制以便于組件客戶使用者查找和引用組件及資源。在JAVA體系中,使用JNDI定位各種對(duì)象,這些對(duì)象包括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ā)面向消息的分布式計(jì)算系統(tǒng),它提供創(chuàng)建、發(fā)送、接收、</p><p>  讀取消息的服務(wù)。JMS的目的是提供給消息系統(tǒng)中的客戶一個(gè)固定的接口,而且與底層的消息提供者無關(guān)。它提供了通用的消息模型以支持不同的異步和同步通訊機(jī)制,按處理機(jī)制的不同,可分為發(fā)布/訂閱(PUB/SUB)模型和點(diǎn)到點(diǎn)(P2P)排隊(duì)模型。</p&

53、gt;<p><b>  系統(tǒng)總體設(shè)計(jì)</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)和會(huì)話管理、業(yè)務(wù)邏輯處理、數(shù)據(jù)庫(kù)連接、安全管理和事務(wù)管理等。</p><p>  具體到JAV

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

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

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

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

58、;/p><p><b>  2.2系統(tǒng)架構(gòu)分析</b></p><p>  軟件架構(gòu)的設(shè)計(jì)是決定軟件系統(tǒng)的性能和可擴(kuò)展性等質(zhì)量指標(biāo)的重要因素。在基于JAVA的Web應(yīng)用服務(wù)器的實(shí)現(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)上進(jìn)行了調(diào)整,與4.0之前所采用的基于模塊的鏈?zhǔn)娇刂平Y(jié)構(gòu)相比,Tomcat在4.0之后采用了面向組件的設(shè)計(jì)方式,各部分功能都是由組件提供的,控制流程通過組件之間的通訊完成。</p><p>  設(shè)計(jì)組件時(shí)應(yīng)該從不同的問題領(lǐng)域,站在不同的觀點(diǎn)上分析,把每一種屬性分別考慮。例如Tomcat中的FileLogg

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

61、部,實(shí)際上組件在生存期的各個(gè)階段都是被創(chuàng)建它的組件管理的。在Tomcat4.0中就是通過這種組件之間的相互控制和調(diào)用實(shí)現(xiàn)各個(gè)功能的。</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代表整個(gè)Tomcat的Catalina Servlet容器,它包含一個(gè)或多個(gè)Service;Service由一個(gè)或者多個(gè)連接器(Connector)以及一個(gè)共享的處理引擎(Engine)組成,Engine負(fù)責(zé)處理所有Connector所獲得的客戶請(qǐng)求;Connector在某個(gè)指定端口上偵聽客戶請(qǐng)求,并將獲得的請(qǐng)求交給Engine來處理,從Engine處獲得響應(yīng)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

84、每個(gè)角色只能訪問特定的資源。開發(fā)人員可以在應(yīng)用部署描述符中聲明角色和可被訪問的資源,而不必在應(yīng)用程序中硬編碼安全規(guī)則。</p><p><b>  4.可配置性</b></p><p>  用戶可以通過服務(wù)器配置文件方便地對(duì)各項(xiàng)參數(shù)進(jìn)行修改,從而達(dá)到最佳運(yùn)行效果。</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)用程序部署方便簡(jiǎn)單,具有對(duì)WAR文件的自動(dòng)解壓,簡(jiǎn)單的批處理文件使得啟停服務(wù)器變得異常方便。</p><p>  

86、2.4 DM WAS的運(yùn)行過程</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核心類庫(kù)、第三方軟件包、一組配置文件和多個(gè)Web應(yīng)用程序組成。</p><p>  服務(wù)器在啟動(dòng)時(shí)讀入并解析服務(wù)器配置文件,并初始化一系列服務(wù),包括類裝載器、

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

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

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

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

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

92、及實(shí)現(xiàn)線程池的相關(guān)類組成。</p><p>  下面詳細(xì)介紹一下相關(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代表組件的生命周期接口,其目的是以一種一致的方式來管理組件的啟動(dòng)與停止。服務(wù)器中所有具有生命周期的組件如服務(wù)器類、應(yīng)用程序上下文類都必須實(shí)現(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代表整個(gè)服務(wù)器,它包含服務(wù)器的相關(guān)屬性信息,負(fù)責(zé)服務(wù)器的啟動(dòng)與停止。</p><p>  它由服務(wù)器啟停組件調(diào)用。HttpServer類是對(duì)Server接口的實(shí)現(xiàn),并擴(kuò)展

96、了對(duì)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實(shí)現(xiàn)了生命周期接口,它根據(jù)Server中的相關(guān)信息建立</p><p>  ServerSocket,循環(huán)地接收客戶端的連接請(qǐng)求。它獲取客戶端的S

98、ocket連接對(duì)象,讀取輸入輸出流,然后交給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同時(shí)實(shí)現(xiàn)了生命周期接口和Task接口,從而可以交給線程池處理。</p><p>  RequestHandler解析輸入流,讀取HTTP請(qǐng)求頭,將輸入輸出流包裝成Request和Response對(duì)象,然后

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是對(duì)Socket輸入輸出流的包裝并實(shí)現(xiàn)了相關(guān)的Servlet接口,以一種對(duì)象的形式屏蔽了HTTP底層操作的細(xì)節(jié)

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

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

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

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

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

溫馨提示

  • 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論