使用J2EE Web開發(fā)已經(jīng)好幾年了,從JSP、Struts、WebWork到現(xiàn)在的Struts 2、Wicket,沒有一個用起來簡單順手的。
無論哪個框架吹噓自己有多么簡單和高效的生產(chǎn)力,甚至讓一個從未接觸過Web開發(fā)的人5分鐘能上手,絕對是騙人的。照著教程做一個Hello World還可以,一旦網(wǎng)站規(guī)模一大,根本無法維護。
再深入挖掘一下,你會發(fā)現(xiàn),其實一個MVC框架無論服務(wù)器端設(shè)計有多么差,其實也差不到哪去,有面向?qū)ο蠼?jīng)驗的開發(fā)人員都可以寫出比較能維護的代碼,即便像Struts這種比較古老的框架,服務(wù)器端開發(fā)也不難,和WebWork2比僅僅是不方便而已。
但是到了View這一層就五花八門了,總體來說,有以下幾路主流門派:
1. 以Struts為代表的JSP + Tag派,真叫一個難用,尤其是Tag,不但要查手冊,你還必須寫出if equals ... else的邏輯來。
2. 以JSF為代表的全Tag派,基本上寫一個JSP和一個XML沒啥區(qū)別,都是Tag堆出來的,甚至變態(tài)到HTML元素都給Tag了,比如<h:div>。
3. 以Wicket為代表的嵌入式派,可以通過<span wicket:id="message" id="message">來搞定,不破壞HTML,不過通過Filter過濾性能值得懷疑。
無論哪種MVC框架,目的都是要簡化View的開發(fā),然而在實際使用時卻發(fā)現(xiàn),簡化了簡單的頁面,復(fù)雜頁面卻變得更復(fù)雜了,因為這些MVC框架都普遍忽視了一個基本原理:現(xiàn)代Web技術(shù)是建立在HTML+CSS+JavaScript基礎(chǔ)上的,任何試圖幫助Java開發(fā)者隱藏HTML、CSS和JavaScript的努力最終都將阻礙Web開發(fā)。不會HTML,不會CSS,不會JavaScript,那就不要做Web開發(fā),無論你多么精通Java!
正是由于這些MVC框架有意無意地讓Java開發(fā)人員遠離HTML,才造成了View開發(fā)的困難重重。尤其以JSF為代表,性能就不說了,要添加JavaScript你只能先看編譯后的HTML源碼,要修改CSS要DEBUG至少N次,所有的可視化HTML編輯器都用不了。
所以,要真正提高Web開發(fā)的生產(chǎn)力,尤其是頁面的可維護性,Web頁面必須由精通HTML+CSS+JavaScript的開發(fā)人員完成,服務(wù)器端技術(shù)對這些的侵入性越小,頁面越容易維護。目前我認為比較好的View框架還是Velocity和FreeMarker,通過<div>${message}</div>比JSP Tag強很多,結(jié)合HTML可視化編輯器(主要指Dreamwaver),調(diào)試起來非常方便,而且不用重啟服務(wù)器。至于服務(wù)器端,其實各MVC大同小異,我一直使用Spring MVC+Velocity,少集成一個框架畢竟麻煩少一些。
在分工日益精細的今天,讓Java開發(fā)人員遠離HTML,也許體現(xiàn)了他們的用意。讓精通 HTML CSS JavaScript 的人員做 View,Java 程序員在自己該做的事情。
任何試圖幫助Java開發(fā)者隱藏HTML、CSS和JavaScript的努力最終都將阻礙Web開發(fā)。不會HTML,不會CSS,不會JavaScript,那就不要做Web開發(fā) 有同感。在使用中我一般都不使用html的tag,我覺得這些tag畫蛇添足。
相當(dāng)有同感,現(xiàn)在的web開發(fā)特別是java體系的,總是在強調(diào)新技術(shù),框架,模式等,在開發(fā)效率等方面完全不能和傳統(tǒng)cs程序相比,所以我們目前在嘗試做一些類似cs的控件這是實際項目中應(yīng)用的效果: http://blog.csdn.net/lakesea/archive/2009/03/17/3999514.aspx
同感,用一些tag之后,會使頁面不可控,尤其是做一些復(fù)雜界面的時候,要用很多js,用tag做相當(dāng)不方便
樓主說的有道理!