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

JSP Taglib 自訂標籤原理與實作完整指南

     編輯:Java 相關知識

什麼是 Tag?

一個 Tag 本質上是一個普通的 Java 類別,唯一特殊之處在於它必須繼承 TagSupport 或 BodyTagSupport。這兩個基類由 JSP 容器提供,封裝了頁面與標籤類別的互動細節(輸入/輸出、屬性設定、體內容處理等)。開發者只需專注業務邏輯實作。

開發自訂標籤的四大步驟

1. 實作標籤處理類別

package diegoyun;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;

public class OutputTag extends TagSupport {
    private String name = null;

    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;
    }
}

關鍵點:

  • 屬性對應 setter 方法(setName 對應 name 屬性)
  • doStartTag():標籤開始時觸發,處理邏輯與輸出
  • pageContext.getOut() 取得輸出流
  • 回傳 EVAL_PAGE 表示繼續處理頁面其餘部分

2. 編寫 TLD 標籤庫描述檔

<taglib>
  <tlib-version>1.0</tlib-version>
  <jsp-version>1.2</jsp-version>
  <short-name>diego</short-name>
  <tag>
    <name>out</name>
    <tag-class>diegoyun.OutputTag</tag-class>
    <body-content>empty</body-content>
    <attribute>
      <name>name</name>
      <required>false</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
  </tag>
</taglib>

儲存為 WEB-INF/tlds/diego.tld。

3. JSP 頁面引入與使用

<%@ page language="java" %>
<%@ taglib uri="/WEB-INF/tlds/diego.tld" prefix="diego" %>
Test Tag: <diego:out name="diegoyun"></diego:out>

4. 部署驗證

啟動 Tomcat,瀏覽頁面應顯示:Test Tag: Hello! diegoyun

進階概念

BodyContent 處理

  • empty:無標籤體內容
  • JSP:標籤體包含 JSP 程式碼,需繼承 BodyTagSupport
  • tagdependent:標籤體由標籤自行解析

回傳值控制流程

回傳值含義
EVAL_PAGE繼續處理頁面
SKIP_PAGE跳過頁面剩餘部分
EVAL_BODY_INCLUDE處理標籤體內容
EVAL_BODY_AGAIN重複處理標籤體(迴圈標籤常用)

動態屬性值 (rtexprvalue)

設為 true 時,屬性值可為運行時運算式(如 name="${user.name}"),大幅增強靈活性。

最佳實踐建議

  1. 標籤類別命名以 Tag 結尾,TLD 前綴簡短有意義
  2. 盡量使用 SimpleTagSupport (JSP 2.0+) 簡化開發
  3. 複雜邏輯移至獨立服務類,標籤僅負責呈現協調
  4. 善用 JSTL 標準標籤庫,減少重複造輪子

掌握 Taglib 開發,能讓 JSP 頁面更乾淨、邏輯更可復用,是從「寫頁面」進階到「建元件」的關鍵一步。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved