版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> JSP 概覽 </b></p><p> JSP是一種用于Web應(yīng)用程序開發(fā)的最新的Java技術(shù),它是建立在servlet 技術(shù)基礎(chǔ)之上的。盡管servlet 的功能在很多方面來說都很強(qiáng)大,但它通常屬于程序員專有的領(lǐng)域。在本章中,我們將介紹JSP 技術(shù)可以解決哪些問題,對(duì)JSP 頁面的剖析,servlet 和JSP 之間的關(guān)系,以及服務(wù)器處理JSP 頁面的方式
2、等。</p><p> 在任何Web 應(yīng)用程序中,都有一個(gè)服務(wù)器上的程序來處理請(qǐng)求并產(chǎn)生應(yīng)答。對(duì)于簡單的單頁式應(yīng)用程序,例如一個(gè)在線公告牌,你并不需要過多地考慮代碼的設(shè)計(jì),而且所有的邏輯都可以堆在一個(gè)程序中。但當(dāng)應(yīng)用程序變得越來越大時(shí)(如跨越了多個(gè)頁面,使用數(shù)據(jù)庫之類的外部資源,并為更多類型的客戶提供了更多的選項(xiàng)和支持),情況就完全不一樣了。站點(diǎn)的設(shè)計(jì)方式直接關(guān)系到它適應(yīng)新需求的能力以及繼續(xù)改進(jìn)的能力。令人高興
3、的是,JSP 技術(shù)可以作為所有類型Web 應(yīng)用程序的一個(gè)重要部分,從最簡單的到最復(fù)雜的應(yīng)用程序都是如此。因此,本章還將介紹推薦使用的Web應(yīng)用程序設(shè)計(jì)模型的基本概念,以及JSP和其他Java 技術(shù)在這個(gè)模型中所扮演的不同角色。</p><p> servlet 所帶來的問題</p><p> 在許多基于Java servlet 的應(yīng)用程序中,處理請(qǐng)求和產(chǎn)生應(yīng)答是由同一個(gè)servlet
4、類來執(zhí)行的。例3-1 顯示了servlet 通常的外觀:</p><p> 例3-1:典型的servlet 類</p><p> public class OrderServlet extends HttpServlet {</p><p> public void doGet((HttpServletRequest request,</p>&
5、lt;p> HttpServletResponse response)</p><p> throws ServletException, IOException {</p><p> response.setContentType("text/html");</p><p> PrintWriter out = response.
6、getWriter();</p><p> if (isOrderInfoValid(request)) {</p><p> saveOrderInfo(request);</p><p> out.println("<html>");</p><p> out.println(" <
7、head>");</p><p> out.println(" <title>Order Confirmation</title>");</p><p> out.println(" </head>");</p><p> out.println(" <
8、body>");</p><p> out.println(" <h1>Order Confirmation</h1>");</p><p> renderOrderInfo(request);</p><p> out.println(" </body>");<
9、/p><p> out.println("</html>");</p><p><b> }</b></p><p><b> ...</b></p><p> 如果你不是程序員,也不用為這些代碼中的細(xì)節(jié)擔(dān)心。關(guān)鍵的一點(diǎn)是,servlet 包含了請(qǐng)求的處理以及商務(wù)
10、邏輯(通過像isOrderInfoValid()和saveOrderInfo()這樣的方法來實(shí)現(xiàn)),并且產(chǎn)生了應(yīng)答的HTML代碼,這些代碼是通過調(diào)用println()函數(shù)而直接嵌入在servlet代碼中的。一個(gè)更加結(jié)構(gòu)化的servlet應(yīng)用程序可以將處理過程分成各個(gè)不同的部分,封裝在各種可重用的工具類中,也可能使用一個(gè)單獨(dú)的類庫來產(chǎn)生應(yīng)答中的實(shí)際的HTML元素。盡管如此,純servlet 的方案還是存在以下一些問題:</p>
11、<p> ● 開發(fā)和維護(hù)應(yīng)用程序的所有部分需要有深厚的Java編程知識(shí),因?yàn)樘幚泶a和HTML 元素是交織在一起的。</p><p> ● 改變應(yīng)用程序的外觀和風(fēng)格,或者加入對(duì)某種新類型客戶機(jī)(如WML客戶機(jī))的支持時(shí),都需要更新并重新編譯servlet 代碼。</p><p> ● 很難利用網(wǎng)頁開發(fā)工具的優(yōu)勢(shì)來設(shè)計(jì)應(yīng)用程序界面。如果使用這些工具來開發(fā)網(wǎng)頁布局的話,生成
12、的HTML 代碼必須被手工嵌入到servlet 代碼中,這個(gè)過程既耗時(shí)又容易出錯(cuò),而且極度枯燥乏味。</p><p> 引入JSP 可以將請(qǐng)求處理和商務(wù)邏輯與外觀呈現(xiàn)分離開來,如圖3-1 所示。此時(shí)并不是將HTML嵌入到代碼中,而是將所有靜態(tài)HTML放到JSP 頁面中,就像一個(gè)通常的網(wǎng)頁一樣,然后加入一些JSP 元素來產(chǎn)生頁面的動(dòng)態(tài)部分。對(duì)請(qǐng)求的處理工作可以留給servlet 程序員來做,商務(wù)邏輯則可以由Jav
13、aBeans 和EJB 組件來處理。</p><p> 圖3-1:將請(qǐng)求處理、商務(wù)邏輯和外觀呈現(xiàn)分離</p><p> 正如前面提到的那樣,將請(qǐng)求處理和商務(wù)邏輯與外觀呈現(xiàn)分開后,允許我們將開發(fā)任務(wù)分派給擁有不同技術(shù)的人們。Java 程序員負(fù)責(zé)實(shí)現(xiàn)請(qǐng)求處理和商務(wù)邏輯部分,網(wǎng)頁設(shè)計(jì)師則實(shí)現(xiàn)用戶界面,而且這兩組人員都可以使用手邊最好用的工具軟件來完成任務(wù)。其結(jié)果就是我們得到了更為多產(chǎn)的開發(fā)過
14、程。這也使得我們能夠單獨(dú)改變應(yīng)用程序的某個(gè)部分,例如修改商務(wù)規(guī)則,而不必觸及用戶界面。</p><p> 即便對(duì)于一名獨(dú)立工作且沒有編程技術(shù)的網(wǎng)頁設(shè)計(jì)師來說,這個(gè)模型也有著明顯的優(yōu)點(diǎn)。網(wǎng)頁設(shè)計(jì)師可以使用JSP標(biāo)準(zhǔn)行為和JSTL庫以及開源組織或商業(yè)公司提供的Java 組件,來開發(fā)擁有許多動(dòng)態(tài)特性的Web 應(yīng)用程序。</p><p><b> JSP 處理過程</b>
15、</p><p> 正如Web 服務(wù)器需要一個(gè)servlet 容器來提供對(duì)servlet 的接口一樣,服務(wù)器同樣也需要一個(gè)JSP 容器來處理JSP 頁面。JSP 容器負(fù)責(zé)解釋對(duì)JSP 頁面的請(qǐng)求。為了處理頁面中所有的JSP 元素,容器首先要把JSP 頁面轉(zhuǎn)化成servlet[稱為“JSP 頁面實(shí)現(xiàn)類(JSP Page implementation class)”]。這種轉(zhuǎn)換是非常直接的,所有的模板文本都被轉(zhuǎn)換成
16、與例3-1 中所示的手工編碼的servlet相類似的println()語句,而且所有的JSP 元素都被轉(zhuǎn)換成實(shí)現(xiàn)相應(yīng)動(dòng)態(tài)行為的Java 代碼。然后容器再編譯servlet類。</p><p> 將JSP 頁面轉(zhuǎn)換為servlet 并編譯該servlet,這就是翻譯階段(translation phase)。當(dāng)?shù)谝淮问盏綄?duì)某個(gè)頁面的請(qǐng)求時(shí),JSP容器會(huì)自動(dòng)開始對(duì)這個(gè)頁面的翻譯階段。當(dāng)然,翻譯階段需要一點(diǎn)時(shí)間來完成
17、,所以用戶會(huì)注意到當(dāng)某個(gè)JSP 頁面被第一次請(qǐng)求時(shí),會(huì)有一點(diǎn)延遲。翻譯階段也可以被顯式地啟動(dòng),這稱為JSP 頁面的預(yù)編譯(precompilation)。對(duì)JSP 頁面進(jìn)行預(yù)編譯可以避免延遲問題。在第十六章中將詳細(xì)介紹預(yù)編譯。</p><p> JSP容器還負(fù)責(zé)調(diào)用JSP頁面實(shí)現(xiàn)類(生成的servlet),以處理每個(gè)請(qǐng)求并生成應(yīng)答。這個(gè)階段被稱為“請(qǐng)求處理階段(request processing phase)
18、”。這兩個(gè)階段如圖3-3 所示。</p><p> 圖3-2:JSP 頁面翻譯階段和請(qǐng)求處理階段</p><p> 只要JSP 頁面保持不變,任何后續(xù)的請(qǐng)求都會(huì)直接進(jìn)入請(qǐng)求處理階段(也就是說,容器僅執(zhí)行類文件)。當(dāng)JSP 頁面被修改后,后續(xù)請(qǐng)求將再次通過翻譯階段,然后才進(jìn)入請(qǐng)求處理階段。</p><p> JSP 容器通常是作為一種servlet 來實(shí)現(xiàn)的,并
19、被配置為處理所有對(duì)頁面的請(qǐng)求。事實(shí)上,servlet 容器和JSP 容器這兩種容器通常都組合在一個(gè)名為web container 的軟件包中。所以,通過這種方式,JSP 頁面實(shí)際上是編寫servlet 的另外一種方式,而你卻不必是一名Java 編程高手。而且,除了翻譯階段,JSP 頁面的處理過程與常見的servlet完全相同:載入一次后多次重復(fù)執(zhí)行,直到服務(wù)器關(guān)閉為止。作為一種自動(dòng)生成的servlet,JSP 頁面繼承了第二章中所講的s
20、ervlet 的所有優(yōu)點(diǎn):平臺(tái)和廠商獨(dú)立性,集成化,高效性,可縮放性,健壯性和安全性。</p><p><b> JSP 元素</b></p><p> JSP 有三種類型的元素:指令元素(directive element)、行為元素(action element)和腳本元素(scripting elment)。</p><p><
21、b> 指令元素</b></p><p> 表3-1 所示的指令元素用于指定關(guān)于頁面本身的一些信息,這些信息在各個(gè)頁面請(qǐng)求間保持不變。這些信息內(nèi)容包括:是否需要會(huì)話跟蹤,對(duì)緩沖的要求,以及用于報(bào)告錯(cuò)誤的頁面名稱,等等。</p><p><b> 表3-1:指令元素</b></p><p> JavaBeans 組件<
22、;/p><p> JSP 元素,例如行為元素和腳本元素,經(jīng)常用來與JavaBeans 一起使用。簡單地說,一個(gè)JavaBeans 組件就是一個(gè)用特定的編碼約定編譯的Java 類。JavaBeans 組件通常用作容納描述應(yīng)用程序中某類實(shí)體(例如客戶或訂單)的信息的容器。</p><p> 使用MVC 設(shè)計(jì)JSP 應(yīng)用程序</p><p> JSP 技術(shù)可以應(yīng)用于各種
23、事務(wù),從最簡單的Web 應(yīng)用程序,例如一個(gè)在線電話簿或員工休假安排,到功能齊全的企業(yè)級(jí)應(yīng)用程序,例如人力資源應(yīng)用程序或復(fù)雜的在線購物站點(diǎn)。當(dāng)然,在各種應(yīng)用中,JSP 占的比例大小不一。在這一節(jié)中,我們將介紹一種同時(shí)適用于簡單應(yīng)用程序和復(fù)雜應(yīng)用程序的設(shè)計(jì)模型, 稱為MVC(MODEL-View-Controller,模型-視圖-控制器)。MVC 首先是由Xerox(施樂)公司在80 年代后期發(fā)表的一系列論文中提出的。使用MVC 的關(guān)鍵點(diǎn)是
24、將邏輯分成三個(gè)各自獨(dú)立的單位:模型、視圖和控制器。在一個(gè)服務(wù)器應(yīng)用程序中,我們通常將應(yīng)用程序分成以下三部分:商務(wù)邏輯、外觀呈現(xiàn)和請(qǐng)求處理。術(shù)語“商務(wù)邏輯(business logic)”指的是對(duì)應(yīng)用程序的數(shù)據(jù)進(jìn)行處理的規(guī)則,例如客戶、產(chǎn)品、訂單信息等數(shù)據(jù)。“外觀呈現(xiàn)(presentation)”指的是應(yīng)用程序數(shù)據(jù)是如何展示在用戶面前的,例如位置、字體和尺寸等。最后,“請(qǐng)求處理(request processing)”是指將商務(wù)邏輯和外觀
25、呈現(xiàn)聯(lián)系起來的部分。如果用MVC的術(shù)語來說,模型對(duì)應(yīng)著商務(wù)邏輯和數(shù)據(jù),視圖對(duì)應(yīng)外觀呈現(xiàn),控制器</p><p> 為什么要對(duì)JSP 使用這種設(shè)計(jì)模型?答案主要在于前兩個(gè)元素。應(yīng)用程序的數(shù)據(jù)結(jié)構(gòu)和邏輯(也就是模型)通常是一個(gè)應(yīng)用程序中最穩(wěn)定的部分,但是這些數(shù)據(jù)的表現(xiàn)形式(也就是視圖)卻是經(jīng)常改變的。只要看看那些站點(diǎn)為了跟上最新的網(wǎng)頁設(shè)計(jì)時(shí)尚而不斷更新門面的過程就知道了。然而,它們所表現(xiàn)的數(shù)據(jù)卻是保持不變的。<
26、;/p><p> 另一個(gè)說明為什么要把商務(wù)邏輯和外觀呈現(xiàn)分開的常見示例是,你可能需要用不同的語言來表現(xiàn)數(shù)據(jù),或者向內(nèi)部和外部用戶提供不同的數(shù)據(jù)子集。通過新型的設(shè)備來訪問數(shù)據(jù),例如使用移動(dòng)電話和PDA(Personal Digital Assistant,個(gè)人數(shù)字助理)是最新的趨勢(shì)。每種類型的客戶都要求有自己的表現(xiàn)格式。因此,順理成章,將商務(wù)邏輯和外觀呈現(xiàn)分開可以更容易地根據(jù)需求的改變來改進(jìn)應(yīng)用程序,并在不觸動(dòng)商務(wù)邏
27、輯的情況下開發(fā)新的外觀界面。</p><p> 本書中的絕大部分示例都使用了MVC模型。在第二部分中,JSP頁面既被用作控制器又被用作視圖,JavaBeans 組件被用作模型。第五章至第九章的示例使用一個(gè)單獨(dú)的JSP 頁面來處理一切事情,而第十章至第十三章將指導(dǎo)讀者如何為控制器和視圖使用單獨(dú)的頁面,從而使得整個(gè)應(yīng)用程序更易于維護(hù)?,F(xiàn)實(shí)世界中許多類型的應(yīng)用程序都可以使用這種方式來進(jìn)行開發(fā),但更重要的是,這種方式使
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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)論