自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

淺談UI組件與JSF應用

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1.Model-View-Controller

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

2.JavaServer Faces

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

3.JSF和MVC

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

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

為什么使用JSF?

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

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

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

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

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

一個典型的JSF應用中的每一頁面都有一個backing bean。然而,實際中強制頁面和backing bean的一對一關(guān)系不是一個好的做法。它會導致類似代碼重復的問題。實際情況中,一些頁面也許會共享同一個backing bean。例如在JCatalog中,CreateProduct和EditProduct頁面共享同一個ProductBean定義。

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

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

安全

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

【編輯推薦】

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

2009-06-25 13:03:48

JSF的UI組件

2009-06-29 13:22:19

JSF技術(shù)JSF組件

2009-06-11 11:22:40

JSFJSPJSF的UI組件

2009-06-25 14:53:35

自定義UI組件JSF框架

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

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

2009-06-23 13:01:04

JSF應用

2009-06-24 16:30:21

JSF組件模型

2009-07-17 10:37:05

C#多線程

2009-06-24 15:13:36

自定義JSF組件

2009-07-08 09:32:25

Java設(shè)計模式

2009-06-23 17:54:41

OSGi與JSF

2009-06-17 15:18:38

JSF與Spring

2009-07-14 11:08:42

WebRendererSwing應用程序

2009-03-11 09:33:11

Lotus開發(fā)Workflow

2009-02-17 18:17:42

點贊
收藏

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