首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> JSP 程式設計 >> 關於JSP

JSP 自定義標籤開發完整流程:從 TagHandler 到 TLD 部署

     編輯:關於JSP

開發步驟

  1. 撰寫標籤處理類(繼承 BodyTagSupport,實作 doAfterBody())。
  2. 編寫 .tld 標籤庫描述檔。
  3. 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 複雜生命週期。
  • 適合無主體或簡單主體處理的標籤。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved