TLD 檔案


如果將 Tag File 的 .tag 檔案放在 /WEB-INF/tags 資料夾或子資料夾,並在 JSP 中使用 taglib 指示元素的 tagdir 屬性指定 .tag 的位置,你就可以使用 Tag File 了。其他人如果覺得你的 Tag File 不錯用,也只要將 .tag 複製到他們的 /WEB-INF/tags 資料夾或子資料夾就可以了。

Java 程式設計人員也許就是偏好使用 JAR 檔把東西包一包再給別人使用,或是為了跟 Simple Tag 等自訂標籤庫一起包起來。如果要將 Tag File 包成 JAR 檔案,那麼有幾個地方要注意一下:

  • *.tag 檔案必須放在 JAR 檔的 META-INF/tags 資料夾或子資料夾下。
  • 要定義 TLD(Tag Library Description)檔案。
  • TLD 檔案必須放在 JAR 檔的 META-INF/TLDS 資料夾下。

例如想將先前開發的 Errors.tag、Header.tag、Html.tag 封裝在 JAR 檔案中,則要將這三個 .tag 檔案放到某個資料夾的 META-INF/tags 下,並在 META-INF/TLDS 下定義 html.tld 檔案:

html.tld

<?xml version="1.0" encoding="UTF-8"?>
<taglib xsi:schemaLocation="
            http://java.sun.com/xml/ns/javaee 
            http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
        xmlns="http://java.sun.com/xml/ns/javaee" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        version="2.1">
    <tlib-version>1.0</tlib-version>
    <short-name>html</short-name>
    <uri>https://openhome.cc/html</uri>
    <tag-file>
        <name>Header</name>
        <path>/META-INF/tags/Header.tag</path>
    </tag-file>
    <tag-file>
        <name>Html</name>
        <path>/META-INF/tags/Html.tag</path>
    </tag-file>
    <tag-file>
        <name>Errors</name>
        <path>/META-INF/tags/Errors.tag</path>
    </tag-file>
</taglib> 

其中 <uri> 設定是在 JSP 中與 taglib 指示元素的 url 屬性對應用的。每個 <tag-file> 中使用 <name> 定義了自訂標籤的名稱,使用 <path>定義了 *.tag 在 JAR 檔案中的位置。接下來可以使用文字模式進入放置 META-INF 的資料夾中,執行以下指令產生 html.jar:

jar cvf ../html.jar *

若要使用產生的 html.jar,就要將它放到 Web 應用程式的 WEB-INF/lib資 料夾中,而要使用標籤的 JSP 頁面,則可以如下撰寫:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="html" uri="https://openhome.cc/html" %>
<html:Html title="新增書籤">
    <html:Errors/>
    <form method="post" action="add">
        網址&nbsp;http:// <input name="url" value="${param.url}"><br>
        網頁名稱:<input name="title" value="${param.title}"><br>
        分  類:<input type="text" name="category" value="${param.category}"><br>
        <input value="送出" type="submit"><br>
    </form>
</html:Html> 

注意!這次是使用 taglib 指示元素的 uri 屬性,名稱對應至 TLD 檔案中的 <uri> 設定的名稱。