偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

淺談UI組件與JSF應(yīng)用

開發(fā) 后端
本文介紹UI組件與JSF應(yīng)用,以及討論用JSF實(shí)現(xiàn)JCatalog的關(guān)鍵部分和設(shè)計(jì)決定。

High-level architecture design(總體架構(gòu)設(shè)計(jì))

設(shè)計(jì)Web應(yīng)用系統(tǒng)的下一步是總體的架構(gòu)設(shè)計(jì)。它包括將應(yīng)用程序細(xì)分為功能組件,將這些組件劃分成若干層。總體架構(gòu)設(shè)計(jì)對(duì)于具體技術(shù)使用是中立的。

Multitiered architecture(多層架構(gòu))

多層架構(gòu)把整個(gè)系統(tǒng)劃分成明顯的功能單元:客戶端,表示層,業(yè)務(wù)邏輯,綜合(Integration),EIS。這種架構(gòu)確保了責(zé)任的明確劃分,使系統(tǒng)更加易于維護(hù)和擴(kuò)展。三層或多層系統(tǒng)被證明比沒有業(yè)務(wù)邏輯層的c/s系統(tǒng)更加靈活和可擴(kuò)展。

客戶層是數(shù)據(jù)模型被消費(fèi)和表示的地方。對(duì)于一個(gè)Web應(yīng)用來說,客戶層通常是Web瀏覽器?;跒g覽器的瘦客戶端沒有包含表示邏輯,它要依靠于表示層。

表示層將業(yè)務(wù)邏輯層的服務(wù)暴露給用戶。它知道如何處理一個(gè)客戶端的請(qǐng)求,如何同業(yè)務(wù)邏輯層交互,如何選擇下一個(gè)view去顯示。

業(yè)務(wù)邏輯層包含了一個(gè)應(yīng)用程序的業(yè)務(wù)對(duì)象和業(yè)務(wù)服務(wù)。它從表示層收到請(qǐng)求,根據(jù)請(qǐng)求處理響應(yīng)的業(yè)務(wù)邏輯。業(yè)務(wù)邏輯層組件大大受益于系統(tǒng)級(jí)服務(wù)(比如安全管理,事務(wù)管理,資源管理)。

集成層是業(yè)務(wù)邏輯層和EIS(Enterprise Information System)層之間的一座橋梁。它把同EIS層交互的邏輯封裝起來。有時(shí)候把集成層和業(yè)務(wù)邏輯層合起來稱作中間層。

應(yīng)用程序數(shù)據(jù)在EIS層持久化。它包括關(guān)系數(shù)據(jù)庫,對(duì)象數(shù)據(jù)庫和遺留系統(tǒng)。

JCatalog的架構(gòu)設(shè)計(jì)

應(yīng)用程序使用了一個(gè)多層非分布式的框架,上圖向我們顯示了應(yīng)用層次是如何劃分的,每一層使用的具體技術(shù)。這張圖同時(shí)作為示例應(yīng)用程序的部署圖。對(duì)于一個(gè)配置的架構(gòu),表示層,業(yè)務(wù)邏輯層,集成層都位于同一個(gè)Web容器中。定義良好的接口隔離每一層的職責(zé)。配置的架構(gòu)讓應(yīng)用簡(jiǎn)單,可擴(kuò)展。

對(duì)于表示層,經(jīng)驗(yàn)告訴我們最佳的方法是選擇一個(gè)已經(jīng)存在的,經(jīng)過考驗(yàn)的Web應(yīng)用框架,而不是自己設(shè)計(jì)和構(gòu)建一個(gè)框架。我們有一些Web應(yīng)用框架可供選擇,比如Struts, WebWork, JSF。我們?yōu)镴Catalog選擇JSF作為表示層框架。

無論EJB還是POJO都可以用來構(gòu)建業(yè)務(wù)邏輯層。如果應(yīng)用程序是分布式的,則擁有遠(yuǎn)程接口的EJB是一個(gè)很好的選擇。而我們的JCatalog是一個(gè)典型的沒有遠(yuǎn)程訪問需求的Web應(yīng)用,所以在Spring框架下的POJO被我們用來實(shí)現(xiàn)業(yè)務(wù)邏輯層。

集成層在關(guān)系數(shù)據(jù)庫上處理數(shù)據(jù)的持久化工作。有不同的方案可以用來實(shí)現(xiàn)集成層:
◆Pure JDBC:這是最靈活的方案;然而底層的JDBC用起來十分笨重,而且劣質(zhì)的JDBC代碼性能也不好。
◆Entity beans:對(duì)于隔離數(shù)據(jù)訪問代碼和處理O/R映射數(shù)據(jù)持久化,CMP是一個(gè)很昂貴的方案。它是一個(gè)以app server為中心的方案。一個(gè)entity bean不會(huì)使應(yīng)用依賴于某個(gè)數(shù)據(jù)庫,卻會(huì)讓應(yīng)用依賴于某個(gè)EJB容器。
◆O/R mapping框架:O/R mapping框架是一個(gè)以對(duì)象為中心的實(shí)現(xiàn)數(shù)據(jù)持久化的方案。以對(duì)象為中心的應(yīng)用很容易開發(fā)而且非常的輕便。在這個(gè)領(lǐng)域有不少的現(xiàn)成框架:JDO, Hibernate, TopLink, CocoBase等等。我們?cè)诒緫?yīng)用中使用Hibernate。

現(xiàn)在我們結(jié)合每一層來討論一下具體的設(shè)計(jì)問題。因?yàn)镴SF是相對(duì)新的技術(shù),我們會(huì)重點(diǎn)討論它的表示層和JSF,表示層收集用戶的輸入,表示數(shù)據(jù),控制頁面導(dǎo)航,將用戶輸入委托給業(yè)務(wù)邏輯層。表示層也能夠驗(yàn)證用戶輸入和維護(hù)應(yīng)用會(huì)話狀態(tài)。在下面我們會(huì)討論表示層的設(shè)計(jì)考慮事項(xiàng)和模式,以及為什么我們選擇JSF來實(shí)現(xiàn)JCatalog的表示層。

1.Model-View-Controller

MVC是Java藍(lán)皮書強(qiáng)烈建議的交互型應(yīng)用程序使用的結(jié)構(gòu)設(shè)計(jì)模式。MVC分割設(shè)計(jì)關(guān)注,從而能夠減少代碼的重疊,集中控制,使應(yīng)用更加可擴(kuò)展。MVC同時(shí)幫助不同技能的開發(fā)者集中于他們擅長(zhǎng)的技能方面,通過清晰定義的接口合作在一起。MVC是表示層的結(jié)構(gòu)設(shè)計(jì)模式。

2.JavaServer Faces

JSF 是面向基于Java的Web應(yīng)用而開發(fā)的server-side的UI組件框架。JSF包括了一組API,這些API用來表現(xiàn)UI組件以及保持它們狀態(tài);處理事件,服務(wù)器端的驗(yàn)證,以及數(shù)據(jù)轉(zhuǎn)換;定義頁面導(dǎo)航;支持國(guó)際化和accessibility;以及對(duì)這些功能提供可擴(kuò)展性。同時(shí)它還包括兩個(gè)JSP custom tag libraryies,用來在JSP頁面中表示UI組和關(guān)聯(lián)組件與服務(wù)器端對(duì)象。(實(shí)際上JSF現(xiàn)在是一個(gè)規(guī)范和一組接口以及他提供的參考實(shí)現(xiàn),你也可以自己做你自己的JSF實(shí)現(xiàn),當(dāng)然難度比較大,如果后面沒特指的話“實(shí)現(xiàn)”指的就是自帶的參考實(shí)現(xiàn))

3.JSF和MVC

JSF非常適用于基于MVC的表示層框架。它對(duì)行為和表示有著清晰的劃分。它支持我們熟悉的UI組件和Web層的概念,卻不會(huì)把你限制在某些腳本技術(shù)或標(biāo)記語言上。

JSF 的backing beans是model層(更多關(guān)于backing beans在后面的章節(jié))。它們也可以包含動(dòng)作,這些動(dòng)作是作為控制器層的一個(gè)擴(kuò)展以及把用戶的請(qǐng)求代理給業(yè)務(wù)邏輯層。請(qǐng)注意,從整個(gè)應(yīng)用程序的框架來看,業(yè)務(wù)邏輯層也常常被稱為model層。(注意和這里的model層區(qū)別開)包含JSF標(biāo)簽的JSP頁面是作為View層。而Faces Servlet則提供controller的功能。

為什么使用JSF?

JSF不僅僅是另一個(gè)Web框架,下面是它與一般的Web框架的不同:
◆象Swing一樣的面向?qū)ο蟮腤eb應(yīng)用開發(fā):服務(wù)器端聲明的,有event listeners和handlers的UI組件模型(就像Swing的組件),促使能夠面向?qū)ο蟮腤eb應(yīng)用開發(fā)。
◆Backing-bean management:Backing bean是在頁面中與UI組件關(guān)聯(lián)對(duì)應(yīng)的JavaBeans。Backing bean management將UI組件對(duì)象的定義,與保持?jǐn)?shù)據(jù)執(zhí)行應(yīng)用相關(guān)處理的對(duì)象區(qū)分開來。JSF的具體實(shí)現(xiàn)在恰當(dāng)?shù)姆秶鷥?nèi)儲(chǔ)存和管理這些backing- bean的實(shí)例。
◆可擴(kuò)展的UI組件模型:組成JSF應(yīng)用的JSF UI組件是可配置,可重用的元素。你可以繼承這些標(biāo)準(zhǔn)的UI組件來開發(fā)更為復(fù)雜的組件,比如menu bar,tree組件等等。
◆靈活的表現(xiàn)模型:Renderer把UI組件的功能和它的view分開。不同的Renderer可以被創(chuàng)造出來,用來定義同一種客戶端或不同客戶端的同一個(gè)組件的不同的外觀。(簡(jiǎn)單介紹一下,也就是說你可以定義HTMLRenderer, WMLRenderer來對(duì)同一組件生成HTML和WML格式的外觀。)
◆可擴(kuò)展的轉(zhuǎn)換和驗(yàn)證模型:你可以在標(biāo)準(zhǔn)的converter和validator的基礎(chǔ)上開發(fā)你的converter和validator提供更強(qiáng)大的功能。

盡管JSF很強(qiáng)大,但它現(xiàn)在還不成熟。JSF自帶的component, converter, validator是很基本簡(jiǎn)單的。而且每一個(gè)組件一個(gè)的validation model還不能處理組件和validator之間多對(duì)多的validation。JSF標(biāo)簽同JSTL還不能無縫連接。

在下面的章節(jié)中,我們將討論用JSF實(shí)現(xiàn)JCatalog的關(guān)鍵部分和設(shè)計(jì)決定。首先我們討論一下JSF中managed bean和backing bean的定義和使用。然后再介紹在JSF中如何處理安全

Managed bean, backing bean, view object, and domain object model
JSF 引入了兩個(gè)新概念:managed bean和backing bean。JSF提供了強(qiáng)大的管理bean的機(jī)制。一個(gè)被JSF管理的JavaBean對(duì)象叫做managed bean。一個(gè)managed bean描述了一個(gè)bean如何創(chuàng)建和管理的,這些和bean的功能無關(guān)。

Backing bean定義了頁面上的UI組件的屬性和處理邏輯。每一個(gè)backing bean的屬性對(duì)應(yīng)一個(gè)組件或者組件的值。Backing bean同時(shí)定義了一組執(zhí)行組件功能的方法,比如驗(yàn)證組件的數(shù)據(jù),處理組件觸發(fā)的事件,當(dāng)組件activate時(shí)處理與導(dǎo)航相關(guān)的操作。

一個(gè)典型的JSF應(yīng)用中的每一頁面都有一個(gè)backing bean。然而,實(shí)際中強(qiáng)制頁面和backing bean的一對(duì)一關(guān)系不是一個(gè)好的做法。它會(huì)導(dǎo)致類似代碼重復(fù)的問題。實(shí)際情況中,一些頁面也許會(huì)共享同一個(gè)backing bean。例如在JCatalog中,CreateProduct和EditProduct頁面共享同一個(gè)ProductBean定義。

一個(gè)View對(duì)象是一個(gè)只在表示層使用的model對(duì)象。它包含著必須在View層顯示的數(shù)據(jù),包含著驗(yàn)證用戶輸入,處理事件,同業(yè)務(wù)邏輯層交互的邏輯。在基于JSF的應(yīng)用中,backing bean就是view對(duì)象。在本文中,backing bean和view對(duì)象是可互換的概念。與 Struts中的ActionForm和Action概念相比,使用JSF中的backing bean開發(fā)更加符合OO設(shè)計(jì)習(xí)慣。一個(gè)backing bean不僅僅包含顯示數(shù)據(jù),還包括與這些數(shù)據(jù)相關(guān)的行為。而在Struts中,ActionForm和Action分別包含數(shù)據(jù)和邏輯。

我們大家都聽說過domain object model(域?qū)ο竽P停D敲磀omain object model和view object有什么不同呢?在一個(gè)簡(jiǎn)單的Web應(yīng)用中,一個(gè)域?qū)ο竽P徒?jīng)常穿越所有的層使用。然而在稍復(fù)雜的Web應(yīng)用中,一個(gè)獨(dú)立的view object是很需要的。Domain object model是關(guān)于業(yè)務(wù)對(duì)象(BO)的,應(yīng)該屬于業(yè)務(wù)邏輯層。它包含業(yè)務(wù)數(shù)據(jù)和與特定業(yè)務(wù)對(duì)象關(guān)聯(lián)的業(yè)務(wù)邏輯。一個(gè)view object包含著顯示相關(guān)的數(shù)據(jù)和行為。JCatalog的ProductListBean就是view object的一個(gè)好例子。它包含著表示層的數(shù)據(jù)和邏輯,比如分頁相關(guān)的數(shù)據(jù)和邏輯。將view object和domain object model分開的一個(gè)缺點(diǎn)就是必須在兩個(gè)對(duì)象模型之間進(jìn)行data mapping。在JCatalog中,ProductBeanBuidler和UserBeanBuilder使用了基于反射的Commons- BeanUtils包來實(shí)現(xiàn)data mapping。

安全

目前,JSF并沒有內(nèi)建的安全特性。示例應(yīng)用的安全需求是很簡(jiǎn)單的:僅當(dāng)用戶要登錄到administration intranet時(shí)需要基于用戶名密碼的認(rèn)證,而且不需要授權(quán)。
對(duì)于在JSF中的用戶認(rèn)證,有以下方案:
◆使用一個(gè)backing bean基類:這各方案很簡(jiǎn)單,但是會(huì)讓backing beans依賴于這個(gè)繼承結(jié)構(gòu)。(也就是backing bean都繼承這個(gè)基類)
◆使用一個(gè)JSF ViewHandler包裝類:這個(gè)方案會(huì)把安全邏輯緊緊地限制在JSF這個(gè)特殊的Web層技術(shù)上。
◆使用servlet filter:一個(gè)JSF應(yīng)用和其他的基于Java的Web應(yīng)用沒什么區(qū)別,因此一個(gè)filter就是處理認(rèn)證檢查的最好地方。這種方案安全邏輯不會(huì)綁定到特定Web應(yīng)用上。
在示例應(yīng)用中,SecurityFilter類處理用戶的認(rèn)證。目前,受保護(hù)的資源只包括三個(gè)頁面,所以為了簡(jiǎn)單起見,把它們的位置硬編碼到Filter類里面了,作為改進(jìn)你可以把具體的安全規(guī)則和受保護(hù)的資源寫入配置文件中。

【編輯推薦】

  1. JSF組件模型開發(fā)指南
  2. Seam與JSF的加減法
  3. JSF圖形組件管理圖形bean組件
  4. 開發(fā)自定義JSF組件
  5. JSF和Tapestry全面比較
責(zé)任編輯:佚名 來源: JavaEye
相關(guān)推薦

2009-06-25 13:03:48

JSF的UI組件

2009-06-29 13:22:19

JSF技術(shù)JSF組件

2009-06-25 14:53:35

自定義UI組件JSF框架

2009-06-11 11:22:40

JSFJSPJSF的UI組件

2009-06-22 13:27:01

JSF組件模型

2009-06-24 13:06:41

JSF組件Facelets

2009-06-25 14:26:33

JSFDojo小部件

2009-06-24 14:59:00

圖形bean組件JSF圖形組件

2009-06-22 13:41:58

FaceletsJSF組件

2009-09-21 17:30:25

組件復(fù)用服務(wù)復(fù)用

2009-06-23 13:01:04

JSF應(yīng)用

2009-06-24 16:30:21

JSF組件模型

2009-07-17 10:37:05

C#多線程

2009-07-08 09:32:25

Java設(shè)計(jì)模式

2009-06-24 15:13:36

自定義JSF組件

2009-06-23 17:54:41

OSGi與JSF

2009-06-17 15:18:38

JSF與Spring

2009-03-11 09:33:11

Lotus開發(fā)Workflow

2009-02-17 18:17:42

2009-07-14 11:08:42

WebRendererSwing應(yīng)用程序
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)