簡介:Scriptlet對於快而雜(fast-and-dirty)的編碼來說是一種不錯的選擇,但是從長遠來看,您需 要為您的JSP頁面選擇一種不那麼雜亂的解決方案。在本期的 JSP最佳實踐中,BrettMcLaughlin 向您展示 了如何將scriptlet轉化成JSP自定義標記,然後將其用於您的JSP開發中。
在 JSP最佳實踐的 上一期,您學習了一種基於scriptlet的技術,這種技術被用來將上次修改的時間 戳添加到JavaServer Page(JSP)文件中。不幸的是,比起它所提供的短期利益,scriptlet會將更多的 長期復雜性引入到您的頁面中來。這些scriptlet會用Java代碼將各種類型的HTML混雜在一起,從而使得 程序的調試和設計極其錯綜復雜。scriptlet不能重用,這常常導致開發者不得不在JSP頁面之間進行復制 -粘貼操作,進而導致同一段代碼出現多個版本。而且,scriptlet還加大了錯誤處理的難度,因為JSP沒 有提供干淨利落的方式來報告腳本錯誤。
因此,這次我們將設計一種新的解決方案。在本期的 JSP最佳實踐中,您將學習一些基礎知識,主要 是關於如何將scriptlet轉換成自定義標記,並對其進行設置以便在您的JSP開發項目中使用。
為什麼使用taglib?
所謂 標記庫(tag library),是指由在JSP頁面中使用的標記所組成的庫。JSP容器推出時帶有一個 小型的、默認的標記庫。而 自定義標記庫是人們為了某種特定的用途或者目的,將一些標記放到一起而 形成的一種庫。在一個團隊中協同工作的開發者們可能會為各自的項目創建一些非常特定化的自定義標記 庫,同時也會創建一個通用自定義標記庫,以供當前使用。
JSP 標記替代了scriptlet,並緩解了由scriptlet所招致的所有令人頭痛的事情。例如,您可以看到 這樣的標記:
<store:shoppingCart id="1097629"/>
或者這樣的標記:
<tools:usageGraph />
每個標記都包含了指向一個Java類的引用,但是類中的代碼仍然在它該在的地方:在標簽之外,一個 編譯好的類文件之中。
從 scriptlet 到標記
創建一個自定義標記的第一步就是決定您想怎樣使用它,如何稱呼它,以及它允許使用或者需要什麼 屬性(如果有的話)。對於時間戳標記,我們所需要的很簡單:只要一個能夠輸出一個頁面的最後修改數 據的簡單標記。
因為不需要屬性,這個標記看上去就是這個樣子:
<site-utils:lastModified />
這個標記的名稱和前綴是一樣的:都是 site-utils 。元素的內容是空的,這意味著該元素中不允許 有子元素存在。定義了這個標記之後,接下來的一步就是實現它的行為。