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

首頁 > 編程 > JSP > 正文

MoreJSP編程實踐(上)

2019-11-18 16:21:58
字體:
供稿:網(wǎng)友

  翻譯前的話:
最近瑣事較多,翻譯的不好,大家多多包涵。以后一定努力!!!

  概要:
  隨著jsp規(guī)范的不斷進(jìn)展,以及可用的jsp開發(fā)工具數(shù)量不斷增多,以及jsp技術(shù)可涉及領(lǐng)域的不斷的擴展,促進(jìn)了基于jsp技術(shù)的高維護(hù)性能和標(biāo)準(zhǔn)化的網(wǎng)絡(luò)應(yīng)用的開發(fā)。這篇文章討論了在jsp進(jìn)展的一些主要的內(nèi)容以及這些是如何更加容易的開發(fā)處健壯的JSP網(wǎng)絡(luò)應(yīng)用。
這篇文章的最佳實踐將能夠幫助應(yīng)用JSP強大的功能以及能夠讓你為將來JSP的升級做好準(zhǔn)備。

第一頁(共4頁)
  自從我(原文作者)在2001年底發(fā)表了“JSP最佳實踐”以來,JSP技術(shù)已經(jīng)有了戲劇般的發(fā)展。許多的工具已經(jīng)使得開發(fā)基于JSP技術(shù)的網(wǎng)頁變的更加容易。在上一篇我的“最佳實踐”的文章中所提到的實踐依然適用。然而,隨著新的特性,工具,以及JSP開發(fā)思想的出現(xiàn)你需要使用更多的最佳實踐來開發(fā)更加平滑的高維護(hù)性能的JSP的應(yīng)用。這篇文章列出了一些應(yīng)用了最重要的新的特性,工具和思想的最佳實踐:
l 開始編寫JSP document.
l 引入JSP編程約定
l 使用正確的范圍(Scope)
l 小心的管理“會話”范圍
l 利用JSTL(javaServer Pages Standard Tag Library)的特點
l 利用servlet filers(Intercepting Filter pattern)的特點
l 創(chuàng)建你的Jsp pages的文檔
l 預(yù)先編譯JSP網(wǎng)頁和文檔
l 組織文件和目錄以便于容易的開發(fā)和部署
l 小心使用私有的,與供應(yīng)商特定的特性
l Html標(biāo)簽使用XHTML(Extensible HyperText Markup Language)語法
使用JSP document.不是JSP pages
    
    JSP規(guī)范支持JSP pages同樣也支持JSP document.。兩者之間主要的區(qū)別是它們對xml兼容的程度。JSP pages使用傳統(tǒng)的或者說是“速記(shorthand)”語法,而JSP document.用的語法完全與XML相兼容。JSP document.時候被成為是使用了XML語法的JSP pages。但是這里我將分別稱它們?yōu)镴SP pages和JSP document.便加以區(qū)分。

    基于以下幾個原因我推薦使用JSP document.
l JSP document.很好組織了的XML/HTML(You can easily verify JSP document. as well-formed XML/HTML)
l 可以使用XML Schema來驗證JSP document. l 可以很容易的使用標(biāo)準(zhǔn)的XML工具來寫和解析
l 可以使用XSLT(Extensible Stylesheet Language Transformations)以不同的form來編寫JSP document.具體請看“JSP document.nbspwith XSLT” http://www.javaworld.com/javaworld/jw-07-2003/jw-0725-morejsp.html?#sidebar1
l JSP使用了XML相容include和forward action,custom標(biāo)簽,因而使得整個document.XML相容,這樣就提高了編碼的一致性。
l JSP document.相對JSP pages需要稍微多一點的開發(fā)規(guī)則,但是帶來的好處是更加容易閱讀和維持的document.,特別是對于剛剛開始學(xué)習(xí)JSP的人來說。
    
    關(guān)于創(chuàng)建JSP document.和其特點的詳細(xì)內(nèi)容請參考“Write JSPs in XML Using JSP1.2”(http://www.javaworld.com/javaworld/jw-07-2003/jw-0725-morejsp.html?#resources)
JSP document.最大的缺點是沒有與XML相兼容的JSP注釋存在。JSP document.以使用客戶端的注釋(HTML-/XML –style)或者是嵌入的java注釋。但是沒有JSP document.<%--  --> 而JSP可用的上面的兩種注釋方法都有其自身的缺點。你可以在得到的網(wǎng)頁中看到客戶端的注釋(通過瀏覽器視圖里面的“查看源文件”功能),而且要使用java的注釋需要將java代碼直接的寫在JSP document.中。

    在本文剩下的章節(jié)中,我將使用JSPs來代表JSP pages和JSP document.,因為我所討論的最佳實踐同樣的適用這兩種形式的JSP。

    使用JSP的編碼規(guī)范
    無論使用任何一種語言,創(chuàng)建的任何工程,在提高開發(fā),維護(hù),和測試你的軟件的角度遵循編碼的標(biāo)準(zhǔn)和規(guī)范都是很明智的選擇。讀其他開發(fā)人員的代碼并不簡單而且也不是愉快的事情。但是,如果所有的開發(fā)人員都遵循同樣的命名規(guī)范和其他的一些約定的化,閱讀代碼和維護(hù)就會使得閱讀代碼對他人和編程人員自己變的容易一些。


    Sun Microsytem 最近已經(jīng)幫助一些組織來創(chuàng)建這樣的規(guī)范,制定了文檔“Code Conventions for the JavaServer Pages Technology Version 1.x Language”可以免費獲得,參考“Resources”(http://www.javaworld.com/javaworld/jw-07-2003/jw-0725-morejsp.html?#resources)。如果你的公司還沒有遵循JSP編程規(guī)范的話,我建議使用這個文檔作為一個起點。你可以完全的遵照該文檔也可以在其基礎(chǔ)上創(chuàng)建自己的規(guī)范。

   為對象選擇合適的Scope
     JSP 規(guī)范支持四種scope(應(yīng)用application,會話session,請求request和頁面page),在JSPs中你可以為創(chuàng)建的對象選擇其中的一種,因為綁定到這些scope的對象消耗內(nèi)存,并且在有些時候需要釋放,所以最好選擇適當(dāng)?shù)膕cope來完成你的任務(wù)。

    應(yīng)用范圍(Application scope)
    Application scope 是最為廣泛的一個范圍,應(yīng)該在必要的時候才采用這種形式。你可以在非會話相關(guān)(session-aware)的JSPs中創(chuàng)建綁定到application的對象(You can create objects bound at application level in JSPs that are not session-aware,)在這種類型的JSPs中可以用應(yīng)用范圍來存儲數(shù)據(jù)和信息。( so application scope is useful for storing information when using these types of JSPs)。你也可以使用綁定到application的對象用來在不同的會話(session)間共享數(shù)據(jù)。當(dāng)你不需要application范圍的對象的時候一定要顯式的刪除它們以便釋放內(nèi)存。

    會話范圍(session scope)
    在我的經(jīng)驗中,會話范圍要比應(yīng)用范圍用的多。會話范圍允許你創(chuàng)建并且將對象綁定到一個會話上面。你必須在session-aware的JSPs中創(chuàng)建綁定在會話的對象并且使在同一個會話中所有的JSP和servlet能夠訪問到這些對象。會話范圍常常用在管理安全驗證和管理多個頁面的狀態(tài)信息。綁定在會話范圍的對象在不需要的時候也要顯示的刪除。當(dāng)我計劃將某個類的對象綁定到會話范圍的時候我通常會使該類可串行化。

    請求范圍(request scope)
    在綁定對象的時候,頁面范圍我用的最多。此類對象只在同一個請求的頁面間有效。在請求處理完成的時候這些對象將會自動的被釋放。因而不需要顯式的釋放它們,這樣就沒有了使系統(tǒng)被一些不必要內(nèi)存消耗而拖累的危險。

    頁面范圍(page scope)
    當(dāng)你創(chuàng)建只對當(dāng)前頁面相關(guān)的對象的時候你需要選擇頁面范圍。和請求范圍一樣,綁定在頁面范圍的對象不要顯式的刪除。我很少在我的JSP應(yīng)用中使用“頁面范圍”,但是這是<jsp:useBean>的默認(rèn)范圍。

    選擇哪種范圍(scope)
    需要仔細(xì)的選擇創(chuàng)建對象的范圍來保證有效的利用內(nèi)存,通常我會在剛剛開始的時候選擇請求范圍,然后在評估是否需要選擇范圍更大的范圍。
  
   第二頁(共4頁)
    仔細(xì)的管理會話范圍
    前面已經(jīng)提到過,只有在必要的時候才選擇會話范圍并且當(dāng)這些對象不在需要會話級訪問的時候需要顯式的去掉對象的其會話范圍。當(dāng)不使用會話范圍的對象的JSP中你可以設(shè)置頁面的directive的session屬性為false,這樣可以避免管理會話范圍。但是,很少的網(wǎng)絡(luò)應(yīng)用不需要會話范圍的支持。通常,我使用會話來支持安全機制以及其他的一些應(yīng)用需求。盡管一個會在一個可以由你配置的時間后過期,但是在不需要對象的會話范圍的時候最好顯式的取消它們,而不是依賴會話自動釋放的功能。
  
    采用JSTL(標(biāo)準(zhǔn)標(biāo)簽庫)
    JSP的引入和采納已經(jīng)成為JSP開發(fā)人員的一個最為重要的進(jìn)步。JSTL有時候也稱為“JSP Standard Tag Library”。在JSTL中的T代表的是標(biāo)簽(Tag)而不是模板(Template)。
    
    JSTL:背景與回顧
    在我以前的文章里,我提到過JSP開發(fā)人員采納可以得到的自定義標(biāo)簽庫而不是自己從頭開始創(chuàng)建。有許多的商業(yè)的或者開源的自定義標(biāo)簽庫現(xiàn)在已經(jīng)可以加以利用。但是有一個缺點就是:開發(fā)人員需要在JSP中按照這些自定義標(biāo)簽庫所特定的格式來應(yīng)用這些標(biāo)簽。JSTL的出現(xiàn)解決了這個問題,因為JSTL提供了自定義標(biāo)簽的標(biāo)準(zhǔn)接口,這些標(biāo)簽足以滿足JSP開發(fā)人員的一些基本的要求。(The advent of JSTL has addressed this downside by PRoviding standard interfaces to the custom tags that perform many basic functions JSP developers need.) 不同的供應(yīng)商可能以不同的形式實現(xiàn)這些JSTL標(biāo)簽,但是JSP開發(fā)人員不要知道實現(xiàn)標(biāo)簽時的不同點。
如果JSP開發(fā)人員使用JSTL編寫了JSP page或者JSP document.JSP page或者JSP document.該適用所有的JSTL實現(xiàn)方法。
有許多有價值的書和一些在線的資源可以去學(xué)習(xí)JSTL。這里我將主要簡單的介紹JSTL的優(yōu)點與特性。

    JSTL的優(yōu)點
    簡短的說,JSTL提供了所有的已經(jīng)公布的自定義標(biāo)簽庫所有的好處,而且提供標(biāo)準(zhǔn)化的標(biāo)簽API。JSTL促進(jìn)了高可維護(hù)性和可移植性的pages和document.。我列出了JSTL一些特別的特點。
l JSTL提供了基于標(biāo)簽的遍歷,條件以及其他一些功能,這些功能以前或者是直接在JSP中嵌入代碼來實現(xiàn)的,或者是使用了自己創(chuàng)建的標(biāo)簽,非標(biāo)準(zhǔn)的標(biāo)簽庫,或者是通過使用Servlet來代替JSP來實現(xiàn)的。
l JSTL使用了EL(eXPression language)語法
l 編寫自定義標(biāo)簽相對其他一些JSP開發(fā)任務(wù)來說需要更多的精力與經(jīng)驗。JSTL通過兩種方法來簡化這些步驟:首先,如前所述,jstl能解決很多定制(自定義)的tags的需要.(JSTL handles many common needs for custome tags)。其次,JSTL提供了一些機制使得編寫你自定義的標(biāo)簽更簡單,尤其是編寫支持EL自定義標(biāo)簽的時候。

    具體的JSTL特性與優(yōu)點
    下面簡單的概括JSTL4個可用自定義標(biāo)簽庫中三個標(biāo)簽庫的一些優(yōu)點,并且給出了不推薦使用數(shù)據(jù)庫訪問標(biāo)簽庫(database access library)的原因。同樣我也討論了使用EL的優(yōu)點。

數(shù)據(jù)訪問標(biāo)簽庫(Database access library)
JSTL提供了數(shù)據(jù)訪問標(biāo)簽庫,但是我很少用它,因為我強烈的認(rèn)為不應(yīng)該在JSP頁面內(nèi)直接訪問數(shù)據(jù)庫。如果在JSP中直接的訪問數(shù)據(jù)庫將會降低重用,因為數(shù)據(jù)庫訪問的代碼在使用數(shù)據(jù)庫范圍標(biāo)簽的JSP頁面外是不可以被訪問到的。在JSPs中直接的進(jìn)行數(shù)據(jù)庫訪問將會加大表示層與數(shù)據(jù)層之間的耦合。嚴(yán)格的分割意味著更好的模塊化,復(fù)用性,以及更容易的滿足表現(xiàn)層和數(shù)據(jù)層之間的規(guī)范(Disciplined separation means more modularity, greater opportunity for reuse, and better opportunities for specialization of presentation and database experts)。.我推薦在JSTL的其他三種標(biāo)簽庫可以滿足JSP開放人員的需求的時候使用這些標(biāo)簽庫,但是我不推薦使用JSTL的數(shù)據(jù)庫范圍標(biāo)簽庫outside of prototypes and the simplest Web applications。

JSTL 核心標(biāo)簽庫(JSTL core tag library)
正像名字一樣,JSTL核心標(biāo)簽庫是在JSTL四種標(biāo)簽庫中最常用的一種。這個標(biāo)簽庫提供了對collection的遍歷,條件語句以及其它一些常用的程序結(jié)構(gòu)。JSTL核心標(biāo)簽庫可以使得JSP開放人員不必編寫他們自己的自定義標(biāo)簽庫或者直接在JSPs中嵌入Java代碼。
JSTL XML 標(biāo)簽庫(JSTL XML tag library)
這個標(biāo)記庫提供了一些令人贊嘆的且功能強大的XML操縱標(biāo)簽和XSLT轉(zhuǎn)換標(biāo)簽。

JSTL formatting 標(biāo)簽庫
如果需要在多個國家提供網(wǎng)頁和網(wǎng)址,那么國際化(internationalization)對網(wǎng)絡(luò)開發(fā)項目(web development projects)來說是一個很大的挑戰(zhàn)。JSTL formatting標(biāo)簽庫為此向JSP開發(fā)人員提供了一些自定義標(biāo)簽,可以支持按照特定的區(qū)域讀寫數(shù)字和實踐。

Expression Language
JSTL以上的自定義標(biāo)簽庫有兩種類型:RT(traditional request time)自定義標(biāo)簽庫和EL標(biāo)簽。因為EL要更靈活一些,所有我推薦使用EL自定義標(biāo)簽庫。
JSTL和其他一些自定義標(biāo)簽庫

因為自定義標(biāo)簽庫(custom tag library)在JSTL引入以前已經(jīng)使用了很長的時間,許多的個體和組織都已經(jīng)開發(fā)了自定義的標(biāo)簽庫。這些標(biāo)簽庫在很大程度上與JSTL的功能都有重復(fù)。在大多數(shù)情況下,在考慮實現(xiàn)相同的功能時,我推薦使用JSTL而不是自己開放的自定義標(biāo)簽庫或者時其他一些可以得到的自定義標(biāo)簽庫(other publicly available custom tag library)。JSTL提供的標(biāo)準(zhǔn)化是一個意義重大的優(yōu)點因為API可以學(xué)一次,而后你就可以一貫的使用了。
比較Struts的標(biāo)簽庫和JSTL標(biāo)簽庫提供可以獲得一個很好利用這些最佳實踐的例子(Comparing Struts tag libraries and JSTL provides a good example of how to implement this best practice)。Struts提供了MVC框架以外其他的一些優(yōu)點。其中包括的Struts的自定義標(biāo)簽庫集合。在JSTL引入之前,Struts的自定義標(biāo)簽庫已經(jīng)支持遍歷( iteration)以及條件標(biāo)簽,但是現(xiàn)在我開始使用JSTL的遍歷和條件標(biāo)簽而不是Struts里面的標(biāo)簽。我現(xiàn)在仍然再使用Struts的form標(biāo)簽,這是因為這個標(biāo)簽與Struts的表單(form)緊密的聯(lián)系在一起,而且在JSTL沒有相對應(yīng)的標(biāo)簽可用。
比較其他的一些自定義標(biāo)簽庫和JSTL標(biāo)簽庫,上面的討論也是適用的。如果JSTL標(biāo)簽庫可以完全的支持同樣的功能的話,應(yīng)該使用標(biāo)準(zhǔn)的JSTL標(biāo)簽。當(dāng)然如果JSTL不支持的話,你就沒有辦法了。在大多數(shù)情況下,像我上面討論的Struts標(biāo)簽和JSTL標(biāo)簽,通常需要同時使用JSTL和其他一些自定義標(biāo)簽。

JSTL:最后的補充
關(guān)于JSTL更詳細(xì)的內(nèi)容,她的特點,以及如何在你的jsp中應(yīng)用JSTL請參考“resources” http://www.javaworld.com/javaworld/jw-07-2003/jw-0725-morejsp-p2.html#resources
在“resource”中包含了到“Apache’s Standard Taglib(一個開源的,廣泛使用的JSTL實現(xiàn))的連接。
Web server的提供商已經(jīng)開始在他們的web服務(wù)器上發(fā)布JSTL的實現(xiàn),JSTL預(yù)測將成為最終的JSP2。0規(guī)范中的一部分。

matrix開源技術(shù)經(jīng)onjava授權(quán)翻譯并發(fā)布.
如果你對此文章有任何看法或建議,請到Matrix論壇發(fā)表您的意見.
注明: 如果對matrix的翻譯文章系列感興趣,請點擊oreilly和javaworld文章翻譯計劃查看詳細(xì)情況
您也可以點擊-chessboy查看翻譯作者的詳細(xì)信息.

(出處:http://m.survivalescaperooms.com)



發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 青浦区| 绿春县| 视频| 华容县| 会东县| 徐水县| 大厂| 盐池县| 永丰县| 宜兴市| 塔河县| 东城区| 隆安县| 开阳县| 阜南县| 淮阳县| 安康市| 中山市| 子洲县| 泸西县| 永新县| 太仓市| 黔西| 客服| 阿鲁科尔沁旗| 布拖县| 芜湖县| 双鸭山市| 内丘县| 葵青区| 尖扎县| 贡嘎县| 讷河市| 山阳县| 苗栗市| 布尔津县| 博兴县| 石景山区| 紫云| 朝阳市| 开江县|