国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JSP > 正文

標(biāo)簽庫完成復(fù)雜的后臺處理功能的JSP示例

2024-09-05 00:20:24
字體:
供稿:網(wǎng)友
  jstl標(biāo)簽是sun帶頭與apache社區(qū)合作的產(chǎn)品,可惜從一出現(xiàn)就已經(jīng)是一個過時的技術(shù)。sun的軟件架構(gòu)師似乎缺乏從顧客角度考慮技術(shù)取向的能力,與微軟相比差之千里。就標(biāo)簽技術(shù)而言,它的目的是令菜鳥中的菜鳥變得可以寫jsp,還是令一般程序員寫jsp顯得更方便,更好管理?顯然,sun的那位笨蛋架構(gòu)師沒有想明白這個道理(越是看得多它的文檔介始,越是覺得那個家伙是個大笨蛋),把sun數(shù)千名天才工程師的才智白白浪費了。

  所有人都已經(jīng)知道,jsp出現(xiàn)的目的就是為了讓程序員更方便地寫簡單的servlet,復(fù)雜的多功能的servlet是不容易用jsp實現(xiàn)的。而jsp希望讓菜鳥寫java動態(tài)頁面的目的并沒有達(dá)到,這條,還不如asp/php。在jsp中散布底層業(yè)務(wù)邏輯既不便于對象組織,也不但于代碼管理,非常低效。這是發(fā)展出javabean和標(biāo)簽技術(shù)的原因;而jstl呢,它的基本客戶邏輯竟然是為了幫助使用者更方便地把底層代碼散布在jsp上!?包括數(shù)據(jù)庫連接?!所以這東西是一個新的技術(shù)實現(xiàn)落后目標(biāo)的產(chǎn)品,面對市場需求整整慢了一拍。

唯一有點價值的是它的循環(huán)邏輯,這條還是很有用的。只不過能夠?qū)崿F(xiàn)的不止它一個,struts.logic標(biāo)簽就是很好用的一種,而且不用指向http:/sun.xxxx/core什么的,事實上jstl能夠提供的struts:logic也能夠提供。實際上struts幾個標(biāo)簽庫中也就logi,有點價值,bean也可以,其他的html是純粹和formbean為核心的mvc設(shè)想框架提供的。即使這樣,就實用性而言,strutslib仍比sun實用得多。

  struts標(biāo)簽庫不能很好地面向數(shù)據(jù)對象,這是它的不足,hanva標(biāo)簽就是為了補充這個不足。結(jié)合struts的logic庫,使用hanva標(biāo)簽可以達(dá)到在jsp中聲明和接收變量,可以實現(xiàn)多種邏輯,可以直接從底層獲得持久性非持外性的數(shù)據(jù)對象,處理并輸出——一個程序大致也就只有這些東西做的。特殊的東西再特殊處理,直接完全使用標(biāo)簽調(diào)用下層服務(wù)daemon程序完成絕大部分功能,已經(jīng)可以做到了。

  下面的論壇示例刪除程序是這樣的一個功能,可以處理任何的實現(xiàn)了hanvadao接口規(guī)范的表數(shù)據(jù)的刪除,包括對其相關(guān)數(shù)據(jù)記錄的同步處理。它接收一個對象類型(ent),及id,判斷這個對象(行記錄)是否存在,然后判斷它的sourceid和id是否一致(是主貼還是跟貼),如果是主貼,就把它的從貼一起刪除,否則就只刪除當(dāng)前貼,然后返回原來調(diào)用的一頁,如果出錯,就轉(zhuǎn)向到errors.jsp頁,顯示出錯信息。

<entity:present ent="${param.ent}" oid="${param.oid}" id="thent" nexto="${header.referer}">
   <%--如果記錄存在就繼承內(nèi)嵌邏輯,把該記錄定為ident名--%>
   <%--判斷sourcid與id是否一致--%>
  <logic:equal name="thent" value="${thent.sourceid}" property="id">
<%--取所有主從貼,集合定名為theobjs--%>
   <entity:entities ent="${param.ent}" id="theobjs" qstr="sourceid=${sourceid}">
<%--迭代集合內(nèi)容,單個取名為theobj--%>
    <logic:iterate id="theobj" name="theobjs">
<%--刪除該對象--%>
     <cmd:delete ent="${param.ent}" target="${theobj}"/>
    </logic:iterate>
   </entity:entities>
  </logic:equal>
  <logic:notequal name="thent" value="${thent.sourceid}" property="id">
<%--單個從貼,清除該對象--%>
   <cmd:delete ent="${param.ent}" target="${thent}"/>
  </logic:notequal>
 </entity:present>

  標(biāo)簽結(jié)束,根據(jù)nexto轉(zhuǎn)向到調(diào)用者,這樣段小代碼實際上就扮演了一個mvc中的c角色。如果需要輸出斷點,可以調(diào)用hanva:log 把實時內(nèi)容輸出到log日志中。一個比較復(fù)雜的功能就此完成了。全程實際上只是進行了一次或兩次數(shù)據(jù)庫的訪問,如果是多個從貼,需要獲得它的串,這是可能的第二次。注意<entity:entities>標(biāo)簽,它輸入一個條件,也可以輸入fields選項,得到一個arraylist串(沒有同步要求就不用vector),如果不是為了翻頁,它可以代替hanva:list,使用上也更方便,沒有需要先設(shè)定一個dao.list對象。

  我認(rèn)為這才是標(biāo)簽技術(shù)的真正用法:幫助程序員在界面清晰明確地調(diào)用后臺的處理程序,方便面向?qū)ο蟮臉I(yè)務(wù)邏輯的建立,方便隱藏非表達(dá)層的邏輯;而不是變成把頁面搞得更復(fù)雜,堆上更多難懂代碼的又一套新方法。

  相對而言,tags文件標(biāo)簽技術(shù)顯得更現(xiàn)實一點。如同jsp是方便菜鳥(仍是程序員)寫簡單的servlet一樣,tags標(biāo)簽文件是方便看到class就發(fā)抖的菜鳥象寫jspjavalet一樣寫標(biāo)簽;顯然,是最簡單的simpletagsupport的變種,只有它才有一個體內(nèi)容。也同樣,充分利用class類結(jié)構(gòu)的編碼技術(shù)在這里沒有辦法實現(xiàn)。

  jsp開發(fā)社團看來熱衷于在局部別具一格地提供一些局部方便性措施,卻常常忽略了客戶更大的一個要求:在項目開發(fā)中盡可能采用單一的標(biāo)準(zhǔn)的范式完成所有程序。多使用一種小技術(shù)模式在局部方便了,全局來說卻是多管理一種一種技術(shù),或者說程序員要多學(xué)一種只在局部有效的技術(shù)。這個邏輯錯誤從j2ee開始就伴隨著sunjava的技術(shù)發(fā)展,看來是它的不治之癥。在筆者看來,與其多搞小動作,不如在核心一鉆到底,而小范圍內(nèi)的方便措施,還是有有能力的客戶去實現(xiàn)為佳。拙劣地模仿微軟去拍落后(也是非主流的客戶)的馬屁,將是sun公司技術(shù)上最終失敗的原因。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 多伦县| 卢龙县| 乌审旗| 和林格尔县| 泰兴市| 平湖市| 舒兰市| 乐都县| 六枝特区| 定结县| 台东市| 新营市| 清苑县| 磐石市| 中超| 内黄县| 肇庆市| 兴安盟| 涞源县| 南丹县| 从化市| 沂水县| 宣武区| 淮安市| 阿拉善盟| 白朗县| 关岭| 天峨县| 宁明县| 曲水县| 明光市| 疏勒县| 郎溪县| 抚远县| 泗洪县| 石泉县| 德州市| 仁化县| 大姚县| 宁夏| 阿勒泰市|