溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

JSF和Struts的區(qū)別是什么

發(fā)布時間:2021-07-14 09:28:17 來源:億速云 閱讀:172 作者:chen 欄目:編程語言

本篇內(nèi)容介紹了“JSF和Struts的區(qū)別是什么”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

據(jù)說JSF的主要負(fù)責(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ā)功能更強大的組件。本人認(rèn)為這是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中相同名字的字段。本人認(rèn)為這里不太靈活,比如,開發(fā)頁面的時候就必須考慮后臺的FormBean的實現(xiàn),但此時如果該頁面沒有FormBean的化則程序運行時會出錯。在JSF中,JSP頁面中的組件通過value屬性和backing bean的字段關(guān)聯(lián),這樣就有比較大的靈活性,頁面上的每個組件可以對應(yīng)相同的backing bean,也可以對應(yīng)不同的backing bean(當(dāng)然本人認(rèn)為在一般的應(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中。本人認(rèn)為,這樣的結(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.本人認(rèn)為還是struts的方案更直觀一些。另外在Struts的資源文件中可以定義信息的顯示格式,例如: error.header,error.footer.而JSF中如何定義還不太清楚,或者可以通過定義Messages標(biāo)記的屬性來定義。

“JSF和Struts的區(qū)別是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI