Posted on 2005-11-15 12:21
canonical 閱讀(414)
評(píng)論(0) 編輯 收藏 所屬分類:
軟件開發(fā)
一個(gè)技術(shù)的成功,在于最終占據(jù)了某個(gè)概念。當(dāng)我們應(yīng)用到此概念的時(shí)候,首先想到的就是這個(gè)技術(shù)實(shí)現(xiàn),久而久之,形成一個(gè)自我證明的過程。而有些技術(shù)卻是在
其位無能謀其政,實(shí)在是讓人不得不為它扼腕嘆息呀。jsp tag正是這樣一種技術(shù)。有些人認(rèn)為jsp
tag只是jsp的一種擴(kuò)展,只是一種syntax suger, 這正反映了此技術(shù)所面臨的一種困境。這里指出一些jsp
tag的設(shè)計(jì)缺陷,并無貶低這種技術(shù)的意圖,只是希望拋磚引玉,引發(fā)大家對(duì)這種技術(shù)改進(jìn)的探討。
引用:
jsp tag是服務(wù)器端的擴(kuò)展標(biāo)簽機(jī)制,它是一系列java服務(wù)器端技術(shù)的基礎(chǔ)。但其設(shè)計(jì)之初的幾個(gè)重大缺陷已經(jīng)使得這種技術(shù)不堪重負(fù)。
對(duì)比dotNet平臺(tái)我們可以知道,需要一種后臺(tái)標(biāo)簽機(jī)制,jsp
tag是唯一的標(biāo)準(zhǔn)(JSF等機(jī)制都依賴于此),可它的設(shè)計(jì)給所有希望基于它開發(fā)的開發(fā)人員造成了巨大的困擾。實(shí)際上我對(duì)這個(gè)技術(shù)感到很失望,當(dāng)然我們提
出了相應(yīng)的替代方案。在我們的開發(fā)框架中使用的是重新設(shè)計(jì)的一套與網(wǎng)絡(luò)無關(guān)的xml動(dòng)態(tài)標(biāo)簽機(jī)制。我的觀點(diǎn)是基于jsp
tag技術(shù),無法開發(fā)出與dotNet的便捷程度相當(dāng)?shù)姆?wù)端技術(shù),所以這是它作為標(biāo)準(zhǔn)的罪過。jsp
tag不應(yīng)該是jsp的補(bǔ)充,它搭上了xml這條大船,應(yīng)該去走自己的路,而不應(yīng)該成為應(yīng)用上的雞肋。
引用:
1. jsp tag與jsp 模型緊密綁定,使得業(yè)務(wù)邏輯很難抽象到tag中。而且脫離了jsp環(huán)境,在jsp tag上的技術(shù)投資將一無是處。
這里說業(yè)務(wù)邏輯可能是有些不妥,容易引起誤解。因?yàn)槲业墓ぷ髯鲈谥虚g件層,所以我的原意是基于jsp
tag開發(fā)一系列的擴(kuò)展技術(shù),比如緩存等。我們的xml標(biāo)簽技術(shù)是與jsp模型無關(guān)的,在前臺(tái)用于界面渲染,在后臺(tái)用于工作流描述。而且很方便的就可以與
其它xml技術(shù)結(jié)合,比如集成ant。
引用:
2. jsp tag的編碼邏輯非常繁瑣, 特別是寫loop和容器類標(biāo)簽的時(shí)候。在2.0之前不支持從tag本身產(chǎn)生tag更是應(yīng)用上的主要障礙。
這絕對(duì)是個(gè)重大問題,試問多少人自己去開發(fā)jsp tag呢,多半是用用別人的成品。編制困難其實(shí)就是否定了界面元素的重用。很多人推崇Tapestry, 其實(shí)如果jsp tag技術(shù)方便一點(diǎn),何必建立一個(gè)完全不同的模型呢。
引用:
3. 使用將xml標(biāo)簽的屬性直接映射到對(duì)象屬性的方法造成tag對(duì)象是有狀態(tài)的,不得不通過丑陋的pool機(jī)制來解決性能問題。
而且性能問題直接限制了大量小標(biāo)簽的使用。
這是一個(gè)現(xiàn)實(shí)的困難,一個(gè)系統(tǒng)設(shè)計(jì)師必須考慮。
引用:
4. jsp tag是一種完全動(dòng)態(tài)化的設(shè)計(jì),大量可以在編譯期進(jìn)行的優(yōu)化都無法進(jìn)行,基本上所有的運(yùn)算都是在運(yùn)行期發(fā)生,限制了性能的提高。
我們的xml標(biāo)簽技術(shù)是先編譯再運(yùn)行的,加上無狀態(tài)設(shè)計(jì),在性能上可以得到控制。我的朋友hotman_x是個(gè)C++和js高手,在他的強(qiáng)烈要求下,我們的xml標(biāo)簽還增加了一個(gè)多次編譯的機(jī)制。
引用:
5. 雖然最近的版本已經(jīng)支持xml格式,但對(duì)于xslt等的集成很不到位,例如現(xiàn)在無法使用xslt對(duì)jsp文件進(jìn)行界面布局。
最簡單的
<web:template src="test.tpl" xslt="layout.xslt" />
<web:mytag xdecorator="face.xslt">
...
</web:mytag>
引用:
6. jsp tag要求使用自定義標(biāo)簽名,而無法對(duì)已經(jīng)存在的html標(biāo)簽進(jìn)行enhance, 造成無法方便的在可視化編輯器中進(jìn)行編輯。
Tapestry就認(rèn)為它比較好。我們的xml標(biāo)簽機(jī)制也支持屬性擴(kuò)展。
引用:
7. EL表達(dá)式竟然不支持調(diào)用對(duì)象函數(shù)
很多人因此覺得OGNL比較好。我們的機(jī)制中是對(duì)EL做了一定的增強(qiáng)。我不喜歡OGNL, 過于復(fù)雜了。