posts - 176, comments - 240, trackbacks - 0, articles - 7

          [導(dǎo)入]jsp tag的七宗罪

          Posted on 2005-11-15 12:21 canonical 閱讀(418) 評(píng)論(0)  編輯  收藏 所屬分類: 軟件開(kāi)發(fā)
          一個(gè)技術(shù)的成功,在于最終占據(jù)了某個(gè)概念。當(dāng)我們應(yīng)用到此概念的時(shí)候,首先想到的就是這個(gè)技術(shù)實(shí)現(xiàn),久而久之,形成一個(gè)自我證明的過(guò)程。而有些技術(shù)卻是在 其位無(wú)能謀其政,實(shí)在是讓人不得不為它扼腕嘆息呀。jsp tag正是這樣一種技術(shù)。有些人認(rèn)為jsp tag只是jsp的一種擴(kuò)展,只是一種syntax suger, 這正反映了此技術(shù)所面臨的一種困境。這里指出一些jsp tag的設(shè)計(jì)缺陷,并無(wú)貶低這種技術(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ì)給所有希望基于它開(kāi)發(fā)的開(kāi)發(fā)人員造成了巨大的困擾。實(shí)際上我對(duì)這個(gè)技術(shù)感到很失望,當(dāng)然我們提 出了相應(yīng)的替代方案。在我們的開(kāi)發(fā)框架中使用的是重新設(shè)計(jì)的一套與網(wǎng)絡(luò)無(wú)關(guān)的xml動(dòng)態(tài)標(biāo)簽機(jī)制。我的觀點(diǎn)是基于jsp tag技術(shù),無(wú)法開(kāi)發(fā)出與dotNet的便捷程度相當(dāng)?shù)姆?wù)端技術(shù),所以這是它作為標(biāo)準(zhǔn)的罪過(guò)。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ù)投資將一無(wú)是處。  

          這里說(shuō)業(yè)務(wù)邏輯可能是有些不妥,容易引起誤解。因?yàn)槲业墓ぷ髯鲈谥虚g件層,所以我的原意是基于jsp tag開(kāi)發(fā)一系列的擴(kuò)展技術(shù),比如緩存等。我們的xml標(biāo)簽技術(shù)是與jsp模型無(wú)關(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è)重大問(wèn)題,試問(wèn)多少人自己去開(kāi)發(fā)jsp tag呢,多半是用用別人的成品。編制困難其實(shí)就是否定了界面元素的重用。很多人推崇Tapestry, 其實(shí)如果jsp tag技術(shù)方便一點(diǎn),何必建立一個(gè)完全不同的模型呢。

          引用:
          3. 使用將xml標(biāo)簽的屬性直接映射到對(duì)象屬性的方法造成tag對(duì)象是有狀態(tài)的,不得不通過(guò)丑陋的pool機(jī)制來(lái)解決性能問(wèn)題。
          而且性能問(wèn)題直接限制了大量小標(biāo)簽的使用。  

          這是一個(gè)現(xiàn)實(shí)的困難,一個(gè)系統(tǒng)設(shè)計(jì)師必須考慮。

          引用:
          4. jsp tag是一種完全動(dòng)態(tài)化的設(shè)計(jì),大量可以在編譯期進(jìn)行的優(yōu)化都無(wú)法進(jìn)行,基本上所有的運(yùn)算都是在運(yùn)行期發(fā)生,限制了性能的提高。  

          我們的xml標(biāo)簽技術(shù)是先編譯再運(yùn)行的,加上無(wú)狀態(tài)設(shè)計(jì),在性能上可以得到控制。我的朋友hotman_x是個(gè)C++和js高手,在他的強(qiáng)烈要求下,我們的xml標(biāo)簽還增加了一個(gè)多次編譯的機(jī)制。

          引用:

          5. 雖然最近的版本已經(jīng)支持xml格式,但對(duì)于xslt等的集成很不到位,例如現(xiàn)在無(wú)法使用xslt對(duì)jsp文件進(jìn)行界面布局。

          最簡(jiǎn)單的
          <web:template src="test.tpl" xslt="layout.xslt" />
          <web:mytag xdecorator="face.xslt">
          ...
          </web:mytag>

          引用:
          6. jsp tag要求使用自定義標(biāo)簽名,而無(wú)法對(duì)已經(jīng)存在的html標(biāo)簽進(jìn)行enhance, 造成無(wú)法方便的在可視化編輯器中進(jìn)行編輯。  

          Tapestry就認(rèn)為它比較好。我們的xml標(biāo)簽機(jī)制也支持屬性擴(kuò)展。

          引用:
          7. EL表達(dá)式竟然不支持調(diào)用對(duì)象函數(shù)

          很多人因此覺(jué)得OGNL比較好。我們的機(jī)制中是對(duì)EL做了一定的增強(qiáng)。我不喜歡OGNL, 過(guò)于復(fù)雜了。

          主站蜘蛛池模板: 永德县| 驻马店市| 肥乡县| 大竹县| 涿州市| 汉源县| 焉耆| 益阳市| 宁明县| 凤冈县| 洱源县| 上饶市| 木兰县| 宝山区| 介休市| 曲沃县| 天台县| 建宁县| 阳城县| 芜湖县| 南京市| 桃园市| 揭西县| 金山区| 噶尔县| 弋阳县| 永昌县| 神池县| 蒲江县| 察哈| 武胜县| 阜平县| 永嘉县| 鄂州市| 延长县| 咸阳市| 肃宁县| 陆川县| 苍梧县| 建始县| 无为县|