




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
Web層Web層設(shè)計(jì)中的問題與指南Web應(yīng)用程序部署客戶端5.顯示層技術(shù)1Web層5.顯示層技術(shù)15.1Web層Web層的工作就是接收來自于HTTP客戶端的輸入,將收到的輸入交給內(nèi)部的業(yè)務(wù)邏輯進(jìn)行處理,然后將結(jié)果通過HTTP協(xié)議送回客戶端。5.顯示層技術(shù)-Web層在基于Interent的分布式應(yīng)用框架中,顯示層一般由Web層和客戶端兩部分組成。25.1Web層Web層的工作就是接收來自于HTTP客戶端的JSP文件:從HTTP的請(qǐng)求中提取參數(shù),調(diào)用相應(yīng)的業(yè)務(wù)邏輯,處理HTTP會(huì)話,最后生成HTTP文檔??偟目磥?,這個(gè)模型的好處是簡單,但是它把業(yè)務(wù)邏輯和表現(xiàn)混在一塊,對(duì)大應(yīng)用來說,這個(gè)缺點(diǎn)是令人容忍不了的。兩種模型瀏覽器數(shù)據(jù)庫BeanJSP文件5.顯示層技術(shù)-Web層3JSP文件:從HTTP的請(qǐng)求中提取參數(shù),調(diào)用相應(yīng)的業(yè)務(wù)邏輯,MVC模式(Model/View/Controller)
5.顯示層技術(shù)-Web層定義:MVC是一個(gè)設(shè)計(jì)模式,它強(qiáng)制性的使應(yīng)用程序的輸入、處理和輸出分開。視圖:用戶看到并與之交互的界面。對(duì)老式的Web應(yīng)用程序來說,視圖就是由HTML元素組成的界面,在新式的Web應(yīng)用程序中,還包括MacromediaFlash和象XHTML,XML/XSL,WML等一些標(biāo)識(shí)語言和Webservices。4MVC模式(Model/View/Controller)5模型:表示企業(yè)數(shù)據(jù)和業(yè)務(wù)規(guī)則。在MVC的三個(gè)部件中,模型擁有最多的處理任務(wù)。被模型返回的數(shù)據(jù)是中立的,即模型與數(shù)據(jù)格式無關(guān)。5.顯示層技術(shù)-Web層控制器:接受用戶的輸入,根據(jù)請(qǐng)求決定調(diào)用模型構(gòu)件去處理請(qǐng)求,然后確定用哪個(gè)視圖來顯示模型處理返回的數(shù)據(jù)。5模型:表示企業(yè)數(shù)據(jù)和業(yè)務(wù)規(guī)則。在MVC的三個(gè)部件中,模型擁有66為什么要使用MVC5.顯示層技術(shù)-Web層多個(gè)視圖能共享一個(gè)模型。由于MVC已經(jīng)將數(shù)據(jù)和業(yè)務(wù)規(guī)則從表示層分開,無論用戶想要Flash界面或是WAP界面,用一個(gè)模型就能處理它們,可以最大化的重用代碼。模型返回的數(shù)據(jù)沒有進(jìn)行格式化,所以同樣的構(gòu)件能被不同界面使用。7為什么要使用MVC5.顯示層技術(shù)-Web層多個(gè)視圖能共享一5.顯示層技術(shù)-Web層由于運(yùn)用MVC的應(yīng)用程序的三個(gè)部件是相互對(duì)立,改變其中一個(gè)不會(huì)影響其它兩個(gè),所以依據(jù)這種設(shè)計(jì)思想能構(gòu)造良好的松偶合的構(gòu)件??梢允褂每刂破鱽砺?lián)接不同的模型和視圖去完成用戶的需求,這樣控制器可以為構(gòu)造應(yīng)用程序提供強(qiáng)有力的手段。85.顯示層技術(shù)-Web層由于運(yùn)用MVC的應(yīng)用程序的三個(gè)部件是MVC的缺點(diǎn)使用MVC需要精心的計(jì)劃,花費(fèi)相當(dāng)可觀的時(shí)間去考慮如何將MVC運(yùn)用到應(yīng)用程序,同時(shí)由于模型和視圖要嚴(yán)格的分離,這樣也給調(diào)試應(yīng)用程序到來了一定的困難。所以使用MVC同時(shí)也意味著要管理比以前更多的文件,增加了工作量。5.顯示層技術(shù)-Web層9MVC的缺點(diǎn)5.顯示層技術(shù)-Web層95.顯示層技術(shù)-Web層MVC設(shè)計(jì)模式是一個(gè)很好創(chuàng)建軟件的途徑,但是如果要隔離模型、視圖和控制器的構(gòu)件,則要重新思考應(yīng)用程序,尤其是應(yīng)用程序的構(gòu)架。MVC并不適合小型甚至中等規(guī)模的應(yīng)用程序,花費(fèi)大量時(shí)間將MVC應(yīng)用到規(guī)模并不是很大的應(yīng)用程序通常會(huì)得不償失。105.顯示層技術(shù)-Web層MVC設(shè)計(jì)模式是一個(gè)很好創(chuàng)建軟件交付應(yīng)用的功能到Web之上:應(yīng)用設(shè)計(jì)通常將業(yè)務(wù)邏輯從數(shù)據(jù)顯示中分離出來。Web層為后端應(yīng)用模型中的業(yè)務(wù)邏輯(可以被其它類型的客戶端共享訪問),接收HTTP輸入并產(chǎn)生HTTP輸出。Web層的功能5.顯示層技術(shù)-Web層11交付應(yīng)用的功能到Web之上:應(yīng)用設(shè)計(jì)通常將業(yè)務(wù)邏輯從數(shù)據(jù)顯示動(dòng)態(tài)內(nèi)容創(chuàng)建:Web層組件為產(chǎn)生動(dòng)態(tài)Web內(nèi)容來設(shè)計(jì)的。Servlets和JSP頁面可以基于用戶的輸入與上下文將來自于多種源的數(shù)據(jù)格式轉(zhuǎn)化為任意的數(shù)據(jù)格式。屏幕流程:由于屏幕流程往往對(duì)應(yīng)到特定的客戶端的動(dòng)作,因此決定下一屏幕(也即哪個(gè)頁面)應(yīng)該顯示什么的邏輯一般駐留在Web層。5.顯示層技術(shù)-Web層12動(dòng)態(tài)內(nèi)容創(chuàng)建:Web層組件為產(chǎn)生動(dòng)態(tài)Web內(nèi)容來設(shè)計(jì)的。Se數(shù)據(jù)表示和輸入收集:Web層和Web客戶端進(jìn)行通訊以使得格式化代碼的Web文檔自然就屬于Web層。其次,用戶的輸入以HTTP的PUT和GET動(dòng)作到達(dá)Web層,Web層收到這些動(dòng)作即將其翻譯為某種形式(經(jīng)常是某種形式的命令對(duì)象)以便其余的應(yīng)用可以理解。5.顯示層技術(shù)-Web層13數(shù)據(jù)表示和輸入收集:Web層和Web客戶端進(jìn)行通訊以使得格式狀態(tài)管理:Web層有一個(gè)簡單的、靈活的機(jī)制用來在一個(gè)用戶的會(huì)話期間積聚相應(yīng)的事務(wù)型數(shù)據(jù)和上下文數(shù)據(jù)。協(xié)議轉(zhuǎn)換:EJB服務(wù)器、數(shù)據(jù)庫、EIS層資源管理器和其它的網(wǎng)絡(luò)資源都有它們自己的協(xié)議。Web層作為一個(gè)軟件層,把來自于其它協(xié)議的請(qǐng)求和應(yīng)答翻譯為HTTP形式,或者,把HTTP請(qǐng)求和應(yīng)答翻譯成其它協(xié)議的形式。5.顯示層技術(shù)-Web層14狀態(tài)管理:Web層有一個(gè)簡單的、靈活的機(jī)制用來在一個(gè)用戶的會(huì)對(duì)多種潛在的客戶端類型的支持:Web使用HTTP協(xié)議來傳送數(shù)據(jù)給客戶端,數(shù)據(jù)通過MIME類型(一種擴(kuò)展的內(nèi)容分類機(jī)制)來描述。任何HTTP形式的客戶端都能夠加入一個(gè)Web應(yīng)用,且此客戶端能夠使用可以下載內(nèi)容的任意類型,即使內(nèi)容的類型還未存在。5.顯示層技術(shù)-Web層15對(duì)多種潛在的客戶端類型的支持:Web使用HTTP協(xié)議來傳送數(shù)J2EE的Web層技術(shù)提供了服務(wù)器的擴(kuò)展機(jī)制,該機(jī)制提供了一種基于服務(wù)器端腳本設(shè)計(jì)所帶來的好處,并且采用的是一種標(biāo)準(zhǔn)的、安全的、廠商中立的方法。Web應(yīng)用及支持它的Web層技術(shù)包括Web檔案(archive)、Web層組件模型、servlets,JSP及J2EE的Web容器。Web層技術(shù)5.顯示層技術(shù)-Web層16J2EE的Web層技術(shù)提供了服務(wù)器的擴(kuò)展機(jī)制,該機(jī)制提供了一Web檔案:對(duì)一個(gè)Web應(yīng)用的打包和部署之單元稱之為一個(gè)Web檔案(Webarchive,以“.war”作為文件名的結(jié)尾),此文件包含當(dāng)前Web應(yīng)用的所有類文件與資源,Web檔案也包含一個(gè)配置該應(yīng)用的部署描述器文件。5.顯示層技術(shù)-Web層17Web檔案:對(duì)一個(gè)Web應(yīng)用的打包和部署之單元稱之為一個(gè)WeWeb容器:一個(gè)容器是位于服務(wù)器里面的類之集合,它們相互合作以管理組件實(shí)例的生命周期并對(duì)那些實(shí)例提供數(shù)據(jù)和服務(wù)。J2EE規(guī)范定義了一個(gè)在Web容器與每一Web組件之間的約定/契約,用以定義組件的生命周期、組件必須實(shí)現(xiàn)的行為、以及服務(wù)器必須提供給該組件的服務(wù)。5.顯示層技術(shù)-Web層18Web容器:一個(gè)容器是位于服務(wù)器里面的類之集合,它們相互合作Web容器的作用:分發(fā)服務(wù)請(qǐng)求:容器分發(fā)服務(wù)請(qǐng)求給它所包含的組件,將上下文數(shù)據(jù)(如會(huì)話數(shù)據(jù)與當(dāng)前請(qǐng)求的信息)提供給組件,并且協(xié)調(diào)該組件響應(yīng)內(nèi)容的產(chǎn)生。HTTP請(qǐng)求的應(yīng)答:對(duì)于URL的HTTP請(qǐng)求翻譯成對(duì)組件實(shí)例的調(diào)用,并將基于組件所產(chǎn)生的內(nèi)容生成相應(yīng)的HTTP應(yīng)答。5.顯示層技術(shù)-Web層19Web容器的作用:分發(fā)服務(wù)請(qǐng)求:容器分發(fā)服務(wù)請(qǐng)求給它所包含的組件生命周期的管理:Web容器通過回叫(callback)的方式來通知組件的狀態(tài)變化如實(shí)例初始化和消亡,實(shí)現(xiàn)對(duì)其組件的生命周期管理。5.顯示層技術(shù)-Web層20組件生命周期的管理:Web容器通過回叫(callback)的Servlet是一種Java平臺(tái)服務(wù)器端擴(kuò)展組件,它運(yùn)行在一個(gè)Web容器的里面。在一個(gè)Web應(yīng)用中,每一Servlet的類都被映射成Web服務(wù)器中的一個(gè)或多個(gè)URL地址。當(dāng)服務(wù)器接收到對(duì)某個(gè)servlet的URL的一個(gè)HTTP請(qǐng)求(GET,POST等)的時(shí)候,服務(wù)器調(diào)用相應(yīng)的servlet的服務(wù)方法(service()),該方法產(chǎn)生此應(yīng)答的動(dòng)態(tài)內(nèi)容。
Servlet5.顯示層技術(shù)-Web層21Servlet是一種Java平臺(tái)服務(wù)器端擴(kuò)展組件,它運(yùn)行在一Servlets特點(diǎn)Servlets采用Java來書寫,因此能夠運(yùn)行在一個(gè)內(nèi)嵌在WebServer里面的JVM實(shí)例之上。Servlets通常比CGI程序或腳本要快,因?yàn)樗鼈冞\(yùn)行的形式是編譯過的字節(jié)碼,取代的是一個(gè)笨重的進(jìn)程或一個(gè)解釋腳本。5.顯示層技術(shù)-Web層22Servlets特點(diǎn)Servlets采用Java來書寫,因此Servlets比擴(kuò)展庫要安全,因?yàn)镴VM實(shí)例通??梢曰謴?fù)一個(gè)非正常退出的servlet。與服務(wù)器端腳本技術(shù)相比,servlets的移植性更好,并且它所提供的是一個(gè)更為豐富的標(biāo)準(zhǔn)服務(wù)的集合。5.顯示層技術(shù)-Web層23Servlets比擴(kuò)展庫要安全,因?yàn)镴VM實(shí)例通常可以恢復(fù)一由于Java平臺(tái)所固有的運(yùn)行時(shí)的可移植性,編譯過的servlet類具備二進(jìn)制形式的跨硬件平臺(tái)的移植性;servlet與其容器之間的契約由JavaServlet規(guī)范予以定義并且由J2EE兼容測試包檢驗(yàn)過(在一個(gè)J2EE品牌的產(chǎn)品里),因此servlets也可以跨Web服務(wù)器兼容。5.顯示層技術(shù)-Web層24由于Java平臺(tái)所固有的運(yùn)行時(shí)的可移植性,編譯過的servlServlet開發(fā)人員可以創(chuàng)建能在所有J2EE品牌服務(wù)器上正確運(yùn)行的產(chǎn)品,J2EE服務(wù)器用戶可以更換技術(shù)廠商而只做很小的甚至根本就不需要更改它們的應(yīng)用代碼。打包和部署servlets(及其它的Web層組件和資源)的規(guī)范化和標(biāo)準(zhǔn)化,確保了一個(gè)Web應(yīng)用不用作任何代碼修改或重建,就可以作為一個(gè)單獨(dú)的單元部署到任何J2EE品牌的服務(wù)器里面。5.顯示層技術(shù)-Web層25Servlet開發(fā)人員可以創(chuàng)建能在所有J2EE品牌服務(wù)器上正Servlet存在的問題Servlets寫起來比較冗長:很多產(chǎn)生HTML的servlets比起Web頁面要長一些,它帶有以System.out.println()環(huán)繞的每一行、在每一個(gè)雙引號(hào)之前都有反斜線符號(hào)、并且可能一塊邏輯或這里和那里的重述。這樣的servlets寫起來比較煩悶,而且讀和維護(hù)都是比較困難的。5.顯示層技術(shù)-Web層26Servlet存在的問題Servlets寫起來比較冗長:很Servlets是程序:對(duì)于所有的哪怕是最簡單的情況,servlets都需要編程人員來開發(fā)和維護(hù)。程序員不必熟悉圖形設(shè)計(jì),圖形設(shè)計(jì)人員經(jīng)常不是程序員。聯(lián)合編程邏輯和先進(jìn)的可視化設(shè)計(jì)的servlets對(duì)于程序員和圖形設(shè)計(jì)人員來講,更改起來都是比較困難的。5.顯示層技術(shù)-Web層27Servlets是程序:對(duì)于所有的哪怕是最簡單的情況,seServlet代碼不易重用:基于HTML的Web應(yīng)用通常包括大量的重復(fù),很多使用的場合多次放在一個(gè)Web應(yīng)用中,HTML頁面經(jīng)常包含重復(fù)的樣式元素來提供一致的外觀和感覺。但是servlet的API提供很少對(duì)于重用業(yè)務(wù)或顯示邏輯的直接支持,結(jié)果通常是剪切與粘貼式的編碼風(fēng)格犧牲了一致性與可維護(hù)性。5.顯示層技術(shù)-Web層28Servlet代碼不易重用:基于HTML的Web應(yīng)用通常包Servlets混合功能代碼和顯示代碼在一起:這種做法限制看起來很小,實(shí)際上它往往是所有其它問題的根源?;镜膯栴}是業(yè)務(wù)邏輯和數(shù)據(jù)表示基本上是不同的層面,將這兩者混合在一種單一的技術(shù)(既servlet)導(dǎo)致的是混淆設(shè)計(jì)、實(shí)現(xiàn)和維護(hù)。5.顯示層技術(shù)-Web層29Servlets混合功能代碼和顯示代碼在一起:這種做法限制Servlet的建議使用servlets實(shí)現(xiàn)服務(wù):除了產(chǎn)生二進(jìn)制內(nèi)容以外,servlets一般提供無可視化的功能。一個(gè)servlet可以執(zhí)行它所提供的服務(wù)—模板化、安全、個(gè)性化、MVC控制—然后選擇一個(gè)顯示組件并轉(zhuǎn)交請(qǐng)求給該組件去顯示。5.顯示層技術(shù)-Web層使用servlets作為控制器:一個(gè)Web層控制器,用來決定如何處理一個(gè)請(qǐng)求并選擇下一個(gè)要顯示的視圖。30Servlet的建議使用servlets實(shí)現(xiàn)服務(wù):除了產(chǎn)生JSP一個(gè)JSP頁面是一個(gè)模板文檔,其中包含有特殊的標(biāo)記用來執(zhí)行內(nèi)嵌的邏輯。JSP頁面可以被用來指定任何類型的動(dòng)態(tài)內(nèi)容,但是它們主要用來創(chuàng)建結(jié)構(gòu)化的內(nèi)容(如HTML,XML,XHTML,PDF)。5.顯示層技術(shù)-Web層31JSP一個(gè)JSP頁面是一個(gè)模板文檔,其中包含有特殊的標(biāo)記用來JSP特點(diǎn)JSP頁面比servlets更容易書寫:JSP頁面看起來非常象HTML,帶有少量的附加標(biāo)記,沒有重復(fù)的println()語句或者也不需要反斜線回退字符.5.顯示層技術(shù)-Web層32JSP特點(diǎn)JSP頁面比servlets更容易書寫:JSP頁面JSP頁面不需要編程技能:JSP頁面看起來很象它生成的文檔類型,文檔格式的專家可以不是一個(gè)程序員即可以直接編輯之。任何實(shí)際的編程或多或少地從顯示代碼中分離出來,因此程序員和文檔格式專家可以相對(duì)獨(dú)立地進(jìn)行工作.5.顯示層技術(shù)-Web層33JSP頁面不需要編程技能:JSP頁面看起來很象它生成的文檔類JSP頁面支持代碼的重用:JSP頁面有顯式代碼重用機(jī)制。在一JSP頁面里面有一些特殊的標(biāo)記來使用JavaBeans組件,編程人員可為其特殊的用途來定義可定制標(biāo)記。JSP標(biāo)記語言中的包括指示提供兩種文檔內(nèi)容的重用:編譯時(shí)和運(yùn)行時(shí)。這些機(jī)制可以通過減少重復(fù)代碼進(jìn)而提高代碼的質(zhì)量.5.顯示層技術(shù)-Web層34JSP頁面支持代碼的重用:JSP頁面有顯式代碼重用機(jī)制。在JSP頁面將功能從顯示中分離開來:JSP頁面格式是一針對(duì)某一文檔的模板,其中帶有業(yè)務(wù)邏輯,該邏輯要么嵌在JSP頁面中的特殊標(biāo)記里(作為腳本元素),要么采用beans或可定制標(biāo)記。分離功能(業(yè)務(wù)邏輯)與形式(顯示)允許程序員和文檔作者集中于他們的核心技能之上。這種對(duì)開發(fā)角色的劃分是J2EE平臺(tái)的主要優(yōu)勢之一。5.顯示技術(shù)-Web層35JSP頁面將功能從顯示中分離開來:JSP頁面格式是一針對(duì)某JSP工作流程一個(gè)JSP頁面對(duì)其作者來說象一個(gè)文檔,然而Web容器實(shí)際上把JSP頁面作為servlets來實(shí)現(xiàn)。在一個(gè)JSP頁面可以運(yùn)行在一JVM實(shí)例之上時(shí),它必須被轉(zhuǎn)換成(通過一個(gè)轉(zhuǎn)換器)一個(gè)servlet,該servlet然后被編譯成一個(gè)可以裝載的類。一個(gè)JSP通常直接部署到一個(gè)Web容器之中,由容器來處理相應(yīng)的翻譯和編譯。5.顯示層技術(shù)-Web層36JSP工作流程5.顯示層技術(shù)-Web層363737JSP的建議使用JSP頁面作為結(jié)構(gòu)文本內(nèi)容的模板:JSP頁面大多數(shù)是用來生成文本的內(nèi)容通常有一致結(jié)構(gòu)的文本。JSP頁面也被用來產(chǎn)生非結(jié)構(gòu)化的文本文件。JSP頁面通常并不適合于以下的幾種情形:創(chuàng)建二進(jìn)制內(nèi)容、激活應(yīng)用域邏輯、創(chuàng)建帶有高度可變結(jié)構(gòu)的內(nèi)容、或控制請(qǐng)求路由等等。5.顯示層技術(shù)-Web層38JSP的建議使用JSP頁面作為結(jié)構(gòu)文本內(nèi)容的模板:JSP頁面避免對(duì)邏輯標(biāo)記的大量使用:標(biāo)準(zhǔn)標(biāo)記庫通常提供一些邏輯標(biāo)記用來循環(huán)、執(zhí)行迭代、評(píng)估表達(dá)式、作出決定等。應(yīng)該意識(shí)到使用標(biāo)準(zhǔn)標(biāo)記庫可以執(zhí)行JSP頁面中很大一部分邏輯。將邏輯放在程序以外的可定制標(biāo)記之中提供的優(yōu)勢較少,并且違背了邏輯和顯示的分離原則。5.顯示層技術(shù)-Web層39避免對(duì)邏輯標(biāo)記的大量使用:標(biāo)準(zhǔn)標(biāo)記庫通常提供一些邏輯標(biāo)記用來正確使用JSPinclude指示與動(dòng)作:<jsp:include>動(dòng)作允許將或靜態(tài)的或動(dòng)態(tài)的內(nèi)容包含進(jìn)此JSP頁面,指示通常用來模塊化Web頁面,重用內(nèi)容,并保持Web頁面的長度可以被管理。如果濫用之,則使代碼膨脹。5.顯示層技術(shù)-Web層40正確使用JSPinclude指示與動(dòng)作:<jsp:incWeb層狀態(tài)一個(gè)servlet、servlet過濾器或JSP頁面通常創(chuàng)建相應(yīng)的帶有包含在該服務(wù)請(qǐng)求中數(shù)據(jù)的應(yīng)答,不過經(jīng)常需要來自于其它源的數(shù)據(jù)來處理它的工作。用來創(chuàng)建一個(gè)應(yīng)答數(shù)據(jù)的一個(gè)Web層組件稱為狀態(tài)(state)。Web層狀態(tài)的每一項(xiàng)都有一個(gè)范圍(scope),用來決定此項(xiàng)目的訪問型及其生命周期。5.顯示層技術(shù)-Web層41Web層狀態(tài)一個(gè)servlet、servlet過濾器或JSP應(yīng)用范圍/作用域(Applicationscope)應(yīng)用范圍狀態(tài)存貯在Web層的ServletContext對(duì)象中,應(yīng)用范圍中的對(duì)象在此應(yīng)用內(nèi)所有的servlets之間共享,線程安全由servlet開發(fā)人員負(fù)責(zé)。應(yīng)用范圍中的狀態(tài)在應(yīng)用的生存期間一直存在,除非它被顯式地刪除。為一個(gè)Web應(yīng)用的“全局內(nèi)存”。5.顯示層技術(shù)-Web層42應(yīng)用范圍/作用域(Applicationscope)應(yīng)用范servletAPI提供將數(shù)據(jù)與一個(gè)用戶會(huì)話關(guān)聯(lián)起來的機(jī)制,在后續(xù)的請(qǐng)求過程中訪問或修改此數(shù)據(jù)。對(duì)一個(gè)HttpServlet而言的會(huì)話范圍狀態(tài)存貯在Web層的HttpSession對(duì)象(由該服務(wù)方法的HttpServletRequest參數(shù)來提供)之中。是對(duì)于特定于某一用戶會(huì)話的數(shù)據(jù)。會(huì)話范圍(Sessionscope)5.顯示層技術(shù)-Web層43servletAPI提供將數(shù)據(jù)與一個(gè)用戶會(huì)話關(guān)聯(lián)起來的機(jī)制一個(gè)Web組件可以讀或修改在請(qǐng)求范圍內(nèi)的數(shù)據(jù)然后轉(zhuǎn)交此請(qǐng)求給另一組件。請(qǐng)求被轉(zhuǎn)交給的組件然后就可以訪問到此狀態(tài)。請(qǐng)求范圍內(nèi)的狀態(tài)存貯在一個(gè)ServletRequest對(duì)象里面,因此它可以被接收該請(qǐng)求的任何組件訪問到。特定于一個(gè)單獨(dú)的服務(wù)器請(qǐng)求的數(shù)據(jù),當(dāng)服務(wù)方法返回的時(shí)候被丟棄。請(qǐng)求范圍(Requestscope)5.顯示層技術(shù)-Web層44一個(gè)Web組件可以讀或修改在請(qǐng)求范圍內(nèi)的數(shù)據(jù)然后轉(zhuǎn)交此請(qǐng)求給僅僅適用于JSP頁面,以指示該數(shù)據(jù)僅在當(dāng)前頁面的上下文中有效。頁面范圍狀態(tài)存貯在一個(gè)JSP頁面的PageContext對(duì)象中。當(dāng)一個(gè)JSP轉(zhuǎn)交給或包含另一個(gè)的時(shí)候,每一個(gè)頁面定義它自己的范圍。頁面范圍的狀態(tài)在程序從該頁面中退出的時(shí)候被丟棄掉。頁面范圍(Pagescope)5.顯示層技術(shù)-Web層45僅僅適用于JSP頁面,以指示該數(shù)據(jù)僅在當(dāng)前頁面的上下文中有效Web層會(huì)話狀態(tài)的優(yōu)勢易于實(shí)現(xiàn):因?yàn)閼?yīng)用服務(wù)器處理了HttpSession的實(shí)現(xiàn),開發(fā)人員從對(duì)管理會(huì)話狀態(tài)中所需要的設(shè)計(jì)、實(shí)現(xiàn)、測試代碼的細(xì)節(jié)中解脫出來。優(yōu)化:一個(gè)應(yīng)用服務(wù)器的HttpSession的實(shí)現(xiàn)是根據(jù)它本身作了優(yōu)化和測試的,因此也許比一個(gè)客戶化的解決方案更為有效、可靠。5.顯示層技術(shù)-Web層46Web層會(huì)話狀態(tài)的優(yōu)勢易于實(shí)現(xiàn):因?yàn)閼?yīng)用服務(wù)器處理了Http潛在的更豐富的功能集:一個(gè)應(yīng)用服務(wù)器對(duì)于會(huì)話狀態(tài)管理的實(shí)現(xiàn)可能包括諸如故障恢復(fù)、集群支持等功能,這已超出了J2EE平臺(tái)規(guī)范的基本需求。系統(tǒng)架構(gòu)師可以區(qū)分服務(wù)器平臺(tái)所提供的功能,并選擇出最能適合當(dāng)前應(yīng)用需求的平臺(tái),與此同時(shí)維護(hù)J2EE技術(shù)的兼容性和可移植性。5.顯示層技術(shù)-Web層47潛在的更豐富的功能集:一個(gè)應(yīng)用服務(wù)器對(duì)于會(huì)話狀態(tài)管理的實(shí)現(xiàn)可可移植性:HttpSession接口是標(biāo)準(zhǔn)化的,因此在所有的J2EE品牌的應(yīng)用服務(wù)器中都必須通過J2EE兼容性測試包(CTS)??缮炜s性:HttpSession可以有效地管理會(huì)話狀態(tài)的存貯,將它放在緩存和/或服務(wù)器集群之中。5.顯示層技術(shù)-Web層48可移植性:HttpSession接口是標(biāo)準(zhǔn)化的,因此在所有的可進(jìn)化性(Evolvability):應(yīng)用服務(wù)器廠商會(huì)堅(jiān)持不懈地改善它們的產(chǎn)品及其功能,甚至在服務(wù)器增加某些提高性能和可靠性功能的時(shí)候,它將維護(hù)已有的接口以保證兼容性。一個(gè)HttpSession實(shí)現(xiàn)今天能正常工作,明天也將工作得更好,因?yàn)榉?wù)器版本的提升很少或根本就不做對(duì)源碼的修改。5.顯示層技術(shù)-Web層49可進(jìn)化性(Evolvability):應(yīng)用服務(wù)器廠商會(huì)堅(jiān)持不5.2Web層設(shè)計(jì)問題及其指南Web層技術(shù)選擇5.顯示層技術(shù)-Web層設(shè)計(jì)問題及其指南Servlets和JSP頁面都是Web層組件,但是在設(shè)計(jì)中扮演的是不同的角色。XML可以被用來作為針對(duì)數(shù)據(jù)互操作性的“中心”格式,且可以在客戶端或服務(wù)器端以CSS或XSL的風(fēng)格進(jìn)行設(shè)計(jì)。505.2Web層設(shè)計(jì)問題及其指南Web層技術(shù)選擇5.顯示層何時(shí)使用JSP頁面:通常,JSP頁面大多用來作為顯示組件,在一個(gè)MVC應(yīng)用中扮演View角色,或者用來創(chuàng)建結(jié)構(gòu)化的、非可視化的內(nèi)容,如XML消息。何時(shí)使用servlets:Servlets主要用來作為MVC控制器組件,作為框架支持組件(諸如模板處理器、安全適配器、日志器等等),或者作為對(duì)二進(jìn)制內(nèi)容的顯示組件。5.顯示層技術(shù)-Web層設(shè)計(jì)問題及其指南51何時(shí)使用JSP頁面:通常,JSP頁面大多用來作為顯示組件,在在交互式Web應(yīng)用里面的XML:XML可以被使用于交互式的應(yīng)用中。一個(gè)Web層控制器可以翻譯HTTP請(qǐng)求為對(duì)WebService方法的調(diào)用,并能使用CSS、XSL或可定制代碼來轉(zhuǎn)換調(diào)用的結(jié)果為正在請(qǐng)求的客戶端的顯示格式。這種方法只有在沒有更快、更可靠、或更輕量級(jí)的方式去訪問應(yīng)用模型的時(shí)候才被建議使用,如直接訪問底層的企業(yè)級(jí)Java組件。5.顯示層技術(shù)-Web層設(shè)計(jì)問題及其指南52在交互式Web應(yīng)用里面的XML:XML可以被使用于交互式的應(yīng)Web層狀態(tài)維護(hù)狀態(tài)維護(hù)決定對(duì)應(yīng)用性能、可用性、伸縮性等有著極大的影響。此類決定包括選擇相應(yīng)的層來管理狀態(tài),對(duì)狀態(tài)的每一項(xiàng)選擇相應(yīng)的作用范圍,并且有效地跟蹤一分布式環(huán)境下的對(duì)話狀態(tài)。5.顯示層技術(shù)-Web層設(shè)計(jì)問題及其指南53Web層狀態(tài)維護(hù)5.顯示層技術(shù)-Web層設(shè)計(jì)問題及其指南Web層設(shè)計(jì)指南可維護(hù)性客戶端獨(dú)立性及代碼重用隔離開發(fā)人員的技能集將業(yè)務(wù)邏輯從顯示邏輯中分離出來:5.顯示層技術(shù)-Web層設(shè)計(jì)問題及其指南54Web層設(shè)計(jì)指南可維護(hù)性將業(yè)務(wù)邏輯從顯示邏輯中分離出來:5.在一個(gè)應(yīng)用設(shè)計(jì)中創(chuàng)建業(yè)務(wù)和顯示層是一個(gè)很好的習(xí)慣。業(yè)務(wù)層只提供應(yīng)用功能而不會(huì)有對(duì)顯示的引用,顯示層為用戶(或另一系統(tǒng))顯示數(shù)據(jù)與輸入提示,委托應(yīng)用功能給業(yè)務(wù)層。業(yè)務(wù)規(guī)則能夠在一個(gè)層中被修改,而對(duì)顯示層作很少或根本不作修改。應(yīng)用的顯示或工作流程可以改變而不會(huì)影響業(yè)務(wù)邏輯代碼。5.顯示層技術(shù)-Web層設(shè)計(jì)問題及其指南55在一個(gè)應(yīng)用設(shè)計(jì)中創(chuàng)建業(yè)務(wù)和顯示層是一個(gè)很好的習(xí)慣。業(yè)務(wù)層只提將協(xié)議置于模型API之外一個(gè)模型類應(yīng)該在一個(gè)Web容器外是可用的。對(duì)Web容器的模型依賴導(dǎo)致不必要的耦合,降低設(shè)計(jì)清晰性并使維護(hù)和單元測試更為困難。5.顯示層技術(shù)-Web層設(shè)計(jì)問題及其指南56將協(xié)議置于模型API之外一個(gè)模型類應(yīng)該在一個(gè)Web容器外是可5.3Web應(yīng)用程序部署Web應(yīng)用是一個(gè)Servlet、HTML頁面、類和其它資源的組合,應(yīng)包含如下組件。Web應(yīng)用組件構(gòu)成5.顯示層技術(shù)-Web應(yīng)用程序部署575.3Web應(yīng)用程序部署Web應(yīng)用是一個(gè)Servlet、HServletJSP實(shí)用程序類靜態(tài)文檔(HTML、圖片和聲音等)客戶端的Applet、Bean和類等描述性的元信息,用于把上面的所有組件組合到一起5.顯示層技術(shù)-Web應(yīng)用程序部署58Servlet5.顯示層技術(shù)-Web應(yīng)用程序部署58設(shè)置J2EE服務(wù)器環(huán)境變量:為運(yùn)行J2EE服務(wù)器環(huán)境通常必須設(shè)置環(huán)境變量,而且不同的廠家實(shí)現(xiàn)和操作系統(tǒng)平臺(tái)上會(huì)有很大變化。配置J2EE服務(wù)器屬性:為大部分J2EE服務(wù)器實(shí)現(xiàn)配置屬性,使其適合于特定的網(wǎng)絡(luò)和操作環(huán)境。Web應(yīng)用部署5.顯示層技術(shù)-Web應(yīng)用程序部署59設(shè)置J2EE服務(wù)器環(huán)境變量:為運(yùn)行J2EE服務(wù)器環(huán)境通常必須編譯J2EE應(yīng)用程序代碼:所有J2EEWeb組件代碼必須用標(biāo)準(zhǔn)的Java編譯器編譯。創(chuàng)建J2EEWeb應(yīng)用程序部署描述符:根據(jù)以前定義的Web應(yīng)用程序DTD創(chuàng)建一個(gè)基于XML的發(fā)布描述符。5.顯示層技術(shù)-Web應(yīng)用程序部署60編譯J2EE應(yīng)用程序代碼:所有J2EEWeb組件代碼必須用封裝J2EEWeb應(yīng)用程序代碼:Web發(fā)布描述符、所有編譯好的J2EEServlet類、所有HTML文件、所有圖形文件以及其它Web資源需要封裝到一個(gè)帶.war擴(kuò)展名的Web應(yīng)用程序歸檔文件中。5.顯示層技術(shù)-Web應(yīng)用程序部署61封裝J2EEWeb應(yīng)用程序代碼:Web發(fā)布描述符、所有編啟動(dòng)J2EE服務(wù)器:這一步要啟動(dòng)J2EE兼容的服務(wù)器。啟動(dòng)服務(wù)器的機(jī)制通常與廠家有關(guān),但也可以簡單到在命令行中激發(fā)單一的啟動(dòng)命令。創(chuàng)建一個(gè)J2EE應(yīng)用程序描述符:必須創(chuàng)建一個(gè)J2EE應(yīng)用程序部署描述符把一個(gè)或多個(gè)Web、EJB和應(yīng)用程序客戶模塊連接到J2EE應(yīng)用程序中。5.顯示層技術(shù)-Web應(yīng)用程序部署62啟動(dòng)J2EE服務(wù)器:這一步要啟動(dòng)J2EE兼容的服務(wù)器。啟動(dòng)服封裝J2EE應(yīng)用程序代碼:應(yīng)用程序部署描述符、Web應(yīng)用程序、EJB應(yīng)用程序和應(yīng)用程序客戶需要封裝到一個(gè)企業(yè)級(jí)歸檔(EAR)文件中,擴(kuò)展名為.ear。發(fā)布J2EEWeb應(yīng)用程序代碼:最后,集成J2EE應(yīng)用程序部署到J2EE服務(wù)器環(huán)境中供企業(yè)應(yīng)用程序客戶訪問。5.顯示層技術(shù)-Web應(yīng)用程序部署63封裝J2EE應(yīng)用程序代碼:應(yīng)用程序部署描述符、Web應(yīng)用程序5.3客戶層對(duì)一個(gè)企業(yè)級(jí)應(yīng)用的用戶,客戶端就是應(yīng)用??蛻舳舜碛脩粝蚍?wù)器發(fā)出請(qǐng)求,并將請(qǐng)求的結(jié)果顯示給用戶。客戶端經(jīng)常加強(qiáng)數(shù)據(jù)的一致性規(guī)則,并可能實(shí)現(xiàn)一些業(yè)務(wù)邏輯。因此,挑選一種能最好地適合應(yīng)用的需求且提供給用戶一個(gè)豐富接口的客戶端配置是很重要的。5.顯示層技術(shù)-Web層645.3客戶層對(duì)一個(gè)企業(yè)級(jí)應(yīng)用的用戶,客戶端就是應(yīng)用??蛻暨\(yùn)行設(shè)備:一個(gè)便攜機(jī)、一個(gè)臺(tái)式機(jī),或在一個(gè)PDA或電話上。J2EE平臺(tái)支持的客戶端網(wǎng)絡(luò)環(huán)境:從一個(gè)企業(yè)的Intrnet或互聯(lián)網(wǎng)可以連接到一個(gè)有線或無線的網(wǎng)絡(luò)。網(wǎng)絡(luò)環(huán)境:從一個(gè)企業(yè)的Intrnet或互聯(lián)網(wǎng)可以連接到一個(gè)有線或無線的網(wǎng)絡(luò)。5.顯示層技術(shù)-Web層65運(yùn)行設(shè)備:一個(gè)便攜機(jī)、一個(gè)臺(tái)式機(jī),或在一個(gè)PDA或電話上。J顯示方式:瀏覽器、GUI組件實(shí)現(xiàn)方式:HTML或Java,甚至可以是VisualBasic。實(shí)現(xiàn)功能:企業(yè)信息系統(tǒng)(EIS)客戶端:EIS客戶端使用一種接口(如JDBCAPI等)連接到EIS層。針對(duì)EIS的編程模型通常遵循兩層或三層客戶機(jī)/服務(wù)器體系結(jié)構(gòu)的規(guī)范。5.顯示層技術(shù)-Web層66顯示方式:瀏覽器、GUI組件實(shí)現(xiàn)方式:HTML或Java,甚EJB客戶端:使用Java技術(shù)的EJB客戶端通過RMI(遠(yuǎn)程方法調(diào)用)API來連接到EJB層。這種情況下,傳輸?shù)膮f(xié)議為IIOP(Inter-ORBProtocol)。RMI機(jī)制為Java客戶端開發(fā)人員隱藏了IIOP的細(xì)節(jié),但是使用非Java技術(shù)的開發(fā)人員也可以通過IIOP連接到EJB層。5.顯示層技術(shù)-Web層67EJB客戶端:使用Java技術(shù)的EJB客戶端通過RMI(遠(yuǎn)Web客戶端:Web客戶端使用HTTP作為傳輸協(xié)議連接到Web層。Web客戶端的類型不僅包括瀏覽器,而且包括JavaApplets、MIDIets和應(yīng)用以及其它的企業(yè)服務(wù)。5.顯示層技術(shù)-Web層68Web客戶端:Web客戶端使用HTTP作為傳輸協(xié)議連接到We服務(wù)器端體系結(jié)構(gòu):在Web上最簡單和最常用的體系結(jié)構(gòu)是完全依靠服務(wù)器來提供用戶界面內(nèi)容、它的構(gòu)造邏輯以及與用戶的相互作用。每一個(gè)用戶動(dòng)作都產(chǎn)生一個(gè)對(duì)服務(wù)器的請(qǐng)求,服務(wù)器處理這個(gè)請(qǐng)求并計(jì)算結(jié)果,生成一個(gè)新的頁面再次發(fā)送到客戶端??蛻舳巳N體系結(jié)構(gòu)5.顯示層技術(shù)-Web層69服務(wù)器端體系結(jié)構(gòu):在Web上最簡單和最常用的體系結(jié)構(gòu)是完全依用戶動(dòng)作內(nèi)容和控制的產(chǎn)生瀏覽器客戶機(jī)響應(yīng)請(qǐng)求內(nèi)容構(gòu)建業(yè)務(wù)邏輯控制邏輯服務(wù)器服務(wù)器端體系結(jié)構(gòu)好處:所需客戶端資源少,應(yīng)用邏輯不用裝入,啟動(dòng)用戶交互所需的網(wǎng)絡(luò)通信量很少。支持的技術(shù)包括JavaServlet,JavaServerPages。70用戶動(dòng)作內(nèi)容和控制的產(chǎn)生瀏覽器客戶機(jī)響應(yīng)請(qǐng)求內(nèi)容構(gòu)建業(yè)務(wù)邏輯客戶端腳本體系結(jié)構(gòu):該方式就是將腳本作為HTML頁面的一部分,將動(dòng)態(tài)內(nèi)容從服務(wù)器傳送給客戶端。腳本通常包括一些不需與服務(wù)器應(yīng)用程序通信就能在客戶端執(zhí)行的應(yīng)用邏輯。復(fù)雜邏輯仍然由服務(wù)器執(zhí)行。5.顯示層技術(shù)-Web層71客戶端腳本體系結(jié)構(gòu):該方式就是將腳本作為HTML頁面的一部分客戶端腳本體系結(jié)構(gòu)用戶請(qǐng)求頁面切換頁面/簡單控制邏輯瀏覽器客戶機(jī)響應(yīng)內(nèi)容構(gòu)建+邏輯嵌入商業(yè)邏輯切換/復(fù)雜控制邏輯服務(wù)器產(chǎn)生內(nèi)容修改72客戶端腳本體系結(jié)構(gòu)用戶請(qǐng)求頁面切換頁面/簡單控制邏輯瀏覽器客客戶端應(yīng)用體系結(jié)構(gòu):提供一個(gè)運(yùn)行在客戶端的功能完全的應(yīng)用程序。用戶可以下載這個(gè)程序,此后它將控制用戶的交互和內(nèi)容構(gòu)造。當(dāng)服務(wù)器上的業(yè)務(wù)邏輯必須初始化時(shí),通信才成為必要。
好處:將用戶界面和業(yè)務(wù)邏輯的區(qū)別去掉了;和用戶交互時(shí)于服務(wù)器的通信很少;Web頁面可離線瀏覽;不需要很多服務(wù)器資源。5.顯示層技術(shù)-Web層73客戶端應(yīng)用體系結(jié)構(gòu):提供一個(gè)運(yùn)行在客戶端的功能完全的應(yīng)用程序客戶端應(yīng)用體系結(jié)構(gòu)通信邏輯瀏覽器客戶機(jī)下載通信邏輯商業(yè)邏輯下載+版本控制服務(wù)器控制邏輯內(nèi)容構(gòu)建邏輯用戶開始應(yīng)用程序Applet應(yīng)用請(qǐng)求74客戶端應(yīng)用體系結(jié)構(gòu)通信邏輯瀏覽器客戶機(jī)下載通信邏輯商業(yè)邏輯下設(shè)置J2EE服務(wù)器環(huán)境變量:為運(yùn)行J2EE服務(wù)器環(huán)境通常必須設(shè)置環(huán)境變量,而且不同的廠家實(shí)現(xiàn)和操作系統(tǒng)平臺(tái)上會(huì)有很大變化。配置J2EE服務(wù)器屬性:為大部分J2EE服務(wù)器實(shí)現(xiàn)配置屬性,使其適合于特定的網(wǎng)絡(luò)和操作環(huán)境。Web應(yīng)用部署5.顯示層技術(shù)-Web層75設(shè)置J2EE服務(wù)器環(huán)境變量:為運(yùn)行J2EE服務(wù)器環(huán)境通常必須
客戶層的實(shí)現(xiàn)J2EE平臺(tái)一般鼓勵(lì)“瘦客戶端”配置,因?yàn)榻M件模型將繁重的功能如業(yè)務(wù)操作和述訪問交給服務(wù)器進(jìn)行處理。這并不是說,J2EE客戶端就是啞終端;一個(gè)J2EE應(yīng)用客戶端可以處理一系列的事情,如消息、顯示、輸入校驗(yàn)和會(huì)話管理。
5.顯示層技術(shù)-Web層76
客戶層的實(shí)現(xiàn)5.顯示層技術(shù)-Web層76Web瀏覽器:瀏覽器是J2EE客戶端最簡單的一種類型。它們顯示以某些標(biāo)記語言來書寫的文檔,該標(biāo)記語言指定要顯示的數(shù)據(jù)以及那些數(shù)據(jù)該怎樣被顯示。Javaapplet客戶端:Javaapplet客戶端是用戶接口組件典型地在一個(gè)Web瀏覽器內(nèi)執(zhí)行,盡管它們可以在多種支持applet編程模型的其它應(yīng)用或設(shè)備中執(zhí)行。5.顯示層技術(shù)-Web層77Web瀏覽器:瀏覽器是J2EE客戶端最簡單的一種類型。它們顯瀏覽器Javaapplet消息和顯示HTML格式,Servlet,JSPGUI組件,JFC/SwingAPI,RMI有效性檢驗(yàn)內(nèi)嵌JavaScript在一個(gè)html頁面里。內(nèi)嵌JavaScript在一個(gè)html頁面里。會(huì)話管理Cookies,URLRewritingCookies,URLRewriting安全管理httpshttps5.顯示層技術(shù)-Web層78瀏覽器Javaapplet消息和顯示HTML格式,ServApacheStruts是一個(gè)免費(fèi)的開源的WEB層的應(yīng)用框架。一個(gè)前端控制組件,一系列動(dòng)作類,動(dòng)作映射,處理XML的實(shí)用工具類,服務(wù)器端javabean的自動(dòng)填充,支持驗(yàn)證的WEB表單,國際化支持,生成HTML,實(shí)現(xiàn)表現(xiàn)邏輯和模版組成了struts的靈魂。
應(yīng)用示例5.顯示層技術(shù)-Web層79ApacheStruts是一個(gè)免費(fèi)的開源的WEB層的應(yīng)用框客戶端應(yīng)用體系結(jié)構(gòu)80客戶端應(yīng)用體系結(jié)構(gòu)80Web層Web層設(shè)計(jì)中的問題與指南Web應(yīng)用程序部署客戶端5.顯示層技術(shù)81Web層5.顯示層技術(shù)15.1Web層Web層的工作就是接收來自于HTTP客戶端的輸入,將收到的輸入交給內(nèi)部的業(yè)務(wù)邏輯進(jìn)行處理,然后將結(jié)果通過HTTP協(xié)議送回客戶端。5.顯示層技術(shù)-Web層在基于Interent的分布式應(yīng)用框架中,顯示層一般由Web層和客戶端兩部分組成。825.1Web層Web層的工作就是接收來自于HTTP客戶端的JSP文件:從HTTP的請(qǐng)求中提取參數(shù),調(diào)用相應(yīng)的業(yè)務(wù)邏輯,處理HTTP會(huì)話,最后生成HTTP文檔??偟目磥?,這個(gè)模型的好處是簡單,但是它把業(yè)務(wù)邏輯和表現(xiàn)混在一塊,對(duì)大應(yīng)用來說,這個(gè)缺點(diǎn)是令人容忍不了的。兩種模型瀏覽器數(shù)據(jù)庫BeanJSP文件5.顯示層技術(shù)-Web層83JSP文件:從HTTP的請(qǐng)求中提取參數(shù),調(diào)用相應(yīng)的業(yè)務(wù)邏輯,MVC模式(Model/View/Controller)
5.顯示層技術(shù)-Web層定義:MVC是一個(gè)設(shè)計(jì)模式,它強(qiáng)制性的使應(yīng)用程序的輸入、處理和輸出分開。視圖:用戶看到并與之交互的界面。對(duì)老式的Web應(yīng)用程序來說,視圖就是由HTML元素組成的界面,在新式的Web應(yīng)用程序中,還包括MacromediaFlash和象XHTML,XML/XSL,WML等一些標(biāo)識(shí)語言和Webservices。84MVC模式(Model/View/Controller)5模型:表示企業(yè)數(shù)據(jù)和業(yè)務(wù)規(guī)則。在MVC的三個(gè)部件中,模型擁有最多的處理任務(wù)。被模型返回的數(shù)據(jù)是中立的,即模型與數(shù)據(jù)格式無關(guān)。5.顯示層技術(shù)-Web層控制器:接受用戶的輸入,根據(jù)請(qǐng)求決定調(diào)用模型構(gòu)件去處理請(qǐng)求,然后確定用哪個(gè)視圖來顯示模型處理返回的數(shù)據(jù)。85模型:表示企業(yè)數(shù)據(jù)和業(yè)務(wù)規(guī)則。在MVC的三個(gè)部件中,模型擁有866為什么要使用MVC5.顯示層技術(shù)-Web層多個(gè)視圖能共享一個(gè)模型。由于MVC已經(jīng)將數(shù)據(jù)和業(yè)務(wù)規(guī)則從表示層分開,無論用戶想要Flash界面或是WAP界面,用一個(gè)模型就能處理它們,可以最大化的重用代碼。模型返回的數(shù)據(jù)沒有進(jìn)行格式化,所以同樣的構(gòu)件能被不同界面使用。87為什么要使用MVC5.顯示層技術(shù)-Web層多個(gè)視圖能共享一5.顯示層技術(shù)-Web層由于運(yùn)用MVC的應(yīng)用程序的三個(gè)部件是相互對(duì)立,改變其中一個(gè)不會(huì)影響其它兩個(gè),所以依據(jù)這種設(shè)計(jì)思想能構(gòu)造良好的松偶合的構(gòu)件??梢允褂每刂破鱽砺?lián)接不同的模型和視圖去完成用戶的需求,這樣控制器可以為構(gòu)造應(yīng)用程序提供強(qiáng)有力的手段。885.顯示層技術(shù)-Web層由于運(yùn)用MVC的應(yīng)用程序的三個(gè)部件是MVC的缺點(diǎn)使用MVC需要精心的計(jì)劃,花費(fèi)相當(dāng)可觀的時(shí)間去考慮如何將MVC運(yùn)用到應(yīng)用程序,同時(shí)由于模型和視圖要嚴(yán)格的分離,這樣也給調(diào)試應(yīng)用程序到來了一定的困難。所以使用MVC同時(shí)也意味著要管理比以前更多的文件,增加了工作量。5.顯示層技術(shù)-Web層89MVC的缺點(diǎn)5.顯示層技術(shù)-Web層95.顯示層技術(shù)-Web層MVC設(shè)計(jì)模式是一個(gè)很好創(chuàng)建軟件的途徑,但是如果要隔離模型、視圖和控制器的構(gòu)件,則要重新思考應(yīng)用程序,尤其是應(yīng)用程序的構(gòu)架。MVC并不適合小型甚至中等規(guī)模的應(yīng)用程序,花費(fèi)大量時(shí)間將MVC應(yīng)用到規(guī)模并不是很大的應(yīng)用程序通常會(huì)得不償失。905.顯示層技術(shù)-Web層MVC設(shè)計(jì)模式是一個(gè)很好創(chuàng)建軟件交付應(yīng)用的功能到Web之上:應(yīng)用設(shè)計(jì)通常將業(yè)務(wù)邏輯從數(shù)據(jù)顯示中分離出來。Web層為后端應(yīng)用模型中的業(yè)務(wù)邏輯(可以被其它類型的客戶端共享訪問),接收HTTP輸入并產(chǎn)生HTTP輸出。Web層的功能5.顯示層技術(shù)-Web層91交付應(yīng)用的功能到Web之上:應(yīng)用設(shè)計(jì)通常將業(yè)務(wù)邏輯從數(shù)據(jù)顯示動(dòng)態(tài)內(nèi)容創(chuàng)建:Web層組件為產(chǎn)生動(dòng)態(tài)Web內(nèi)容來設(shè)計(jì)的。Servlets和JSP頁面可以基于用戶的輸入與上下文將來自于多種源的數(shù)據(jù)格式轉(zhuǎn)化為任意的數(shù)據(jù)格式。屏幕流程:由于屏幕流程往往對(duì)應(yīng)到特定的客戶端的動(dòng)作,因此決定下一屏幕(也即哪個(gè)頁面)應(yīng)該顯示什么的邏輯一般駐留在Web層。5.顯示層技術(shù)-Web層92動(dòng)態(tài)內(nèi)容創(chuàng)建:Web層組件為產(chǎn)生動(dòng)態(tài)Web內(nèi)容來設(shè)計(jì)的。Se數(shù)據(jù)表示和輸入收集:Web層和Web客戶端進(jìn)行通訊以使得格式化代碼的Web文檔自然就屬于Web層。其次,用戶的輸入以HTTP的PUT和GET動(dòng)作到達(dá)Web層,Web層收到這些動(dòng)作即將其翻譯為某種形式(經(jīng)常是某種形式的命令對(duì)象)以便其余的應(yīng)用可以理解。5.顯示層技術(shù)-Web層93數(shù)據(jù)表示和輸入收集:Web層和Web客戶端進(jìn)行通訊以使得格式狀態(tài)管理:Web層有一個(gè)簡單的、靈活的機(jī)制用來在一個(gè)用戶的會(huì)話期間積聚相應(yīng)的事務(wù)型數(shù)據(jù)和上下文數(shù)據(jù)。協(xié)議轉(zhuǎn)換:EJB服務(wù)器、數(shù)據(jù)庫、EIS層資源管理器和其它的網(wǎng)絡(luò)資源都有它們自己的協(xié)議。Web層作為一個(gè)軟件層,把來自于其它協(xié)議的請(qǐng)求和應(yīng)答翻譯為HTTP形式,或者,把HTTP請(qǐng)求和應(yīng)答翻譯成其它協(xié)議的形式。5.顯示層技術(shù)-Web層94狀態(tài)管理:Web層有一個(gè)簡單的、靈活的機(jī)制用來在一個(gè)用戶的會(huì)對(duì)多種潛在的客戶端類型的支持:Web使用HTTP協(xié)議來傳送數(shù)據(jù)給客戶端,數(shù)據(jù)通過MIME類型(一種擴(kuò)展的內(nèi)容分類機(jī)制)來描述。任何HTTP形式的客戶端都能夠加入一個(gè)Web應(yīng)用,且此客戶端能夠使用可以下載內(nèi)容的任意類型,即使內(nèi)容的類型還未存在。5.顯示層技術(shù)-Web層95對(duì)多種潛在的客戶端類型的支持:Web使用HTTP協(xié)議來傳送數(shù)J2EE的Web層技術(shù)提供了服務(wù)器的擴(kuò)展機(jī)制,該機(jī)制提供了一種基于服務(wù)器端腳本設(shè)計(jì)所帶來的好處,并且采用的是一種標(biāo)準(zhǔn)的、安全的、廠商中立的方法。Web應(yīng)用及支持它的Web層技術(shù)包括Web檔案(archive)、Web層組件模型、servlets,JSP及J2EE的Web容器。Web層技術(shù)5.顯示層技術(shù)-Web層96J2EE的Web層技術(shù)提供了服務(wù)器的擴(kuò)展機(jī)制,該機(jī)制提供了一Web檔案:對(duì)一個(gè)Web應(yīng)用的打包和部署之單元稱之為一個(gè)Web檔案(Webarchive,以“.war”作為文件名的結(jié)尾),此文件包含當(dāng)前Web應(yīng)用的所有類文件與資源,Web檔案也包含一個(gè)配置該應(yīng)用的部署描述器文件。5.顯示層技術(shù)-Web層97Web檔案:對(duì)一個(gè)Web應(yīng)用的打包和部署之單元稱之為一個(gè)WeWeb容器:一個(gè)容器是位于服務(wù)器里面的類之集合,它們相互合作以管理組件實(shí)例的生命周期并對(duì)那些實(shí)例提供數(shù)據(jù)和服務(wù)。J2EE規(guī)范定義了一個(gè)在Web容器與每一Web組件之間的約定/契約,用以定義組件的生命周期、組件必須實(shí)現(xiàn)的行為、以及服務(wù)器必須提供給該組件的服務(wù)。5.顯示層技術(shù)-Web層98Web容器:一個(gè)容器是位于服務(wù)器里面的類之集合,它們相互合作Web容器的作用:分發(fā)服務(wù)請(qǐng)求:容器分發(fā)服務(wù)請(qǐng)求給它所包含的組件,將上下文數(shù)據(jù)(如會(huì)話數(shù)據(jù)與當(dāng)前請(qǐng)求的信息)提供給組件,并且協(xié)調(diào)該組件響應(yīng)內(nèi)容的產(chǎn)生。HTTP請(qǐng)求的應(yīng)答:對(duì)于URL的HTTP請(qǐng)求翻譯成對(duì)組件實(shí)例的調(diào)用,并將基于組件所產(chǎn)生的內(nèi)容生成相應(yīng)的HTTP應(yīng)答。5.顯示層技術(shù)-Web層99Web容器的作用:分發(fā)服務(wù)請(qǐng)求:容器分發(fā)服務(wù)請(qǐng)求給它所包含的組件生命周期的管理:Web容器通過回叫(callback)的方式來通知組件的狀態(tài)變化如實(shí)例初始化和消亡,實(shí)現(xiàn)對(duì)其組件的生命周期管理。5.顯示層技術(shù)-Web層100組件生命周期的管理:Web容器通過回叫(callback)的Servlet是一種Java平臺(tái)服務(wù)器端擴(kuò)展組件,它運(yùn)行在一個(gè)Web容器的里面。在一個(gè)Web應(yīng)用中,每一Servlet的類都被映射成Web服務(wù)器中的一個(gè)或多個(gè)URL地址。當(dāng)服務(wù)器接收到對(duì)某個(gè)servlet的URL的一個(gè)HTTP請(qǐng)求(GET,POST等)的時(shí)候,服務(wù)器調(diào)用相應(yīng)的servlet的服務(wù)方法(service()),該方法產(chǎn)生此應(yīng)答的動(dòng)態(tài)內(nèi)容。
Servlet5.顯示層技術(shù)-Web層101Servlet是一種Java平臺(tái)服務(wù)器端擴(kuò)展組件,它運(yùn)行在一Servlets特點(diǎn)Servlets采用Java來書寫,因此能夠運(yùn)行在一個(gè)內(nèi)嵌在WebServer里面的JVM實(shí)例之上。Servlets通常比CGI程序或腳本要快,因?yàn)樗鼈冞\(yùn)行的形式是編譯過的字節(jié)碼,取代的是一個(gè)笨重的進(jìn)程或一個(gè)解釋腳本。5.顯示層技術(shù)-Web層102Servlets特點(diǎn)Servlets采用Java來書寫,因此Servlets比擴(kuò)展庫要安全,因?yàn)镴VM實(shí)例通??梢曰謴?fù)一個(gè)非正常退出的servlet。與服務(wù)器端腳本技術(shù)相比,servlets的移植性更好,并且它所提供的是一個(gè)更為豐富的標(biāo)準(zhǔn)服務(wù)的集合。5.顯示層技術(shù)-Web層103Servlets比擴(kuò)展庫要安全,因?yàn)镴VM實(shí)例通??梢曰謴?fù)一由于Java平臺(tái)所固有的運(yùn)行時(shí)的可移植性,編譯過的servlet類具備二進(jìn)制形式的跨硬件平臺(tái)的移植性;servlet與其容器之間的契約由JavaServlet規(guī)范予以定義并且由J2EE兼容測試包檢驗(yàn)過(在一個(gè)J2EE品牌的產(chǎn)品里),因此servlets也可以跨Web服務(wù)器兼容。5.顯示層技術(shù)-Web層104由于Java平臺(tái)所固有的運(yùn)行時(shí)的可移植性,編譯過的servlServlet開發(fā)人員可以創(chuàng)建能在所有J2EE品牌服務(wù)器上正確運(yùn)行的產(chǎn)品,J2EE服務(wù)器用戶可以更換技術(shù)廠商而只做很小的甚至根本就不需要更改它們的應(yīng)用代碼。打包和部署servlets(及其它的Web層組件和資源)的規(guī)范化和標(biāo)準(zhǔn)化,確保了一個(gè)Web應(yīng)用不用作任何代碼修改或重建,就可以作為一個(gè)單獨(dú)的單元部署到任何J2EE品牌的服務(wù)器里面。5.顯示層技術(shù)-Web層105Servlet開發(fā)人員可以創(chuàng)建能在所有J2EE品牌服務(wù)器上正Servlet存在的問題Servlets寫起來比較冗長:很多產(chǎn)生HTML的servlets比起Web頁面要長一些,它帶有以System.out.println()環(huán)繞的每一行、在每一個(gè)雙引號(hào)之前都有反斜線符號(hào)、并且可能一塊邏輯或這里和那里的重述。這樣的servlets寫起來比較煩悶,而且讀和維護(hù)都是比較困難的。5.顯示層技術(shù)-Web層106Servlet存在的問題Servlets寫起來比較冗長:很Servlets是程序:對(duì)于所有的哪怕是最簡單的情況,servlets都需要編程人員來開發(fā)和維護(hù)。程序員不必熟悉圖形設(shè)計(jì),圖形設(shè)計(jì)人員經(jīng)常不是程序員。聯(lián)合編程邏輯和先進(jìn)的可視化設(shè)計(jì)的servlets對(duì)于程序員和圖形設(shè)計(jì)人員來講,更改起來都是比較困難的。5.顯示層技術(shù)-Web層107Servlets是程序:對(duì)于所有的哪怕是最簡單的情況,seServlet代碼不易重用:基于HTML的Web應(yīng)用通常包括大量的重復(fù),很多使用的場合多次放在一個(gè)Web應(yīng)用中,HTML頁面經(jīng)常包含重復(fù)的樣式元素來提供一致的外觀和感覺。但是servlet的API提供很少對(duì)于重用業(yè)務(wù)或顯示邏輯的直接支持,結(jié)果通常是剪切與粘貼式的編碼風(fēng)格犧牲了一致性與可維護(hù)性。5.顯示層技術(shù)-Web層108Servlet代碼不易重用:基于HTML的Web應(yīng)用通常包Servlets混合功能代碼和顯示代碼在一起:這種做法限制看起來很小,實(shí)際上它往往是所有其它問題的根源?;镜膯栴}是業(yè)務(wù)邏輯和數(shù)據(jù)表示基本上是不同的層面,將這兩者混合在一種單一的技術(shù)(既servlet)導(dǎo)致的是混淆設(shè)計(jì)、實(shí)現(xiàn)和維護(hù)。5.顯示層技術(shù)-Web層109Servlets混合功能代碼和顯示代碼在一起:這種做法限制Servlet的建議使用servlets實(shí)現(xiàn)服務(wù):除了產(chǎn)生二進(jìn)制內(nèi)容以外,servlets一般提供無可視化的功能。一個(gè)servlet可以執(zhí)行它所提供的服務(wù)—模板化、安全、個(gè)性化、MVC控制—然后選擇一個(gè)顯示組件并轉(zhuǎn)交請(qǐng)求給該組件去顯示。5.顯示層技術(shù)-Web層使用servlets作為控制器:一個(gè)Web層控制器,用來決定如何處理一個(gè)請(qǐng)求并選擇下一個(gè)要顯示的視圖。110Servlet的建議使用servlets實(shí)現(xiàn)服務(wù):除了產(chǎn)生JSP一個(gè)JSP頁面是一個(gè)模板文檔,其中包含有特殊的標(biāo)記用來執(zhí)行內(nèi)嵌的邏輯。JSP頁面可以被用來指定任何類型的動(dòng)態(tài)內(nèi)容,但是它們主要用來創(chuàng)建結(jié)構(gòu)化的內(nèi)容(如HTML,XML,XHTML,PDF)。5.顯示層技術(shù)-Web層111JSP一個(gè)JSP頁面是一個(gè)模板文檔,其中包含有特殊的標(biāo)記用來JSP特點(diǎn)JSP頁面比servlets更容易書寫:JSP頁面看起來非常象HTML,帶有少量的附加標(biāo)記,沒有重復(fù)的println()語句或者也不需要反斜線回退字符.5.顯示層技術(shù)-Web層112JSP特點(diǎn)JSP頁面比servlets更容易書寫:JSP頁面JSP頁面不需要編程技能:JSP頁面看起來很象它生成的文檔類型,文檔格式的專家可以不是一個(gè)程序員即可以直接編輯之。任何實(shí)際的編程或多或少地從顯示代碼中分離出來,因此程序員和文檔格式專家可以相對(duì)獨(dú)立地進(jìn)行工作.5.顯示層技術(shù)-Web層113JSP頁面不需要編程技能:JSP頁面看起來很象它生成的文檔類JSP頁面支持代碼的重用:JSP頁面有顯式代碼重用機(jī)制。在一JSP頁面里面有一些特殊的標(biāo)記來使用JavaBeans組件,編程人員可為其特殊的用途來定義可定制標(biāo)記。JSP標(biāo)記語言中的包括指示提供兩種文檔內(nèi)容的重用:編譯時(shí)和運(yùn)行時(shí)。這些機(jī)制可以通過減少重復(fù)代碼進(jìn)而提高代碼的質(zhì)量.5.顯示層技術(shù)-Web層114JSP頁面支持代碼的重用:JSP頁面有顯式代碼重用機(jī)制。在JSP頁面將功能從顯示中分離開來:JSP頁面格式是一針對(duì)某一文檔的模板,其中帶有業(yè)務(wù)邏輯,該邏輯要么嵌在JSP頁面中的特殊標(biāo)記里(作為腳本元素),要么采用beans或可定制標(biāo)記。分離功能(業(yè)務(wù)邏輯)與形式(顯示)允許程序員和文檔作者集中于他們的核心技能之上。這種對(duì)開發(fā)角色的劃分是J2EE平臺(tái)的主要優(yōu)勢之一。5.顯示技術(shù)-Web層115JSP頁面將功能從顯示中分離開來:JSP頁面格式是一針對(duì)某JSP工作流程一個(gè)JSP頁面對(duì)其作者來說象一個(gè)文檔,然而Web容器實(shí)際上把JSP頁面作為servlets來實(shí)現(xiàn)。在一個(gè)JSP頁面可以運(yùn)行在一JVM實(shí)例之上時(shí),它必須被轉(zhuǎn)換成(通過一個(gè)轉(zhuǎn)換器)一個(gè)servlet,該servlet然后被編譯成一個(gè)可以裝載的類。一個(gè)JSP通常直接部署到一個(gè)Web容器之中,由容器來處理相應(yīng)的翻譯和編譯。5.顯示層技術(shù)-Web層116JSP工作流程5.顯示層技術(shù)-Web層3611737JSP的建議使用JSP頁面作為結(jié)構(gòu)文本內(nèi)容的模板:JSP頁面大多數(shù)是用來生成文本的內(nèi)容通常有一致結(jié)構(gòu)的文本。JSP頁面也被用來產(chǎn)生非結(jié)構(gòu)化的文本文件。JSP頁面通常并不適合于以下的幾種情形:創(chuàng)建二進(jìn)制內(nèi)容、激活應(yīng)用域邏輯、創(chuàng)建帶有高度可變結(jié)構(gòu)的內(nèi)容、或控制請(qǐng)求路由等等。5.顯示層技術(shù)-Web層118JSP的建議使用JSP頁面作為結(jié)構(gòu)文本內(nèi)容的模板:JSP頁面避免對(duì)邏輯標(biāo)記的大量使用:標(biāo)準(zhǔn)標(biāo)記庫通常提供一些邏輯標(biāo)記用來循環(huán)、執(zhí)行迭代、評(píng)估表達(dá)式、作出決定等。應(yīng)該意識(shí)到使用標(biāo)準(zhǔn)標(biāo)記庫可以執(zhí)行JSP頁面中很大一部分邏輯。將邏輯放在程序以外的可定制標(biāo)記之中提供的優(yōu)勢較少,并且違背了邏輯和顯示的分離原則。5.顯示層技術(shù)-Web層119避免對(duì)邏輯標(biāo)記的大量使用:標(biāo)準(zhǔn)標(biāo)記庫通常提供一些邏輯標(biāo)記用來正確使用JSPinclude指示與動(dòng)作:<jsp:include>動(dòng)作允許將或靜態(tài)的或動(dòng)態(tài)的內(nèi)容包含進(jìn)此JSP頁面,指示通常用來模塊化Web頁面,重用內(nèi)容,并保持Web頁面的長度可以被管理。如果濫用之,則使代碼膨脹。5.顯示層技術(shù)-Web層120正確使用JSPinclude指示與動(dòng)作:<jsp:incWeb層狀態(tài)一個(gè)servlet、servlet過濾器或JSP頁面通常創(chuàng)建相應(yīng)的帶有包含在該服務(wù)請(qǐng)求中數(shù)據(jù)的應(yīng)答,不過經(jīng)常需要來自于其它源的數(shù)據(jù)來處理它的工作。用來創(chuàng)建一個(gè)應(yīng)答數(shù)據(jù)的一個(gè)Web層組件稱為狀態(tài)(state)。Web層狀態(tài)的每一項(xiàng)都有一個(gè)范圍(scope),用來決定此項(xiàng)目的訪問型及其生命周期。5.顯示層技術(shù)-Web層121Web層狀態(tài)一個(gè)servlet、servlet過濾器或JSP應(yīng)用范圍/作用域(Applicationscope)應(yīng)用范圍狀態(tài)存貯在Web層的ServletContext對(duì)象中,應(yīng)用范圍中的對(duì)象在此應(yīng)用內(nèi)所有的servlets之間共享,線程安全由servlet開發(fā)人員負(fù)責(zé)。應(yīng)用范圍中的狀態(tài)在應(yīng)用的生存期間一直存在,除非它被顯式地刪除。為一個(gè)Web應(yīng)用的“全局內(nèi)存”。5.顯示層技術(shù)-Web層122應(yīng)用范圍/作用域(Applicationscope)應(yīng)用范servletAPI提供將數(shù)據(jù)與一個(gè)用戶會(huì)話關(guān)聯(lián)起來的機(jī)制,在后續(xù)的請(qǐng)求過程中訪問或修改此數(shù)據(jù)。對(duì)一個(gè)HttpServlet而言的會(huì)話范圍狀態(tài)存貯在Web層的HttpSession對(duì)象(由該服務(wù)方法的HttpServletRequest參數(shù)來提供)之中。是對(duì)于特定于某一用戶會(huì)話的數(shù)據(jù)。會(huì)話范圍(Sessionscope)5.顯示層技術(shù)-Web層123servletAPI提供將數(shù)據(jù)與一個(gè)用戶會(huì)話關(guān)聯(lián)起來的機(jī)制一個(gè)Web組件可以讀或修改在請(qǐng)求范圍內(nèi)的數(shù)據(jù)然后轉(zhuǎn)交此請(qǐng)求給另一組件。請(qǐng)求被轉(zhuǎn)交給的組件然后就可以訪問到此狀態(tài)。請(qǐng)求范圍內(nèi)的狀態(tài)存貯在一個(gè)ServletRequest對(duì)象里面,因此它可以被接收該請(qǐng)求的任何組件訪問到。特定于一個(gè)單獨(dú)的服務(wù)器請(qǐng)求的數(shù)據(jù),當(dāng)服務(wù)方法返回的時(shí)候被丟棄。請(qǐng)求范圍(Requestscope)5.顯示層技術(shù)-Web層124一個(gè)Web組件可以讀或修改在請(qǐng)求范圍內(nèi)的數(shù)據(jù)然后轉(zhuǎn)交此請(qǐng)求給僅僅適用于JSP頁面,以指示該數(shù)據(jù)僅在當(dāng)前頁面的上下文中有效。頁面范圍狀態(tài)存貯在一個(gè)JSP頁面的PageContext對(duì)象中。當(dāng)一個(gè)JSP轉(zhuǎn)交給或包含另一個(gè)的時(shí)候,每一個(gè)頁面定義它自己的范圍。頁面范圍的狀態(tài)在程序從該頁面中退出的時(shí)候被丟棄掉。頁面范圍(Pagescope)5.顯示層技術(shù)-Web層125僅僅適用于JSP頁面,以指示該數(shù)據(jù)僅在當(dāng)前頁面的上下文中有效Web層會(huì)話狀態(tài)的優(yōu)勢易于實(shí)現(xiàn):因?yàn)閼?yīng)用服務(wù)器處理了HttpSession的實(shí)現(xiàn),開發(fā)人員從對(duì)管理會(huì)話狀態(tài)中所需要的設(shè)計(jì)、實(shí)現(xiàn)、測試代碼的細(xì)節(jié)中解脫出來。優(yōu)化:一個(gè)應(yīng)用服務(wù)器的HttpSession的實(shí)現(xiàn)是根據(jù)它本身作了優(yōu)化和測試的,因此也許比一個(gè)客戶化的解決方案更為有效、可靠。5.顯示層技術(shù)-Web層126Web層會(huì)話狀態(tài)的優(yōu)勢易于實(shí)現(xiàn):因?yàn)閼?yīng)用服務(wù)器處理了Http潛在的更豐富的功能集:一個(gè)應(yīng)用服務(wù)器對(duì)于會(huì)話狀態(tài)管理的實(shí)現(xiàn)可能包括諸如故障恢復(fù)、集群支持等功能,這已超出了J2EE平臺(tái)規(guī)范的基本需求。系統(tǒng)架構(gòu)師可以區(qū)分服務(wù)器平臺(tái)所提供的功能,并選擇出最能適合當(dāng)前應(yīng)用需求的平臺(tái),與此同時(shí)維護(hù)J2EE技術(shù)的兼容性和可移植性。5.顯示層技術(shù)-Web層127潛在的更豐富的功能集:一個(gè)應(yīng)用服務(wù)器對(duì)于會(huì)話狀態(tài)管理的實(shí)現(xiàn)可可移植性:HttpSession接口是標(biāo)準(zhǔn)化的,因此在所有的J2EE品牌的應(yīng)用服務(wù)器中都必須通過J2EE兼容性測試包(CTS)??缮炜s性:HttpSession可以有效地管理會(huì)話狀態(tài)的存貯,將它放在緩存和/或服務(wù)器集群之中。5.顯示層技術(shù)-Web層128可移植性:HttpSession接口是標(biāo)準(zhǔn)化的,因此在所有的可進(jìn)化性(Evolvability):應(yīng)用服務(wù)器廠商會(huì)堅(jiān)持不懈地改善它們的產(chǎn)品及其功能,甚至在服務(wù)器增加某些提高性能和可靠性功能的時(shí)候,它將維護(hù)已有的接口以保證兼容性。一個(gè)HttpSession實(shí)現(xiàn)今天能正常工作,明天也將工作得更好,因?yàn)榉?wù)器版本的提升很少或根本就不做對(duì)源碼的修改。5.顯示層技術(shù)-Web層129可進(jìn)化性(Evolvability):應(yīng)用服務(wù)器廠商會(huì)堅(jiān)持不5.2Web層設(shè)計(jì)問題及其指南Web層技術(shù)選擇5.顯示層技術(shù)-Web層設(shè)計(jì)問題及其指南Servlets和JSP頁面都是Web層組件,但是在設(shè)計(jì)中扮演的是不同的角色。XML可以被用來作為針對(duì)數(shù)據(jù)互操作性的“中心”格式,且可以在客戶端或服務(wù)器端以CSS或XSL的風(fēng)格進(jìn)行設(shè)計(jì)。1305.2Web層設(shè)計(jì)問題及其指南Web層技術(shù)選擇5.顯示層何時(shí)使用JSP頁面:通常,JSP頁面大多用來作為顯示組件,在一個(gè)MVC應(yīng)用中扮演View角色,或者用來創(chuàng)建結(jié)構(gòu)化的、非可視化的內(nèi)容,如XML消息。何時(shí)使用servlets:Servlets主要用來作為MVC控制器組件,作為框架支持組件(諸如模板處理器、安全適配器、日志器等等),或者作為對(duì)二進(jìn)制內(nèi)容的顯示組件。5.顯示層技術(shù)-Web層設(shè)計(jì)問題及其指南131何時(shí)使用JSP頁面:通常,JSP頁面大多用來作為顯示組件,在在交互式Web應(yīng)用里面的XML:XML可以被使用于交互式的應(yīng)用中。一個(gè)Web層控制器可以翻譯HTTP請(qǐng)求為對(duì)WebService方法的調(diào)用,并能使用CSS、XSL或可定制代碼來轉(zhuǎn)換調(diào)用的結(jié)果為正在請(qǐng)求的客戶端的顯示格式。這種方法只有在沒有更快、更可靠、或更輕量級(jí)的方式去訪問應(yīng)用模型的時(shí)候才被建議使用,如直接訪問底層的企業(yè)級(jí)Java組件。5.顯示層技術(shù)-Web層設(shè)計(jì)問題及其指南132在交互式Web應(yīng)用里面的XML:XML可以被使用于交互式的應(yīng)Web層狀態(tài)維護(hù)狀態(tài)維護(hù)決定對(duì)應(yīng)用性能、可用性、伸縮性等有著極大的影響。此類決定包括選擇相應(yīng)的層來管理狀態(tài),對(duì)狀態(tài)的每一項(xiàng)選擇相應(yīng)的作用范圍,并且有效地跟蹤一分布式環(huán)境下的對(duì)話狀態(tài)。5.顯示層技術(shù)-Web層設(shè)計(jì)問題及其指南133Web層狀態(tài)維護(hù)5.顯示層技術(shù)-Web層設(shè)計(jì)問題及其指南Web層設(shè)計(jì)指南可維護(hù)性客戶端獨(dú)立性及代碼重用隔離開發(fā)人員的技能集將業(yè)務(wù)邏輯從顯示邏輯中分離出來:5.顯示層技術(shù)-Web層設(shè)計(jì)問題及其指南134Web層設(shè)計(jì)指南可維護(hù)性將業(yè)務(wù)邏輯從顯示邏輯中分離出來:5.在一個(gè)應(yīng)用設(shè)計(jì)中創(chuàng)建業(yè)務(wù)和顯示層是一個(gè)很好的習(xí)慣。業(yè)務(wù)層只提供應(yīng)用功能而不會(huì)有對(duì)顯示的引用,顯示層為用戶(或另一系統(tǒng))顯示數(shù)據(jù)與輸入提示,委托應(yīng)用功能給業(yè)務(wù)層。業(yè)務(wù)規(guī)則能夠在一個(gè)層中被修改,而對(duì)顯示層作很少或根本不作修改。應(yīng)用的顯示或工作流程可以改變而不會(huì)影響業(yè)務(wù)邏輯代碼。5.顯示層技術(shù)-Web層設(shè)計(jì)問題及其指南135在一個(gè)應(yīng)用設(shè)計(jì)中創(chuàng)建業(yè)務(wù)和顯示層是一個(gè)很好的習(xí)慣。業(yè)務(wù)層只提將協(xié)議置于模型API之外一個(gè)模型類應(yīng)該在一個(gè)Web容器外是可用的。對(duì)Web容器的模型依賴導(dǎo)致不必要的耦合,降低設(shè)計(jì)清晰性并使維護(hù)和單元測試更為困難。5.顯示層技術(shù)-Web層設(shè)計(jì)問題及其指南136將協(xié)議置于模型API之外一個(gè)模型類應(yīng)該在一個(gè)Web容器外是可5.3Web應(yīng)用程序部署Web應(yīng)用是一個(gè)Servlet、HTML頁面、類和其它資源的組合,應(yīng)包含如下組件。Web應(yīng)用組件構(gòu)成5.顯示層技術(shù)-Web應(yīng)用程序部署1375.3Web應(yīng)用程序部署Web應(yīng)用是一個(gè)Servlet、HServletJSP實(shí)用程序類靜態(tài)文檔(HTML、圖片和聲音等)客戶端的Applet、Bean和類等描述性的元信息,用于把上面的所有組件組合到一起5.顯示層技術(shù)-Web應(yīng)用程序部署138Servlet5.顯示層技術(shù)-Web應(yīng)用程序部署58設(shè)置J2EE服務(wù)器環(huán)境變量:為運(yùn)行J2EE服務(wù)器環(huán)境通常必須設(shè)置環(huán)境變量,而且不同的廠家實(shí)現(xiàn)和操作系統(tǒng)平臺(tái)上會(huì)有很大變化。配置J2EE服務(wù)器屬性:為大部分J2EE服務(wù)器實(shí)現(xiàn)配置屬性,使其適合于特定的網(wǎng)絡(luò)和操作環(huán)境。Web應(yīng)用部署5.顯示層技術(shù)-Web應(yīng)用程序部署139設(shè)置J2EE服務(wù)器環(huán)境變量:為運(yùn)行J2EE服務(wù)器環(huán)境通常必須編譯J2EE應(yīng)用程序代碼:所有J2EEWeb組件代碼必須用標(biāo)準(zhǔn)的Java編譯器編譯。創(chuàng)建J2EEWeb應(yīng)用程序部署描述符:根據(jù)以前定義的Web應(yīng)用程序DTD創(chuàng)建一個(gè)基于XML的發(fā)布描述符。5.顯示層技術(shù)-Web應(yīng)用程序部署140編譯J2EE應(yīng)用程序代碼:所有J2EEWeb組件代碼必須用封裝J2EEWeb應(yīng)用程序代碼:Web發(fā)布描述符、所有編譯好的J2EEServlet類、所有HTML文件、所有圖形文件以及其它Web資源需要封裝到一個(gè)帶.war擴(kuò)展名的Web應(yīng)用程序歸檔文件中。5.顯示層技術(shù)-Web應(yīng)用程序部署141封裝J2EEWeb應(yīng)用程序代碼:Web發(fā)布描述符、所有編啟動(dòng)J2EE服務(wù)器:這一步要啟動(dòng)J2EE兼容的服務(wù)器。啟動(dòng)服務(wù)器的機(jī)制通常與廠家有關(guān),但也可以簡單到在命令行中激發(fā)單一的啟動(dòng)命令。創(chuàng)建一個(gè)J2EE應(yīng)用程序描述符:必須創(chuàng)建一個(gè)J2EE應(yīng)用程序部署描述符把一個(gè)或多個(gè)Web、EJB和應(yīng)用程序客戶模塊連接到J2EE應(yīng)用程序中。5.顯示層技術(shù)-Web應(yīng)用程序部署142啟動(dòng)J2EE服務(wù)器:這一步要啟動(dòng)J2EE兼容的服務(wù)器。啟動(dòng)服封裝J2EE應(yīng)用程序代碼:應(yīng)用程序部署描述符、Web應(yīng)用程序、EJB應(yīng)用程序和應(yīng)用程序客戶需要封裝到一個(gè)企業(yè)級(jí)歸檔(EAR)文件中,擴(kuò)展名為.ear。發(fā)布J2EEWeb應(yīng)用程序代碼:最后,集成J2EE應(yīng)用程序部署到J2EE服務(wù)器環(huán)境中供企業(yè)應(yīng)用程序客戶訪問。5.顯示層技術(shù)-Web應(yīng)用程序部署143封裝J2EE應(yīng)用程序代碼:應(yīng)用程序部署描述符、Web應(yīng)用程序5.3客戶層對(duì)一個(gè)企業(yè)級(jí)應(yīng)用的用戶,客戶端就是應(yīng)用??蛻舳舜碛脩粝蚍?wù)器發(fā)出請(qǐng)求,并將請(qǐng)求的結(jié)果顯示
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年江西省高速公路投資集團(tuán)有限責(zé)任公司招聘筆試備考題庫附答案詳解(典型題)
- 2024年山東華興機(jī)械集團(tuán)有限責(zé)任公司人員招聘筆試備考題庫(含答案詳解)
- 2024年濱州新能源集團(tuán)有限責(zé)任公司及權(quán)屬公司公開招聘工作人員遞補(bǔ)筆試備考題庫附答案詳解(典型題)
- 2025年黑龍江省五常市輔警招聘考試試題題庫及答案詳解(易錯(cuò)題)
- 2024年湖南醫(yī)師定期考核模擬試卷-臨床醫(yī)學(xué)1000題
- (福建高考卷自主命題6科)2023年福建省普通高中學(xué)業(yè)水平選擇性考試高考物化生+政史地真題試卷及答案
- 2024年消防條令綱要知識(shí)考試題庫及參考答案
- QCC質(zhì)量工具培訓(xùn)
- Brand KPIs for online betting:Action Network in the United States-英文培訓(xùn)課件2025.5
- 低空經(jīng)濟(jì)在應(yīng)急管理的典型應(yīng)用與案例解析方案
- 2023年10月自考00533中國古代文學(xué)作品選(二)試題及答案含評(píng)分標(biāo)準(zhǔn)
- 拖拉機(jī)駕駛員培訓(xùn)(課件)
- 媒介發(fā)展史概論
- 兒童慢性病管理的挑戰(zhàn)與解決方案
- 兩辦意見八硬措施煤礦安全生產(chǎn)條例宣貫學(xué)習(xí)課件
- 2024年6月福建省普通高中學(xué)生學(xué)業(yè)基礎(chǔ)會(huì)考生物試題
- TCI 263-2024 水上裝配式鋼結(jié)構(gòu)棧橋(平臺(tái))施工技術(shù)規(guī)程
- 某公路工程有限公司專項(xiàng)應(yīng)急預(yù)案及某公路項(xiàng)目部安全生產(chǎn)應(yīng)急預(yù)案
- 甲狀腺結(jié)節(jié)射頻消融術(shù)后護(hù)理
- 湖北省華中師大一附中2024屆數(shù)學(xué)高二第二學(xué)期期末質(zhì)量檢測試題含解析
- 種植牙沙龍策劃方案
評(píng)論
0/150
提交評(píng)論