NetBeans能否承載JSF中興之重? JSF開發工具

333111444發表於2007-11-14
工具是JSF曾經的痛,沒有視覺化開發工具支援的JSF,無法將其簡化Java Web開發的特性發揮得淋漓盡致。在經歷了緩慢的發展歷程後,NetBeans終於脫穎而出,實現了真正意義上的JSF視覺化開發。NetBeans的 Visual Web Pack 是JSF視覺化開發的工具包,具有多項創新的開發技術,正是這些突破常規的手法,造就了NetBeans在JSF視覺化開發領域的先鋒地位。

1. 工具是JSF曾經的痛
筆者自從數年前一個偶然的機會接觸到JSF後,一直對JSF寄予厚望,而JSF也未曾負我,在諸多專案中成為我的得力助手,讓我嚐到了快速Java Web開發的甜頭。有那麼一段時間,只要有人和我談論起Java Web方面的技術問題,我都會像個買瓜的王婆,拿出JSF來吹噓一番。後來,在IT168上陸續發表了幾篇介紹JSF的文章,被Itpub.net論壇轉載,竟然在壇友中博得了一個“JSF狂人”的稱號,一時之間,不知道是應該喜出望外,還是應該受寵若驚。非常巧合的是,“JSF”恰好是中文“教唆犯”的漢語拼音首字母,所以,每當我寫完一篇JSF的文章,極力鼓動Java Web程式設計師轉向JSF時,我感覺自己又當了一次“教唆犯”。其實,作為一個凡人,筆者既沒有“先天下之憂而憂,後天下之樂而樂”的崇高境界,也不能實踐 “勿以惡小而為之,勿以善小而不為”的古訓,之所以為JSF奔走吶喊,只是因為JSF曾經帶我走出Java Web的泥綽,使得作為程式設計師的我,過上了稍微輕鬆一些的生活。在大批Java Web程式設計師仍然在JSP的亂麻中“剪不斷,理還亂”時,我覺得自己有義務向他們介紹JSF,哪怕是出於同病相憐的動機也好。

儘管我費力地鼓吹JSF,其實在私底下,我不得不承認,JSF有一隻痛腳。這隻痛腳不是別的,就是工具的支援。關於JSF的優勢,我可以如數家珍般娓娓道來,比如UI元件模型,比如事件驅動,比如集中式的頁面導航等等,不一而足,不過,一旦有人問起“JSF比ASP.net如何”這樣的問題時,我只好顧左右而言他,打個哈哈轉移話題。在技術架構上,JSF比ASP.net有過之而無不及,且不說Java語言的廣泛適用性,起碼JSF與具體標記語言的無關性,就讓ASP.net自愧弗如,而且,JSF是一個精心設計的框架,有著豐富的插入點,框架的任何一個特徵,都允許使用者用自己的實現去替代,在開放性方面,非ASP.net可比。可惜,這些優勢只對專家有意義,在普通程式設計師眼裡,ASP.net才是完美的開發環境,是程式設計師的利器。在一個 Microsoft Visual系列高度整合的開發環境裡,用滑鼠拖拖拉拉,寫上不多的幾行程式碼,然後一個功能強大的Web應用就誕生了。Microsoft徹底改變了傳統的Web程式設計方式,ASP.net讓程式設計師可以半躺在沙發上編寫程式,一杯清茶下去,程式已經歡快執行。

Java Web的程式設計師就沒有這麼幸運了。JSF推出以後,雖然號稱“designed to be tooled”,但能夠真正支援視覺化開發的IDE實際上並不多見,尤其是在開源領域,可以說幾乎沒有。JBuilder曾經是最好的JSF工具,不過, JBuilder對JSF視覺化開發的支援,僅限於導航規則的編輯,而這其實對JSF應用的開發幫助不大。在JBuilder中,JSF的元件不是顯示為一個圖示,而是一個tag;當你試圖從皮膚上拖放一個JSF元件到頁面上時,你看到的也不是一個元件,而是一段程式碼。儘管如此,JBuilder還是在其介紹文件中聲稱支援JSF視覺化開發,很讓我興奮了一陣,安裝上以後才知道,此“視覺化”非彼“視覺化”也。也許是因為JBuilder名聲太響,此後東施效顰者眾,很多JSF的IDE都會弄一個導航規則的視覺化編輯器出來,然後給自己貼上“JSF視覺化開發”的標籤,來吸引Java Web程式設計師的眼球。
直到NetBeans出現,這種狀況才得到改變。
1


2. NetBeans的視覺化開發

在Sun的JSF論壇中,對於NetBeans的評價,可以用“驚呼”二字來形容。JSF的開發工具非常多,有開源的,也有商業的,初學者在如此眾多的工具面前,往往眼花繚亂,無法作出抉擇。因此,論壇中常有JSF的初學者發帖子,詢問用什麼開發工具好。過來者們多半會推薦自己使用過或者正在使用的工具,不過,任何一種工具都是譭譽各半,有人說好,一定有人說不好。唯有NetBeans是個例外,用過的無不大加讚賞,極力推薦。

[@more@]

NetBeans的名字非常奇怪,第一次看到這個單詞時,我還以為是JavaBeans的升級版本呢。後來才知道原來是個免費的開源Java整合開發環境。NetBeans可以執行在幾乎所有的平臺上,包括Windows, Linux, Solaris, and the MacOS。經過簡單的安裝過程後,程式設計師需要的所有工具,就都唾手可得了。不管是桌面應用、企業應用、Web應用還是移動應用,NetBeans都可以給程式設計師提供全面的視覺化支援。

在架構上,NetBeans類似於現今非常成功的Eclipse,在一個基礎框架上,透過整合不同的外掛或者工具包來擴充套件其功能。但與Eclipse相比,NetBeans最近的發展要迅速得多,大有後來居上之勢。現在最新的NetBeans版本是5.5,這個版本已經具備相當豐富的功能。

例如,脫胎於Matisse專案的Swing GUI Builder,是一個直觀的Swing GUI開發工具包,透過簡單地從元件皮膚中拖放元件到介面上,然後編輯其屬性,就可以完成使用者介面的開發。在這個工具包的支援下,程式設計師甚至可以當著使用者的面設計GUI原型,讓使用者馬上看到自己的設想變為現實,提高溝通效率和使用者滿意度。

Web Application Development是用來開發Web應用的,支援JavaServer Faces (JSF)、JavaServer Pages (JSP)、持久化單元、Struts以及JSP的標準標籤庫JSTL。Web Application Development附帶了一個部署描述符的視覺化編輯器,為了方便Web應用的除錯,還提供了HTTP監視器,可以記錄和檢視HTTP協議互動的細節。最值得稱道的是Web Application Development對Web資料庫應用的特別支援,只需幾個步驟,就可以生成一個全功能的JSF網頁,用來操控後臺資料庫表中的資料,例如查詢、新增、修改、刪除等等。

企業應用的開發支援則由Enterprise Development工具包提供,支援企業應用、EJB模組、Web應用和企業應用客戶端的開發。這個工具包含有大量的嚮導,以前很複雜的開發過程,現在變得十分“傻瓜”了,例如Enterprise Java Beans (EJB 3)和JAX-WS web services的開發等等。

在應用伺服器方面,NetBeans內建了對主流應用伺服器的支援,包括Sun Application Server、Tomcat、Weblogic9和JBoss 4,如此廣泛的應用伺服器支援,幾乎可以滿足任何Java應用的需求,而且更多的應用伺服器還可以透過配置整合到NetBeans中。NetBeans支援J2EE 1.4和Java EE 5,包括JAX-RPC和JSR 109 標準。

除此以外,在典型的IDE中可以看到的功能,NetBeans都具備,例如版本控制、開發者協作、UML建模等等。NetBeans不但支援常規的 Java應用開發,還支援Java ME和基於SOA架構的應用開發,甚至,NetBeans的C/C++工具包還提供對C/C++語言開發的支援,並且可以跨越Microsoft Windows、Linux和Solaris等不同的平臺。對於需要在Java和C/C++兩種語言環境下工作的程式設計師來說,擁有一套NetBeans就足夠了。

1


3. NetBeans下真正的JSF視覺化開發
前面羅列了NetBeans在Java視覺化開發方面具備的功能,有了這些功能作為基礎,NetBeans中JSF的視覺化開發,可以說是水到渠成了。完成這一使命的,就是NetBeans最具價值的Visual Web Pack工具包。如同其他工具包一樣,這個工具包也是免費的,不過,免費的Visual Web Pack工具包已經在很多方面超越了大多數商業開發工具,尤其是在JSF應用的開發上。
Visual Web Pack工具包給NetBeans提供了功能強大的開發工具,在這些工具的支援下,Web應用的開發速度得到極大的提高。視覺化是Visual Web Pack工具包的核心目標,因此,Visual Web Pack工具包中含有多個視覺化編輯器,可以利用諸如AJAX、CCS和JSF等技術,快速構建標準的Web應用。

談到視覺化開發,首先想到的肯定是Web頁面的開發。用JSP技術開發Web頁面是一個痛苦的過程,早期的JSP在頁面上夾雜了太多的coding元素,使得JSP頁面的開發和維護成為程式設計師的惡夢,雖然現行的JSP版本有了一些改進,但仍然存在諸多不足。JSF是Sun簡化Web開發的一種嘗試,在 Visual Web Pack工具包支援下,這種嘗試取得了極大的成功。建立一個頁面,從皮膚上拖放元件到頁面上,編輯元件的屬性,編寫事件處理例程,從Visual Web Pack開發Web頁面的步驟中,已經看不到多少“Web”的東西了。當然,Web應用和桌面應用有著本質的不同,不過,Visual Web Pack已經封裝了這二者之間的差異,感覺上,Web應用和普通桌面應用的開發過程完全一樣。

除了頁面上的UI元件外,Visual Web Pack甚至將視覺化的概念擴充套件到了其他JSF元件。例如,JSF的轉換器和驗證器,它們原本不是視覺化元件,不過,在Visual Web Pack下,為一個視覺化元件繫結轉換器和驗證器的過程,如同為頁面新增UI元件一樣,也是簡單的drag-and-drop。這得益於JSF的高度模組化設計,任何程式設計元素都是component,都可以drag-and-drop。

可以drag-and-drop的還不止這些,複雜的資料庫程式設計,也已經被Visual Web Pack視覺化了。配置好資料庫後,從頁面訪問資料庫表中記錄的最簡單方法只有兩個步驟:第一,在頁面上放置一個用來顯示資料的UI元件,例如下拉選單元件;第二,將一個表直接拖放到UI元件上。就這樣,無需任何程式碼,執行時,這個下拉選單元件將顯示出表中第一個非鍵列的所有記錄值。這在Web資料庫應用中非常有用,例如,透過這樣的兩次drag-and-drop操作,你就可以在電子商務網站上顯示商品類別的清單,供使用者選擇。如果這樣過於簡單,不能滿足你的需求的話,那麼,你也可以選擇更精確的方法,將表拖放到頁面上(而不是元件上),然後透過“繫結到資料提供器”,選擇你希望在列表中顯示出來的欄位。這樣,你可以不單顯示商品類別的名稱,還可以同時顯示對商品類別的簡單描述等等。

頁面導航是Web應用所特有的要求。與其他框架不同,JSF的頁面導航是集中式的,這是JSF的一個創舉。Web應用是由頁面組成的,當應用的規模增大,頁面數量也隨之增加到一定程度時,在頁面中導航,有點類似大海航行,容易讓人摸不著方向。分散式的導航控制在小規模應用場合下,簡單易行,不過,大規模應用更適合採用JSF集中式的導航控制。Visual Web Pack提供了一個視覺化的頁面導航設計器,開啟設計器,Visual Web Pack自動將應用的所有頁面顯示為一個個小圖示,而所謂的導航,只是從一個頁面拖動一條連線到另一個頁面,僅此而已,形象而又直觀。一條連線稱為一個出口,給出口命名後,在程式碼中就可以透過選擇出口來導航到指定的頁面。
1

4. NetBeans的創新
限於篇幅,上面所介紹的,並非NetBeans視覺化特徵的全部,NetBeans的Visual Web Pack和JSF珠聯璧合,在Java Web的視覺化開發方面,向前邁出了非常成功的一步。

熟悉JSF的讀者一定知道,JSF面世已經好幾年了,雖然JSF的視覺化開發工具一直在進步,不過推進速度顯然不盡人意。包括Borland等在內的大牌 IDE工具提供商,花了幾年的時間,也沒有能夠推出一個讓程式設計師得心應手的JSF視覺化開發工具,為什麼NetBeans的Visual Web Pack能夠取得如此巨大的進步?在NetBeans視覺化JSF應用開發的背後,到底隱藏著什麼玄機?
要解答這些問題,還得從JSF本身說起。JSF是Java Web框架發展歷程上的一個特立獨行者,集簡單和複雜於一身,而且是典型的極端主義。一方面,JSF的設計目標是簡化Java Web開發,另一方面,JSF本身又是迄今為止最複雜的Java Web框架。這是JSF的兩個特點,前一個特點由於工具的缺乏,並沒有得到很好的發揮,倒是後一個特點,早被Sun的專家們有意無意地“推廣”得家喻戶曉了。

別的不說,一個被劃分了六個階段的請求處理生命週期,就足以讓百分之九十的初學者望而卻步了,剩下百分之十迎難而上的無畏者,半途中恐怕又被複雜的“模型”“模式”難倒一大片。只有大難不死的幾個好鑽牛角尖者,費九牛二虎之力弄明白了JSF的理論後,卻發現缺乏工具支援的JSF,其實只是“看上去很美”。

沒有工具支援的JSF,像一個迷宮,到達出口的路徑有無數條,程式設計師寶貴的時間,大半浪費在選擇一條合適的路徑上了。工具對JSF來說舉足輕重,但工具廠商如果只把思路侷限於JSF的規範之內,那麼,工具無非是給迷宮的道路鋪上水泥而已,路雖然好走了,但解決不了方向性的問題。很多開發工具只是在做鋪路的工作,包括大名鼎鼎的JBuilder以及Eclipse下種類繁多的JSF外掛或外掛包。

NetBeans終於在這方面有所突破,Visual Web Pack不但鋪了路,還給迷宮架上了一座座橋樑,化繁雜為簡潔,在迷宮入口與出口之間建立了直接的聯通道路,彷佛現代城市中的立交橋和高架路。 Visual Web Pack採用了很多項技術,來降低JSF框架的使用難度,這些技術,有的嚴格遵循JSF規範,有的是對規範的擴充套件,有的甚至與JSF規範的建議相左,不管怎樣,採用了這些創新技術的NetBeans,把其他JSF工具遠遠地甩到了後面。

比如頁面Bean就是Visual Web Pack的一項創新技術。當程式設計師在NetBeans中建立一個網頁時,NetBeans自動地建立一個同名的頁面Bean,並將這兩者繫結在一起。 JSF規範本身並沒有頁面Bean這個概念,有的只是託管Bean。頁面Bean其實就是託管Bean,只不過因為它和頁面有一一對應的關係, NetBeans將其稱為頁面Bean,以彰顯其特別的用途。

託管Bean和繫結,都是JSF的標準技術,不足為奇,但將這兩項技術組合起來,就是一個創舉。做過JSF開發的程式設計師,恐怕都為頁面和託管Bean的對應關係煩惱過,是一對多、多對一,還是一對一、多對多,不同的程式設計師有不同的選擇,甚至同一個程式設計師一覺醒來,也可能完全推翻自己昨天的設計。在 NetBeans中,這個不再是問題了,Visual Web Pack自動建立一對一的關係,自動以例項繫結的方式溝通頁面元件和Bean屬性,自動維護頁面和頁面Bean的同步,自動保持資料的同步更新等等。有了頁面Bean,如果你想在程式碼中訪問頁面元件,直接訪問頁面Bean就行了,它是頁面的程式設計邏輯,是Java程式碼形式的頁面。

1


5. 來自沃土的智慧和力量助NetBeans成長
當我第一次使用Visual Web Pack時,有一種似曾相識的感覺,嘗試新建一個頁面後,終於發現,原來Visual Web Pack和Sun Java Studio Creator如出一轍。事實上,Visual Web Pack(以下簡稱VWP)就是Sun Java Studio Creator 2(一下簡稱Creator)的替身。

NetBeans已經發展多年,不過,一直是Java高手的開發工具,並非面向Java初學者的。2001年,當Sun意識到自己缺乏一個對初學者有吸引力的IDE時,決定開發一個全新的IDE,這就是後來的Creator。2004年,當JSF推出時,Creator是第一個支援視覺化JSF頁面開發的 IDE,我試用過幾天,發現確實不錯,可惜,Creator對記憶體的要求太高,在普遍只有512M記憶體的情況下,最終還是放棄了Creator,繼續使用 JBuilder。

Creator和NetBeans有著千絲萬縷的關係,它們基於相同的程式碼庫,只不過Creator借鑑了VB/ASP開發者們常用的IDE的設計理念,強調視覺化和易用性,目標顯然是降低Java開發的難度。而NetBeans則突出了與Java標準和規範的同步性,一旦有新的Java技術出現, NetBeans很快就推出新版本。維護兩套開發工具顯然不符合經濟原則,因此,當Java走向 EE 5,JSF跨出1.2的步伐時,Sun決定將Creator納入NetBeans的版圖,這就是NetBeans的工具包VWP。

VWP 和Creator的這種緊密關係,說明了為什麼VWP在易用性方面這麼突出。VB可以說是最容易使用的開發語言之一,既然要和VB的開發工具競爭,或者說模仿,那麼,Creator在視覺化和易用性方面的起點自然不會太低,也正因為如此,作為Creator替身的VWP,才會成為真正支援JSF視覺化開發的優秀工具。

其實,不論是JBuilder還是Eclipse,都是視覺化開發工具的典範,只是在JSF應用開發方面,NetBeans走到了前面。這主要是因為 NetBeans紮根於Sun這塊沃土,能夠吸取來自Sun專家組的智慧和力量。JSF是Sun的賭注,Sun在JSF上投入重兵,意欲搶佔Web應用開發的市場份額,因此,為了與JSF配套的開發工具,Sun不惜傾其所有,把原先收費的Creator免費化,並移植到使用者最多的NetBeans上。

毫無疑問,JSF的原理,Sun的專家組是最清楚的,正是基於對JSF技術來龍去脈的深刻理解,NetBeans才敢於在VWP中對JSF的開發進行大刀闊斧的創新。所謂藝高人膽大,憑藉一系列開創性的手法,VWP終於突出重圍,成為JSF視覺化開發的領袖。
1



6. NetBeans在創新中前進
前面介紹的頁面Bean就是一個創新的例子。如果說,頁面Beans多少還有託管Bean的影子,還與JSF規範保留一些聯絡的話,那麼,另一項創新,則與JSF規範徹底劃清了界限,這就是VWP中的資料提供器。理論上,JSF只是一個表示層框架,與資料層相距甚遠,中間還隔著一個應用層,因此,典型的 JSF工具都只是在UI元件上下功夫。但是,Web應用的現實是,幾乎所有Web應用都離不開資料庫。推卻責任的做法是把資料庫訪問的問題交給程式設計師自己去處理,或JDBC,或Hibernate,與JSF無關。

VWP沒有這樣做,而是承擔起了這個責任,用一個稱為資料提供器的元件,在頁面和資料庫之間開通一條綠色通道,極大地簡化了Web資料庫應用的開發。當然,從體系結構的觀點來看,這條綠色通道越過了應用層,違背了應用分層的原則,不過,在小規模應用場合,這樣做無傷大雅,喪失一定的可擴充套件性和可維護性,換來大批JSF初學者的莫大驚喜,所得顯然遠超所失。再者,如果一定要嚴守三層體系架構,VWP也是允許的。

Java太需要創新了,不是技術上的創新,而是簡化Java開發方面的創新。一直以來,Java都是陽春白雪曲高和寡,一個Java初學者,往往要經過兩三年的摸索和鍛鍊,才能叩開Java的大門。兩三年是個不短的時間,程式設計師的職業生涯非常有限,尤其在中國,30歲還寫程式碼的,可以鳳毛麟角來形容。如果說期待一款三天就能開始做專案的Java開發工具不現實的話,那麼用三個月時間成為一個Java Web開發的熟手,VWP應該可以勝任。

每個程式設計師都面臨著專案的壓力,如果不能提高開發效率,唯有用加班和熬夜來彌補時間和精力的不足了,我想,除了天生的工作狂,不會有人願意這樣。程式設計師要靠公司來生存,而公司要靠專案來生存,程式設計師需要一爐旺火一口好鍋,能夠快速炒熟一個專案,養活公司,養活自己。VWP無疑是Java Web程式設計師的一爐旺火一口好鍋,支援最新的Java平臺和JSF標準,用VWP開發Java Web應用,才能真正做到事半功倍。

我們期待NetBeans創新的步伐不要停止,希望VWP給程式設計師們奉獻更多更強大的工具,提高我們的開發效率,讓我們的生活變得輕鬆一些,愜意一些。 NetBeans 6.0很快就會推出,而JSF的2.0版本也在醞釀之中,讓我們在享受NetBeans 5.5和JSF 1.2帶來的全新Java Web開發體驗的同時,樂觀地期待新的版本帶給我們新的驚喜吧。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12058779/viewspace-982421/,如需轉載,請註明出處,否則將追究法律責任。

相關文章