開發步驟
- 撰寫標籤處理類(繼承
BodyTagSupport,實作 doAfterBody())。
- 編寫
.tld 標籤庫描述檔。
- JSP 頁面引用標籤庫前綴,使用自定義標籤。
1. 標籤處理類
package com.lilijun.tags;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
import java.io.IOException;
public class MessageWriterTagHandler extends BodyTagSupport {
private String fontColor = "black";
public String getFontColor() { return fontColor; }
public void setFontColor(String fontColor) { this.fontColor = fontColor; }
@Override
public int doAfterBody() throws JspException {
BodyContent bc = getBodyContent();
JspWriter out = bc.getEnclosingWriter();
try {
out.print("" + bc.getString() + "");
} catch (IOException e) { throw new JspException(e); }
return EVAL_PAGE;
}
}
- 屬性
fontColor 對應標籤屬性,需提供 getter/setter。
doAfterBody() 處理標籤主體內容,輸出時包裝 <font color="...">。
2. TLD 檔案 (messagewriter.tld)
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.0" xmlns="https://java.sun.com/xml/ns/j2ee"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd">
<tlib-version>1.0</tlib-version>
<short-name>writer</short-name>
<uri>tags/MessageWriter</uri>
<tag>
<name>write</name>
<tag-class>com.lilijun.tags.MessageWriterTagHandler</tag-class>
<body-content>JSP</body-content>
<attribute>
<name>fontColor</name>
<required>true</required>
</attribute>
</tag>
</taglib>
- 放置於
WEB-INF/tlds/ 或 META-INF/ (JAR 內)。
required>true 確保屬性必填,否則容器可能不報錯但功能失效。
3. JSP 使用範例
<%@ taglib uri="tags/MessageWriter" prefix="my" %>
<my:write fontColor="red">
這段文字會變紅色
</my:write>
JSP 2.0 簡化:SimpleTagSupport
- 繼承
SimpleTagSupport,僅需覆寫 doTag()。
- 無
doStartTag/doEndTag/doAfterBody 複雜生命週期。
- 適合無主體或簡單主體處理的標籤。