版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 外文翻譯----servlet和jsp技術(shù)簡(jiǎn)述
- 外文文獻(xiàn)及翻譯----servlet和jsp技術(shù)簡(jiǎn)述
- 外文翻譯---servlet和jsp技術(shù)簡(jiǎn)介
- 外文翻譯--- servlet和jsp技術(shù)概要
- 外文文獻(xiàn)翻譯---servlet和jsp技術(shù)簡(jiǎn)介
- 外文翻譯---將servlet和jsp組合使用
- 將servlet和jsp組合使用-畢業(yè)論文外文翻譯
- 將servlet和jsp組合使用-畢業(yè)設(shè)計(jì)外文翻譯
- 圖書(shū)管理系統(tǒng)外文翻譯---將servlet和jsp組合使用
- http和servlet基礎(chǔ)外文翻譯
- 使用JSP和Servlet技術(shù)構(gòu)建BBS論壇系統(tǒng).pdf
- jsp 技術(shù)外文翻譯
- jsp技術(shù)外文翻譯
- jsp 外文翻譯--jsp及其web技術(shù)
- jsp技術(shù)概述外文翻譯
- 探析servlet、jsp web組件和jdbc編程
- jsp外文翻譯--jsp技術(shù)概述與應(yīng)用框架
- jsp技術(shù)網(wǎng)站設(shè)計(jì)外文翻譯
- 外文翻譯--jsp及其web技術(shù)
- 外文翻譯--jsp及其web技術(shù)
評(píng)論
0/150
提交評(píng)論