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

JSF和Struts的區(qū)別概述

開發(fā) 后端
本文介紹了JSF和Struts的相同點和不同點,包括JSF和Struts的側(cè)重點,控制層,頁面的導(dǎo)航和資源文件的管理等方面的不同。

據(jù)說JSF的主要負責(zé)人就是struts的主要作者,所以JSF和Struts的相似點還是有很多的。

◆都采用taglib來處理表示層
◆都是采用一套標(biāo)記庫來處理頁面的表示和model層的交互。
◆都采用了bean來作為和jsp頁面對應(yīng)的model層。該model層保存了jsp頁面上的數(shù)據(jù),同時可以作一些驗證工作,在struts中就是FormBean,在JSF中就是back bean.
◆都采用bean作為控制層,Struts中采用ActionBean來處理業(yè)務(wù)邏輯,對于簡單的應(yīng)用可以直接在ActionBean中編寫業(yè)務(wù)邏輯代碼,也可以調(diào)用另外的bean或者EJB來處理業(yè)務(wù)邏輯;對于JSF則采用backing bean來處理業(yè)務(wù)邏輯,同樣,backing bean也可以直接編寫業(yè)務(wù)邏輯或者調(diào)用其他的bean來處理業(yè)務(wù)邏輯。
◆都采用xml配置文件來處理bean的配置,頁面導(dǎo)航等問題,增加了系統(tǒng)的靈活性。
◆都采用資源文件來處理國際化和本地化的問題。

然而,JSF和Struts的不同點也很多,下面分別說明:

1、首先JSF和Struts的側(cè)重點不同,Struts側(cè)重于控制層,側(cè)重于如何分派和處理用戶的請求,所以表示層的taglib功能不夠強大。而JSF則側(cè)重于表示層,實現(xiàn)了大量的標(biāo)準(zhǔn)組件,允許開發(fā)人員對表示層有更多的控制權(quán),同時JSF實現(xiàn)了一個開放的架構(gòu),允許開發(fā)人員創(chuàng)建自己的組件,或者在現(xiàn)有的組件上繼承,開發(fā)功能更強大的組件。本人認為這是JSF***的一個特色。(有點類似于vcl和。net組件)

2、和jsp 對應(yīng)的model層,在Struts中采用FormBean來保存用戶輸入的數(shù)據(jù),基本上一般字段的類型都是String.而且可以進行簡單的驗證,當(dāng)然如果采用動態(tài)的FormBean就不能在FormBean中進行驗證了。在Struts中,jsp和FormBean是緊密結(jié)合在一起的,只要寫一個 jsp就必須對應(yīng)一個FormBean,同時jsp上的每個組件都對應(yīng)FormBean中相同名字的字段。本人認為這里不太靈活,比如,開發(fā)頁面的時候就必須考慮后臺的FormBean的實現(xiàn),但此時如果該頁面沒有FormBean的化則程序運行時會出錯。在JSF中,JSP頁面中的組件通過value屬性和backing bean的字段關(guān)聯(lián),這樣就有比較大的靈活性,頁面上的每個組件可以對應(yīng)相同的backing bean,也可以對應(yīng)不同的backing bean(當(dāng)然本人認為在一般的應(yīng)用中,一個頁面上的組件還是都對應(yīng)到一個backing bean較好),而且在設(shè)計頁面的時候可以不考慮backing bean如何設(shè)計,可以在設(shè)計完頁面之后再考慮backing bean的實現(xiàn)問題。

3、關(guān)于數(shù)據(jù)驗證,Struts可以采用在FormBean中的驗證函數(shù)中進 行驗證,也可以使用validator進行驗證(關(guān)于這種驗證方法,本人沒有測試過,不知效果如何,希望有經(jīng)驗的朋友指教!)。在JSF中,提供了一些標(biāo)準(zhǔn)的validator.可以對輸入的數(shù)據(jù)做一些簡單的驗證,例如驗證數(shù)值數(shù)據(jù)的范圍,字段是否必填等。但其驗證的反饋信息為英文。如果該信息不能自定義的化,那么針對國內(nèi)的應(yīng)用就不太適合了,目前本人還沒有找到該反饋信息是否能夠自定義的辦法。另外對于input類型的組件可以通過validator屬性關(guān)聯(lián)到backing bean的一個驗證方法上。在事件處理方法中進行驗證也是一個辦法。

在JSF中還有一個問題就是在JSF生成的頁面中,組件的Id命名比較怪異,所有的組件的id都類似于“form:compnentid”即form的名稱+“:” +組件的id.這樣通過javascript訪問組件就不是很方便,通過form.id形式好像不能訪問到組件。不知道各位有沒有好的解決方案。

4、控制層:Struts 中通過form的action來提交請求,通過ActionServlet來分發(fā)請求,***由ActionBean來處理請求,在Action中實現(xiàn)業(yè)務(wù)邏輯或者調(diào)用其他的業(yè)務(wù)邏輯bean來完成用戶的請求并返回客戶端。在這里,一個form只有一個action,即一個頁面只能提交到一個action Bean.對于頁面上有多個按鈕都需要提交的情況就需要使用一些變通的方法了。和傳統(tǒng)的web開發(fā)的模式比較接近。

對于JSF,采用了事件模式來處理用戶提交的請求。JSF實現(xiàn)了事件監(jiān)聽器來監(jiān)測事件,例如當(dāng)用戶單擊了一個按鈕就會觸發(fā)一個按鈕單擊事件,還有valuechange事件監(jiān)聽器來監(jiān)測數(shù)值改變的事件等。例如在頁面中通過通過CommandButton按鈕的action屬性來關(guān)聯(lián)到backing bean的方法來執(zhí)行相應(yīng)的操作。 每個不同的按鈕都可以關(guān)聯(lián)不同的方法,當(dāng)然也可以關(guān)聯(lián)相同的方法(這樣就和Action Bean非常類似了)。這中開發(fā)模式比較接近于傳統(tǒng)的c/s模式或者Asp.net的開發(fā)模式。對于那些從c/s架構(gòu)程序或者Asp.net架構(gòu)轉(zhuǎn)過來的開發(fā)者來說,這種方式可能更自然一些。

在JSF的一些簡單的示例程序中,通常把和jsp對應(yīng)的model層和jsp所提交的action放在 同一個backing bean中,即業(yè)務(wù)邏輯和業(yè)務(wù)邏輯所處理的數(shù)據(jù)在同一個bean中。本人認為,這樣的結(jié)構(gòu)只能用在簡單的應(yīng)用中,對于企業(yè)級的開發(fā)并不適合。應(yīng)該將頁面所關(guān)聯(lián)的數(shù)據(jù)和頁面所做的action分開,這樣的結(jié)構(gòu)更好一些,比較類似于struts的結(jié)構(gòu)。

JSF的backing bean中的方法訪問session,request等沒有struts中的直觀。筆者找了很多例子才知道如何訪問session中的數(shù)據(jù)。

5、頁面的導(dǎo)航:關(guān)于頁面的導(dǎo)航,struts和JSF比較類似。都是在xml的配置文件中配置導(dǎo)航規(guī)則。每個要跳轉(zhuǎn)的頁面都有一個別名,在程序中通過別名進行跳轉(zhuǎn)。另外Struts中的跳轉(zhuǎn)是在ActionBean中發(fā)生,execute方法***返回一個actionForward來進行跳轉(zhuǎn)。而JSF則在事件處理方法中***返回一個字符串,由系統(tǒng)在xml文件中匹配自動進行跳轉(zhuǎn)。在JSF中也可以通過在JSP頁面的CommandButton的action 屬性中直接填寫跳轉(zhuǎn)的別名直接跳轉(zhuǎn),而不必經(jīng)過事件處理方法的處理。

6、資源文件的管理:Struts和JSF對于資源文件的管理比較類似,Struts中在struts-config.xml中對資源文件進行配置,實現(xiàn)整個程序的統(tǒng)一管理。而對于JSF則可以在每個JSP頁面中分別定義資源文件,然后通過資源文件的別名來訪問資源文件中的內(nèi)容。兩者的格式也不相同,在 Struts中,格式為: grade1.grade2.grade3 = your information,通過“?!眮肀硎炯墑e。而在JSF中則必須通過下劃線來表示級別,例如grade1_grade2_grade3= your information.本人認為還是struts的方案更直觀一些。另外在Struts的資源文件中可以定義信息的顯示格式,例如: error.header,error.footer.而JSF中如何定義還不太清楚,或者可以通過定義Messages標(biāo)記的屬性來定義。

【編輯推薦】

  1. 簡述JSF是什么
  2. Facelets非常適合JSF組件
  3. JSF的八大優(yōu)勢
  4. JavaServer Faces(JSF)簡介
  5. 簡述JSF組件模型
責(zé)任編輯:佚名 來源: 中國IT實驗室
相關(guān)推薦

2009-06-24 17:43:24

Struts和JSF

2009-09-28 15:14:45

Hibernate S

2011-07-08 17:26:38

JSFStruts

2009-06-23 14:01:27

StrutsTapestryJSF

2009-06-23 13:21:26

JSF和Spring

2009-06-23 16:29:51

JSFSpring MVCStruts 2

2009-06-22 15:02:47

StrutsJSF

2009-06-22 14:22:41

JSF和Tapestr

2009-06-26 13:48:57

G4JSFGWTJSF

2009-07-03 10:48:12

JSP和JSF

2009-06-24 13:50:29

JSF和MVC

2009-06-24 16:42:17

JSF和Facelet

2011-06-30 10:20:38

JSFMVC

2009-06-24 16:16:30

JSF和Tapestr

2009-06-25 11:11:25

控制JSF切入點

2009-06-25 15:54:42

Struts2教程攔截器

2009-06-24 14:17:00

BackingBeanJSF配置文件

2009-06-25 14:26:33

JSFDojo小部件

2009-02-04 14:19:38

2009-09-23 17:56:45

JSF入門
點贊
收藏

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