| 術語 | 說明 |
|---|---|
| 標籤 | XML 元素,讓 JSP 更簡潔、易維護、支援多語言;名稱與屬性大小寫敏感。 |
| 標籤庫 | 功能相關、邏輯關聯的標籤集合。 |
| TLD(標籤庫描述檔) | XML 設定檔,映射標籤與處理類,類似 web.xml。 |
| 標籤處理類 | 繼承 TagSupport 或實作 SimpleTag 的 Java 類,實現標籤具體功能。 |
JSP 容器需滿足兩條件:
taglib 指令的 prefix 屬性完成。uri 定位 TLD,TLD 中宣告處理類完整名稱。容器啟動時掃描 WEB-INF 下 META-INF/*.tld,建立 URI 與 TLD 的映射。JSP 頁面僅需 <%@ taglib uri="..." prefix="..." %> 即可匹配。
prefix 取得 uriweb.xml 找對應 taglib 元素taglib-location 值WEB-INF/ 讀取 TLDtag 元素匹配 tagnametag-class 值doStartTag()/doEndTag() 完成處理web.xml 設定 taglib 元素javax.servlet.jsp.TagSupport。parent(父標籤處理類)、pageContext(PageContext 物件)。doStartTag/doEndTag 前會先呼叫 setPageContext/setParent 初始化,因此可直接存取 pageContext。pageContext(尚未初始化)。| 方法 | 觸發時機 | 回傳值與含義 |
|---|---|---|
doStartTag() | 遇到起始標籤 | SKIP_BODY:忽略標籤主體;EVAL_BODY_INCLUDE:正常執行主體 |
doEndTag() | 遇到結束標籤 | SKIP_PAGE:立即停止頁面執行;EVAL_PAGE:繼續正常執行 |
標籤若含自訂屬性,處理類需宣告對應成員變數,並提供 setter/getter。
java.util.Properties 以 key/value 形式存放於 WEB-INF,支援流讀寫。常用 API:setProperty、getProperty、load(InputStream)、store(OutputStream, String)。
關鍵 API:getResourceAsStream(String path) 以輸入流讀取 WEB-INF/xxx.properties,載入 Properties 後 setAttribute 存入 ServletContext 供標籤類取用。
建立繼承 HttpServlet 的類,在 web.xml 設定 load-on-startup,於 init() 中完成上述載入流程。
import javax.servlet.jsp.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.*;
public class MyTag extends TagSupport {
public int doStartTag() throws JspException {
// 1. 從 ServletContext 取得 Properties
// 2. 取 key 對應值
// 3. 處理並輸出
return EVAL_BODY_INCLUDE;
}
}
三類元素:taglib(標籤庫資訊)、tag(標籤定義)、attribute(屬性定義)。
taglib:shortname(預設前綴)、uri(唯一識別符)。tag:name、tagclass、bodycontent(empty/JSP/tagdependent)。attribute:name、required、rtexprvalue(是否支援請求時運算式)。web.xml 加入 taglib 元素:taglib-uri、taglib-location。<%@ taglib uri="..." prefix="..." %>,uri 需與 web.xml 一致。