編寫定制 JSP 標記
既然明白了 Web 服務器是如何處理 JSP 頁面請求的,那麼讓我們研究一下如何實現定制 JSP 標記。注:JSP 標記既來自標准庫(如 Java Standard Template Library,JSTL),也來自您自己編寫的庫(也稱為定制標記)。通常,定制標記處理特殊的問題領域。對本文而言,我們在處理如何管理圖像。目前,Java 2 Extended Edition(J2EE)V1.2 和 V1.3 使用 JSP 規范 V1.2。在寫作本文的時候,Sun 已經發布了 JSP 規范 V2.0。這個新規范並未對實現定制標記的方法進行重大更改。
通過 taglib 偽指令,可以將標准和定制標記庫導入 JSP 頁面,如下所示:
<%@ taglib uri='imagesizer.tld' prefix='util' %>
這個偽指令指定了標記庫描述符文件的位置,這裡指定的是 imagesizer.tld,還指定了在頁面中使用它時的前綴,這裡指定的是 util。如前面的標記示例所示,將標記與其前綴及其名稱一起使用:
<util:imagesizer src="images/LazyDog.jpg"/>
標記庫描述符告訴 Web 容器哪些標記是可用的,以及它們如何發揮作用。清單 1 顯示了這樣一個示例。文件使用了 XML 格式,並且易於讀取,而應用程序開發平台 — 如 IBM WebSphere Studio Application Developer(Application Developer)可以幫助您填充字段,並且驗證文件。最重要的信息是 tag 元素:它定義了定制 JSP 標記的名稱和實現標記的 Java 類。它還顯示了標記接受的任何屬性和主體內容。
清單 1. 標記庫描述符(Tag Library Descriptor,TLD)摘錄
<taglib >
<tlibversion> 1.0 </tlibversion>
<jspversion> 1.1 </jspversion>
<tag>
<name>imagesizer</name>
<tagclass>tags.ImageSizerTag</tagclass>
<bodycontent>empty</bodycontent>
<attribute>
<name>src</name>
<required>required</required>
</attribute>
<attribute>
<name>alt</name>
</attribute>
<attribute>
<name>quality</name>
</attribute>
</tag>
</taglib>
在這個示例中,tag 有三個屬性,其中只有 src 屬性是必需的。可選的 alt 屬性模擬 HTML 的 img alt 屬性。作為練習,您可以擴展該 JSP 標記以包含其它可選的 img 屬性。(大約有 12 種這些屬性。)最後,實現提供了一個可選的 quality 屬性,以使頁面編寫人員可以控制已重新調整大小的圖像的顆粒度和大小。