Tag 本質是繼承 TagSupport 或 BodyTagSupport 的普通 Java 類別。容器提供這兩個基類處理 JSP 頁面與 Tag 類別的互動(輸入/輸出),開發者專注業務邏輯。
setValue(String) 對應 JSP 中的 value="..."。doStartTag() / doEndTag():解析到 < 觸發前者,> 觸發後者,通常在 doStartTag 處理邏輯、doEndTag 控制輸出。<%@ taglib uri="/WEB-INF/tlds/mytld.tld" prefix="my" %>。public class OutputTag extends TagSupport {
private String name;
public void setName(String name) { this.name = name; }
public int doStartTag() throws JspException {
try {
JspWriter out = pageContext.getOut();
out.print("Hello! " + name);
} catch (Exception e) { throw new JspException(e); }
return EVAL_PAGE;
}
}
輸出關鍵:pageContext.getOut() 取得 JspWriter 寫入頁面。
<tag>
<name>output</name>
<tag-class>diegoyun.OutputTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>name</name>
<required>false</required>
</attribute>
</tag>