經過數年的“框架大戰”,Java界的各種框架找到了自己應有的位置。
Spring+Hibernate+Struts已成為Java開發的主流體系。在這個體系中,Spring+Hibernate的地位應該說短期內是難以撼動了。除了新興的Jboss Seam作為挑戰者之外,幾乎難有勁敵。有趣的是當初Spring、Hibernate作為挑戰者,將官方的EJB成功挑落馬下;這次反倒是官方的EBJ3成了挑戰者,不知結局如何。
Java B/S編程中歷來戰火最激烈的其實還在Web層,框架的數量最多,爭議最大。
一切由Struts而起,而Struts最終也坐穩了第一個時代的王座。在技術層面,Struts 1.x已經被無數人抱怨過、批評過,但終於還是穩坐王位,這充分說明了習慣的力量。“穩定壓倒一切”,這句話在IT技術領域仍然適用。
其實IT應用技術,什麼新鮮玩意並不難學。難的是標准化和規范化。每個程序員都有自己的思路和習慣,寫出來的代碼自然是五花八門。Java何以成為編程界的老大,很重要的一點在於Java的規范化。這種規范化很高的語言適用於多人合作的大型項目,便於溝通和理解,也就便於集成和維護。Java世界為什麼會框架橫飛,說到底還是規范化的需要。純jsp和Struts寫Web誰快,擺明了是JSP。那撐飽了用Struts?原因在於100個人寫出來的JSP,有100種寫法;而100個人寫出來的Struts,基本相似。Struts之成功,正緣於其在Java Web層的規范化方面所做出的貢獻。
然而長江後浪推前浪,Struts 1.x的技術缺陷究竟是隱患。
Sun力推JSF,打算一雪Web層框架缺失之恥。可惜JSF既要沿用Swing的技術路線,又要學Asp.Net,還要照顧產商的IDE,結果搞了個四不象,弄得裡外不是人。當然Sun的技術實力究竟是超強的,只要別重蹈EJB的覆轍,拿出點專斷的精神(像這兩年的NetBeans),做出像Swing那樣水准的東西,JSF當大有作為。JSF現在比較有優勢的是對Ajax的集成,這一點走在了其他框架的前面。
而Struts就更沒有志氣了,把WebWork換了個標簽,湊出個Struts2,Bug多多。說實在話,根本不如原版的WebWork。假如不是靠了原先的fans捧場,根本就沒得混。不過Struts原本就不是以技術取勝的,靠的是搶占先機帶來的習慣優勢。假如原先的fans們在這兩年內都能轉到Struts2,那麼Struts二世仍將雄霸天下。
綜上所述,未來兩年,JSF與Struts將展開Java Web框架的最終戰爭。
以筆者愚見,結局有二:一是不論Struts還是JSF獲勝,Java Web層都將結束混戰的局面,這對Java Web開發的標准化是非常有利的,並有助於鞏固Java在B/S界的地位;二是Struts1.x、Struts2、JSF三分天下,必然從整體上削弱Java在B/S界的競爭力,並將進一步被RoR、ASP.NET、PHP所蠶食。