天天看點

專家訪談:JSF技術是否在國内普及

  rel="File-List" href="file:///C:%5CDOCUME%7E1%5Cjsj%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C02%5Cclip_filelist.xml" target="_blank" rel="external nofollow" >

專家訪談:JSF技術是否在國内普及

麻地河介紹:

湖南人氏,碩士,投身軟體行業超過十年。最初在某貿易公司電腦部任程式員三年,後以系統分析員身份進入某軟體公司,參與了若幹大型MIS的需求分析、設計和編碼,并先後擔任開發部經理及總工等職務。此後職業規劃漸從技術轉向管理。曾在 Nortel某R&D中心任職,對外企的軟體開發管理模式感受頗深,後受聘于國内某大型軟體企業,負責項目管理。2004年辭職創業,現為顧問。 因不舍程式員身份,遂自诩為IT自由撰稿人,希望藉此認識更多的程式員朋友,分享彼此的程式人生。

記者:請您用簡單的幾句話概括一下JSF

麻地河:JSF是Java Web表示層的标準規範,借鑒了包括Struts在内的很多Java Web架構技術的優點,是目前有影響力的Java Web架構技術的集大成者,今後也将繼續吸收最具代表性的Java Web技術。各大廠商不遺餘力地推廣JSF,正是看好了JSF的前景。現在Java Web的架構非常多,程式員面對這麼多的選擇時,往往無所适從,有一個規範無疑是好事。與其他所有Java Web架構不同的是,JSF不是具體的實作,它隻是一個規範,并沒有限制各個廠商的活力,他們可以在規範之下提出自己獨特的實作,在性能、易用性、友好性和擴充功能方面下功夫。有一個基本的框框,又留出足夠的自由空間,這正是規範的魅力所在。借此機會,我呼籲國内的程式員盡快轉向JSF,不管你是新程式員還是老程式員,學會JSF,讓你能夠把握Java Web架構技術的發展趨勢,從容面對Java Web開發的未來。

記者:JSF目前狀況如何?未來會向什麼方向發展?

麻地河:JSF的現狀可以從幾個方面來說明。先說接受程度,Google的關鍵詞搜尋資料顯示,在國外,JSF已經和Struts平分秋色,甚至略有超出,國内稍微差一點,Struts還是占據第一的位置。這是可以了解的,JSF的流行度在國外處于快速上升的階段,而國内對新技術的采納一般要比國外晚一年左右,是以,可以預計,一年之後,國内的JSF也将和Struts平起平坐。

再說JSF的成熟度。版本方面,JSF的版本由1.0到1.1到1.2,已經擠幹了bug,添足了功能,完成了雪中送炭的任務,進入實用階段,後面的2.0版本會有比較大的動作,包括提高易用性等,是錦上添花之舉。開發工具方面,現在市面上已經有很多支援JSF的IDE,最著名的當屬開源的NetBeans,這也是我目前使用的JSF開發工具。除此以外,IBM、Oracle、BEA和其他一些公司也有不錯的IDE,并且大部分都是開源或者免費的。最令人欣喜的是,JSF頁面可視化開發已經成為開發工具的一種“标準配置”,使用起來非常友善和高效。

不盡如人意的地方也是有的,最突出的是JSF的中文資料非常缺乏,尤其是面向JSF初學者的,以實用性為主的圖書,幾乎沒有。這也是我寫《JSF Web應用開發實戰》這本書的初衷。JSF的初學者不需要也沒有必要了解JSF的技術細節,他們需要的是快速進入JSF領域,馬上開始寫自己的第一個JSF程式,了解JSF有哪些技術要點,如何在Java Web程式設計中使用這些技術,還有就是豐富的、可以運作的範例,以及對範例的詳細代碼分析。《JSF Web應用開發實戰》這本書正是帶着這些目的去寫的。

JSF未來的發展,最值得關注的,是JSF工具的進化。任何技術,如果不能在工具的支援下給程式員帶來效率的提高和使用上的簡便,是不會長久的。JSF is designed to be tooled,離開工具,JSF的優勢無從發揮。工具的進化我認為會展現在兩條線上,一條線是繼續向可視化和自動編碼方向發展,例如,你拖放一個資料庫表到頁面上,工具可以自動生成規範的CRUD(指記錄的生成、讀取、更新和删除)代碼,很多目前需要手工編寫的代碼,未來會更多地由工具自動生成;另一條線是UI元件的大量湧現,專用的、通用的或者各種特殊用途的,有點類似Windows領域的ActiveX控件。實際上,現在已經有很多UI元件包出現了,有的還直接提供對Ajax的支援,不過現在UI元件包和開發工具的內建還不容易,未來會在這方面提出規範,使得開發工具和UI元件包能夠無縫內建,增加程式員的選擇範圍。

工具的進化,是程式員最容易感受到的,其實,作為Web UI的标準架構,未來JSF還會衍生出很多新技術。這方面JBoss已經走在前面,它的Seam允許程式員直接将EJB定義為JSF的托管Bean,進而将表現層和業務層很容易地“粘合”在一起。Seam是JBoss的私産,在規範領域,與之對應的是WebBeans,這一規範的提出,将把JSF和EJB有機地內建在一起,極大地簡化企業級Java Web應用的開發,非常值得期待。

記者:您說JSF能提高Java Web開發的效率,能說說具體是從哪些方面提高效率的嗎?

麻地河:關于JSF提高Java Web開發的效率,最明顯的莫過于JSF減少了業務無關代碼的程式設計量。這是什麼意思呢?我們編寫任何應用程式,代碼無非劃分為兩類,一類是業務相關的,一類是業務無關的。以登入頁面為例,業務相關代碼是指驗證使用者名和密碼并給出驗證結果的代碼,你可能針對某種規則去驗證,也可能與資料庫中的注冊資訊進行比對,驗證通過傳回true,否則傳回false,這些都是業務相關。業務無關的代碼是你擷取使用者名和密碼以及将驗證結果回饋給使用者的代碼,這包括從HTTP請求中解碼使用者輸入、将其轉換為字元串類型、驗證它的長度是否合适、将“恭喜你,驗證通過”或者“使用者名或密碼錯誤”的提示資訊顯示在頁面上等等。當然,這個劃分不是絕對的,有些代碼既可以了解為業務相關的,也可以了解為業務無關的,取決于你的觀察點。我粗略對比過,用JSP,業務相關代碼和業務無關代碼的比例大緻是一半對一半,而用JSF,這個比例可以上升到80%比20%,也就是說,原來你需要5個小時編寫業務無關代碼,現在你隻需要2個小時就夠了,多出來的3個小時,你可以編寫更多的業務相關代碼,這就是效率提高的表現。

為什麼JSF能夠做到大規模減少業務無關代碼呢?這是因為JSF架構替程式員處理了很多HTTP協定底層細節。比如說,多數情況下你不用編寫類型轉換代碼,JSF預設的轉換器會自動完成需要的類型轉換。再比如,假設你寫了驗證資料有效性的類,你不用考慮在什麼時候什麼地方顯式地執行個體化驗證器類,調用其驗證方法,也不用操心驗證錯誤消息怎麼顯示在頁面上,隻需配置好你的驗證器,JSF會在适當的時候自動完成這些工作。

限于時間關系,這裡隻能列舉JSF相對比較明顯的一些技術優勢,實際上,JSF有很多創新技術,例如托管Bean、導航、可插入性等等,當然,這些技術的優勢不是那麼直接表露,需要對JSF有一定的了解後才能體會到。可以這麼說,JSF誕生于Sun大刀闊斧簡化Java開發的大背景之下,其設計目的就是為了簡化Java Web開發,提高Java Web的開發效率,是以,即使你并不十分了解JSF的技術細節,你也可以相信這一點。

記者:很多程式員想學或者正在學JSF,對他們,您有什麼建議?學習JSF應該注意什麼問題?

麻地河:談到這個問題,讓我想起了很多年前大家學OO時的情景。我本人是從彙編開始學習程式設計的,中間經曆了Basic、Fortran、C、Pascal、Debase、FoxBase、PowerBuilder、Delphi等等很多程式設計語言,直到現在的Java。從一種程式設計語言向另一種程式設計語言的轉變,有時候很容易,有時候很難。大家可能發現,著名的C++并沒有出現在上面的清單中,為什麼?我其實是稍微懂一些C++的,所謂稍微,是指我能把C++當成C來用。

C++是面向對象的程式設計語言,而C是面向過程的,把C++當成C來用,實在是對C++的亵渎。據我所知,和我有着同樣經曆的老程式員,很多人也像我一樣,隻是“稍微”懂一點C++。相反,那些直接從C++開始的新手,卻很快學到C++的精髓。其實原因很簡單,在C++誕生之前,我們一直是面向過程程式設計的,C++要求我們面向對象,對于有着根深蒂固的面向過程思想的程式員來說,這個彎子拐得太猛了,令人難以适應。

從JSP或者Struts轉向JSF,和從面向過程轉向面向對象非常類似。《JSF Web應用開發實戰》這本書出版以後,為了配合讀者的要求,我在www.madihe.com上建立了論壇,并且公布了我的郵箱[email protected],用來和讀者交流。從論壇文章和讀者來信看,有着深厚的JSP或者Struts基礎的讀者更多地對JSF抱着審慎懷疑的态度,喜歡探讨各種架構技術的優劣,而初出茅廬的程式員卻對JSF展開懷抱,提出的都是與JSF使用有關的實際問題。

JSF和JSP或者Struts是完全不同的,就像面向過程和面向對象的不同。如果你是Java Web的初學者,那麼恭喜你,你沒有曆史包袱,可以放開手腳去幹;如果你是資深的JSP或者Struts程式員,你的知識積累可能是一種促進,也可能是一種阻礙,這取決于你的态度。JSF所提出的UI元件模型和事件驅動模式,不論是在JSP還是在Struts上,都不曾出現過,如果願意接受這種新技術并且适應它,那麼你很快就能學會JSF。如果你對JSF抱懷疑态度,淺嘗辄止者多半會放棄JSF,但锲而不舍者最終會為JSF的技術所折服,但你一定要有心理準備,探究JSF的實作細節,可能花費你很多的時間和精力。

具體來說,有這麼幾點,可以幫助你更快地學習JSF:

1. 不做架構優劣之辯。每種架構都有存在的理由,辯論一種架構能否“戰勝”另一種架構,隻會浪費你和别人的時間,除非你在兩方面都是專家,但即使是專家,在論壇中脫口而出的結論,也未必是深思熟慮的;

2. 接受JSF,而不是懷疑它,除非你已經對JSF了如指掌,達到了可以對它品頭論足的程度。僅僅用JSF做過幾個項目是不夠的,如果你能給出一個自己的JSF實作,那大家都會承認你是JSF專家。

3. 如果你還是忍不住懷疑JSF,那麼不妨留意一些基本事實。第一,JSF規範由Sun提出,先後獲得了IBM、Oracle、Borland、Apache、BEA等的支援,而Sun目前仍然穩坐Java老大的位置,其他如IBM、Oracle和Apache等也未見頹勢,這些巨鳄不倒,JSF不乏撐腰的;第二,JSF已經成為Java EE規範的強制部分,所有Java EE伺服器,必須支援JSF;第三,JSF的推進一天也沒有停滞,後續版本(JSF 2.0)陸續出現,基于JSF技術的新技術如JBoss的WebBeans不斷推出,開源的JSF元件包層出不窮。

記者:我知道您最近寫了一本JSF方面的專著,書名叫做《JSF Web應用開發實戰》,是目前國内不可多得的中文JSF原創類圖書精品,能談談您為什麼要寫這本書嗎?

麻地河:我寫這本書的目的其實很簡單,就是向國内的程式員推廣JSF這一Java Web程式設計技術。我最初接觸Java Web程式設計時,并不知道有JSF這個東西。我的第一個項目用的是JSP,很痛苦,為什麼呢,不是因為我要從零開始學習JSP,我的自學能力算比較強的,學習新技術不存在太大的困難,讓我覺得痛苦的是,我大部分的時間沒有花在業務邏輯上,而是花在了編寫與業務邏輯無關的Request和Response處理代碼上。做過項目的程式員都知道,項目的時間就像電腦的記憶體,永遠都不夠,JSP需要程式員花費大量精力照顧HTTP協定底層的細節,從這一點看,JSP的效率是很低的,是以,我在第二個項目時,就決定棄用JSP了。

那時是2004年,Struts如日中天,不過由于我是剛剛進入Java Web程式設計這個領域,相當的孤陋寡聞,是以并不知道大名鼎鼎的Struts。如果當時我請教過任何一個Java Web的高手,他們一定會推薦Struts給我,可是我沒有,我隻是悶頭在Sun的網站上尋找JSP的替代技術,就這樣,我在Sun的Java EE Tutorial文檔中看到了對JSF的介紹,可以說是一見鐘情。最初吸引我的是JSF的元件模型和事件驅動模式,因為這是我在桌面應用中早已熟知的概念,感覺很親切,後來才知道,JSF不止這些,它的集中式頁面導航、托管Bean機制以及工具支援下的可視化開發,都是提高開發效率的利器。

當時國内很少人用JSF,JSF的中文資源更是幾乎沒有,所有我很孤獨。碰到問題,沒有任何人可以幫我,我隻能在Sun的網站和論壇中搜尋答案,幸虧閱讀英文資料的能力還行,不過學起來确實辛苦。用JSF做了一兩個項目後,對JSF有了一定了解,知道了JSF的開發效率,為了交結更多的JSF同學,我就開始在IT168上發表文章介紹JSF,想讓更多的人轉向JSF。原本是想給自己一個找到組織的感覺,後來經不住IT168編輯趙恒的撺掇,最終決定安下心來寫了這本書,權當是對自己學習JSF的過程的一個總結吧。

專家訪談:JSF技術是否在國内普及