外文翻譯譯文-servlet和jsp技術(shù)簡(jiǎn)述_第1頁(yè)
已閱讀1頁(yè),還剩5頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  Servlet和JSP技術(shù)簡(jiǎn)述</p><p>  Nagle ,Wiegley</p><p>  摘要:Servlet程序在服務(wù)器端運(yùn)行,動(dòng)態(tài)地生成Web頁(yè)面與傳統(tǒng)的CGI和許多其他類似CGI的技術(shù)相比,Java Servlet具有更高的效率,更容易使用,功能更強(qiáng)大,具有更好的可移植性,更節(jié)省投資。</p><p>  關(guān)鍵字:JSP技術(shù);

2、Servlet;HTTP服務(wù)</p><p>  1 Servlet的功能</p><p>  Servlet是運(yùn)行在Web或應(yīng)用服務(wù)器上的Java程序,它是一個(gè)中間層,負(fù)責(zé)連接來(lái)自Web瀏覽器或其他HTTP客戶程序的請(qǐng)求和HTTP服務(wù)器上的數(shù)據(jù)庫(kù)或應(yīng)用程序。Servlet的工作是執(zhí)行西門(mén)的任務(wù),如圖1.1所示 。</p><p>  圖1.1 Web中間件的作用&

3、lt;/p><p>  1.1 讀取客戶發(fā)送的顯式數(shù)據(jù)</p><p>  最終用戶一般在頁(yè)面的HTML表單中輸入這些數(shù)據(jù)。然而,數(shù)據(jù)還有可能來(lái)自applet或定制的HTTP客戶程序。</p><p>  1.2 讀取由瀏覽器發(fā)送的隱式請(qǐng)求數(shù)據(jù)</p><p>  圖1.1中顯示了一條從客戶端到Web服務(wù)器的單箭頭,但實(shí)際上從客戶端傳送到Web服

4、務(wù)器的數(shù)據(jù)有兩種,它們分別為用戶在表單中輸入的顯式數(shù)據(jù),以及后臺(tái)的HTTP信息。兩種數(shù)據(jù)都很重要。HTTP信息包括cookie、瀏覽器所能識(shí)別的媒體類型和壓縮模式等。</p><p><b>  1.3 生成結(jié)果</b></p><p>  這個(gè)過(guò)程可能需要訪問(wèn)數(shù)據(jù)庫(kù)、執(zhí)行RMI或EJB調(diào)用、調(diào)用Web服務(wù),或者直接計(jì)算得出對(duì)應(yīng)的響應(yīng)。實(shí)際的數(shù)據(jù)可能存儲(chǔ)在關(guān)系型數(shù)據(jù)庫(kù)

5、中。該數(shù)據(jù)庫(kù)可能不理解HTTP,或者不能返回HTML形式的結(jié)果,所有Web瀏覽器不能直接與數(shù)據(jù)庫(kù)進(jìn)行會(huì)話。即使它能夠做到這一點(diǎn),為了安全上的考慮,我們也不希望讓它這么做。對(duì)應(yīng)大多數(shù)其他應(yīng)用程序,也存在類似的問(wèn)題。因此,我們需要Web中間層從HTTP流中提取輸入數(shù)據(jù),與應(yīng)用程序會(huì)話,并將結(jié)果嵌入到文檔中。</p><p>  1.4 向客戶發(fā)送顯式數(shù)據(jù)(即文檔)</p><p>  這個(gè)文檔

6、可以用各種格式發(fā)送,包括文本(HTML或XML),二進(jìn)制(GIF圖),甚至可以式建立在其他底層格式之上的壓縮格式,如gzip。但是,到目前為止,HTML式最常用的格式,故而servelt和JSP的重要任務(wù)之一就式將結(jié)果包裝到HTML中。</p><p>  1.5 發(fā)送隱式的HTTP響應(yīng)數(shù)據(jù)</p><p>  圖1.1中顯示了一條從Web中間層到客戶端的單箭頭。但是,實(shí)際發(fā)送的數(shù)據(jù)有兩種

7、:文檔本身,以及后臺(tái)的HTTP信息。同樣,兩種數(shù)據(jù)對(duì)開(kāi)發(fā)來(lái)說(shuō)都式至關(guān)重要的。HTTP響應(yīng)數(shù)據(jù)的發(fā)送過(guò)程涉及告知瀏覽器或其他客戶程序所返回文檔的類型(如HTML),設(shè)置cookie和緩存參數(shù),以及其他類似的任務(wù)。</p><p>  2 動(dòng)態(tài)構(gòu)建網(wǎng)頁(yè)的原因</p><p>  預(yù)先建立的文檔可以滿足客戶的許多請(qǐng)求,服務(wù)器無(wú)需調(diào)用servlet就可以處理這些請(qǐng)求。然而,許多情況下靜態(tài)的結(jié)果不能

8、滿足要求,我們需要針對(duì)每個(gè)請(qǐng)求生成一個(gè)頁(yè)面。實(shí)時(shí)構(gòu)建頁(yè)面的理由有很多種:</p><p>  2.1 網(wǎng)頁(yè)基于客戶發(fā)送的數(shù)據(jù)</p><p>  例如,搜索引擎生成的頁(yè)面,以及在線商店的訂單確認(rèn)頁(yè)面,都要針對(duì)特定的用戶請(qǐng)求而產(chǎn)生。在沒(méi)有讀取到用戶提交的數(shù)據(jù)之前,我們不知道應(yīng)該顯示什么。要記住,用戶提交兩種類型的數(shù)據(jù):顯示(即HTML表單的數(shù)據(jù))和隱式(即HTTP請(qǐng)求的報(bào)頭)。兩種輸入都可用

9、來(lái)構(gòu)建輸出頁(yè)面。基于cookie值針對(duì)具體用戶構(gòu)建頁(yè)面的情況尤其普遍。</p><p>  2.2 頁(yè)面由頻繁改變的數(shù)據(jù)導(dǎo)出</p><p>  如果頁(yè)面需要根據(jù)每個(gè)具體的請(qǐng)求做出相應(yīng)的改變,當(dāng)然需要在請(qǐng)求發(fā)生時(shí)構(gòu)建響應(yīng)。但是,如果頁(yè)面周期性地改變,我們可以用兩種方式來(lái)處理它:周期性地在服務(wù)器上構(gòu)建新的頁(yè)面(和客戶請(qǐng)求無(wú)關(guān)),或者僅僅在用戶請(qǐng)求該頁(yè)面時(shí)再構(gòu)建。具體應(yīng)該采用哪種方式要根據(jù)具體

10、情況而定,但后一種方式常常更為方便,因?yàn)樗恍韬?jiǎn)單地等待用戶的請(qǐng)求。例如,天氣預(yù)報(bào)或新聞網(wǎng)站可能會(huì)動(dòng)態(tài)地構(gòu)建頁(yè)面,也有可能會(huì)返回之前構(gòu)建的頁(yè)面(如果它還是最新的話)。</p><p>  2.3 頁(yè)面中使用了來(lái)自公司數(shù)據(jù)庫(kù)或其他數(shù)據(jù)庫(kù)斷數(shù)據(jù)源的信息</p><p>  如果數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)中,那么,即使客戶端使用動(dòng)態(tài)Web內(nèi)容,比如applet,我們依舊需要執(zhí)行服務(wù)器端處理。想象以下,如果

11、一個(gè)搜索引擎網(wǎng)站完全使用applet,那么用戶將會(huì)看到:“正在下載50TB的applet,請(qǐng)等待!”。顯然,這樣很愚蠢;這種情況下,我們需要與數(shù)據(jù)庫(kù)進(jìn)行會(huì)話。從客戶端到Web層再到數(shù)據(jù)庫(kù)(三層結(jié)構(gòu)),要比從applet直接到數(shù)據(jù)庫(kù)(二層結(jié)構(gòu))更靈活,也更安全,而性能上的損失很少甚至沒(méi)有。畢竟數(shù)據(jù)庫(kù)調(diào)用通常是對(duì)速度影響最大的步驟,因而,經(jīng)過(guò)中間層可以執(zhí)行高速緩存和連接共享。</p><p>  理論上講,serve

12、lt并非只用于處理HTTP請(qǐng)求的Web服務(wù)器或應(yīng)用服務(wù)器,它同樣可以用于其他類型的服務(wù)器。例如,servlet能夠嵌入到FTP或郵件服務(wù)器中,擴(kuò)展他們的功能。而且,用于會(huì)話啟動(dòng)協(xié)議服務(wù)器的servlet API最近已經(jīng)被標(biāo)準(zhǔn)化(參見(jiàn)http://jcp.org/en/jsr/detail?id=116)。但在實(shí)踐中,servelt的這種用法尚不流行,在此,我們只論述HTTP Servlet。</p><p>  

13、3 Servlet相對(duì)于“傳統(tǒng)”CGI的優(yōu)點(diǎn)</p><p>  和傳統(tǒng)CGI及許多類CGI技術(shù)相比,Java servelt效率更高、更易用、更強(qiáng)大、更容易移植、更安全、也更廉價(jià)。</p><p><b>  3.1 效率</b></p><p>  應(yīng)用傳統(tǒng)的CGI,針對(duì)每個(gè)HTTP請(qǐng)求都用啟動(dòng)一個(gè)新的進(jìn)程。如果CGI程序自身相對(duì)比較簡(jiǎn)短,

14、那么啟動(dòng)進(jìn)程的開(kāi)銷會(huì)占用大部分執(zhí)行時(shí)間。而使用servelt,Java虛擬機(jī)會(huì)一直運(yùn)行,并用輕量級(jí)的Java線程處理每個(gè)請(qǐng)求,而非重量級(jí)的操作系統(tǒng)進(jìn)程。類似地,應(yīng)用傳統(tǒng)的CGI技術(shù),如果存在對(duì)同一CGI程序的N個(gè)請(qǐng)求,那么CGI程序的代碼會(huì)載入內(nèi)存N次。同樣的情況,如果使用servlet則啟動(dòng)N個(gè)線程,單僅僅載入servlet類的單一副本。這種方式減少了服務(wù)器的內(nèi)存需求,通過(guò)實(shí)例化更少的對(duì)象從而節(jié)省了時(shí)間。最后,當(dāng)CGI程序結(jié)束對(duì)請(qǐng)求的

15、處理之后,程序結(jié)束。這種方式難以緩存計(jì)算結(jié)果,保持?jǐn)?shù)據(jù)庫(kù)連接打開(kāi),或是執(zhí)行依靠持續(xù)性數(shù)據(jù)的其他優(yōu)化。然而,servelt會(huì)一直停留在內(nèi)存中(即使請(qǐng)求處理完畢),因而可以直接存儲(chǔ)客戶請(qǐng)求之間的任意復(fù)雜數(shù)據(jù)。</p><p><b>  3.2 便利</b></p><p>  Servelt提供大量的基礎(chǔ)構(gòu)造,可以自動(dòng)分析和解碼HTML的表單數(shù)據(jù),讀取和設(shè)置HTTP報(bào)頭

16、,處理cookie,跟蹤會(huì)話,以及其他次類高級(jí)功能。而在CGI中,大部分工作都需要我們資金完成。另外,如果您已經(jīng)了解了Java編程語(yǔ)言,為什么還有學(xué)校Perl呢?您已經(jīng)承認(rèn)應(yīng)用Java技術(shù)編寫(xiě)的代碼要比Visual Basic,VBScript或C++編寫(xiě)的代碼更可靠,且更易重用,為什么還有倒退回去選擇那些語(yǔ)言來(lái)開(kāi)發(fā)服務(wù)器端的程序呢?</p><p><b>  3.3 強(qiáng)大</b><

17、/p><p>  Servlet支持常規(guī)CGI難以實(shí)現(xiàn)或根本不能實(shí)現(xiàn)的幾項(xiàng)功能。Servlet能夠直接于Web服務(wù)器對(duì)話,而常規(guī)的CGI程序做不到這一點(diǎn),至少在不使用服務(wù)器專有API的情況下是這樣。例如,與Web服務(wù)器的通信使得講相對(duì)URL轉(zhuǎn)換成具體的路徑名變得更為容易。多個(gè)servelt還可以共享數(shù)據(jù),從而易于實(shí)現(xiàn)數(shù)據(jù)庫(kù)連接共享和類似的資源共享優(yōu)化。Servelt還能維護(hù)請(qǐng)求之間的信息,使得諸如會(huì)話跟蹤和計(jì)算結(jié)果緩

18、存等技術(shù)變得更為簡(jiǎn)單。</p><p><b>  3.4 可移植性</b></p><p>  Servelt使用Java編程語(yǔ)言,并且遵循標(biāo)準(zhǔn)的API。所有主要的Web服務(wù)器。實(shí)際上都直接或通過(guò)插件支持servlet。因此。為Macromedia JRun編寫(xiě)的servlet,可以不經(jīng)過(guò)任何修改地在Apache Tomcat,Microsoft Internet

19、Information Server,IBM WebSphere 。iPlanet Enterprise Server。Oracle9i AS 或者StrNine WebStar上運(yùn)行。他們是java2平臺(tái)企業(yè)版的一部分,所以對(duì)servlet的支持越來(lái)越普遍。</p><p><b>  3.5 廉價(jià)</b></p><p>  對(duì)于開(kāi)發(fā)用的網(wǎng)站、低容量或中等容量網(wǎng)站

20、的部署,有大量免費(fèi)或極為廉價(jià)的Web服務(wù)器可供選擇。因此,通過(guò)使用servelt和jsp,我們可以從免費(fèi)或廉價(jià)的服務(wù)器開(kāi)始,在項(xiàng)目獲得初步成功后,在移植到更高性能或高級(jí)管理工具的昂貴的服務(wù)器上。這與其他CGI方案形成鮮明的對(duì)比,這些CGI方案在初期都需要為購(gòu)買(mǎi)專利軟件包投入大量的資金。</p><p>  價(jià)格和可移植性在某種程度上是相互關(guān)聯(lián)的。例如,Marty記錄了所有通過(guò)電子郵件向他發(fā)送問(wèn)題的讀者的所在國(guó)。印

21、度接近列表的頂端,可能僅次于美國(guó)。Marty曾在馬尼拉講授過(guò)jsp和servlet培訓(xùn)課程,那兒對(duì)servelt和jsp技術(shù)抱很大的興趣。</p><p>  那么,為什么印度和菲律賓都對(duì)這項(xiàng)技術(shù)著呢感興趣呢?我們推測(cè)答案可能分兩部分。首先,這兩個(gè)國(guó)家都擁有大量訓(xùn)練有素的軟件開(kāi)發(fā)人員。其次,這兩個(gè)國(guó)家的貨幣對(duì)美元的匯率都極為不利。因此,從美國(guó)公司那里購(gòu)買(mǎi)專用Web服務(wù)器會(huì)消耗掉項(xiàng)目的大部分前期資金。</p&

22、gt;<p>  但是,使用servlet 和JSP,他們能夠從免費(fèi)的服務(wù)器開(kāi)始:Apache Tomcat。項(xiàng)目取得成功之后,他們可以轉(zhuǎn)移到性能更高、管理更容易,但需要付費(fèi)的服務(wù)器。他們的servelt和jsp不需要重寫(xiě)編寫(xiě)。如果他們的項(xiàng)目變得更龐大,他們或許希望轉(zhuǎn)移到分布式環(huán)境。沒(méi)有問(wèn)題:他們可以轉(zhuǎn)而使用Macromedia JRun Professional,該服務(wù)器支持分布式應(yīng)用。同樣,他們的servelt和jsp

23、沒(méi)有任何部分需要重寫(xiě)。如果項(xiàng)目變得極為龐大,錯(cuò)綜復(fù)雜,他們或許希望使用Enterprise JavaBeans來(lái)封裝他們的商業(yè)邏輯。因此,他們可以切換到BEA WebLogic或Oracle9i AS。同樣,不需要對(duì)servlet和jsp做出更改。最后,如果他們的項(xiàng)目變得更龐大,他們或許將他從Linux轉(zhuǎn)移到運(yùn)行IBM WebSphere的IBM大型機(jī)上。他們還是不需要做出任何更改。</p><p><b&

24、gt;  3.6 安全</b></p><p>  傳統(tǒng)CGI程序中主要的漏洞來(lái)源之一就是,CGI程序常常由通過(guò)的操作系統(tǒng)外殼來(lái)執(zhí)行。因此,CGI程序必須仔細(xì)地過(guò)濾掉那些可能被外殼特殊處理的字符,如反引導(dǎo)和分號(hào)。實(shí)現(xiàn)這項(xiàng)預(yù)防措施的難度可能超出我們的想象,在廣泛應(yīng)用的CGI庫(kù)中,不斷發(fā)現(xiàn)由這類問(wèn)題引發(fā)的弱點(diǎn)。</p><p>  問(wèn)題的第二個(gè)來(lái)源是,一些CGI程序用不自動(dòng)檢查數(shù)組

25、和字符串邊界的語(yǔ)言編寫(xiě)而成。例如,在C和C++中,可以分配一個(gè)100個(gè)元素的數(shù)組,然后向第999個(gè)“元素“寫(xiě)入數(shù)據(jù)——實(shí)際上是程序內(nèi)存的隨機(jī)部分,這完全合法。因而,如果程序員忘記執(zhí)行這項(xiàng)檢查,就會(huì)將系統(tǒng)暴露在蓄意或偶然的緩沖區(qū)溢出攻擊之下。</p><p>  Servelt不存在這些問(wèn)題。即使servelt執(zhí)行系統(tǒng)調(diào)用激活本地操作系統(tǒng)上的程序,它也不會(huì)用到外殼來(lái)完成這項(xiàng)任務(wù)。當(dāng)然,數(shù)組邊界的檢查以及其他內(nèi)存包含

26、特性是java編程語(yǔ)言的核心部分。</p><p><b>  3.7 主流</b></p><p>  雖然存在許多很好的技術(shù),但是,如果提供商助支持他們,或開(kāi)發(fā)人員不知道如何使用這些技術(shù),那么它們的優(yōu)點(diǎn)又如何體現(xiàn)呢?servelt和jsp技術(shù)得到服務(wù)器提供商的廣泛支持,包括Apache,Oracle,IBM,Sybase,BEA,Maromedia,Causho,

27、Sun/iPlanet,New Atlanta,ATG,F(xiàn)ujitsu,Lutris,Silverstream,World Wide Web Consortinrm ,以及其他服務(wù)器。存在幾種低廉的插件,通過(guò)應(yīng)用這些插件,Microsoft IIS和Zeus也同樣支持servlet和jsp技術(shù),它們運(yùn)行在Windows,Unix/Linus,MacOS,VMS,和IBM大型機(jī)操作系統(tǒng)之上。它們用在航空業(yè)、電子商務(wù)、在線銀行、web搜索引

28、擎、門(mén)戶、大型金融網(wǎng)站、以及成百上千您日常光顧的其他網(wǎng)站。</p><p>  當(dāng)然,僅僅是流行并不能證明技術(shù)的優(yōu)越性。很多泛美的例子。但我們的立場(chǎng)是:服務(wù)器端Java本非一項(xiàng)新的、未經(jīng)證實(shí)的技術(shù)。</p><p><b>  參考文獻(xiàn):</b></p><p>  [1] Clifton G.M. Branham, Arthur Jonath

29、an .Servlets and JSP in an undergraduate database course[J].Proceedings of the International Conference on Parallel and Distributed Processing Techniques and Applications,2003(3):1490-1496.</p><p>  [2] Kirk

30、egaard, Christian.Static analysis for Java servlets and JSP[J].Lecture Notes in Computer Science (including subseries Lecture Notes in Artificial Intelligence and Lecture Notes in Bioinformatics),2006(4):336-352.</p&g

31、t;<p>  [3] Nakaike,Takuya.JSP Splitting for improving execution performance[J].Proceedings - International Symposium on Applications and the Internet,2004[8]:117-126.</p><p>  [4] Hassan, Doaa .Devel

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論