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