原文: https://beginnersbook.com/2014/01/jsp-custom-tags-with-example-jsp-tutorial/

    用户定义的标签称为自定义标签。在本教程中,我们将了解如何创建自定义标签并在 JSP 中使用它。

    要创建自定义标签,我们需要三件事:

    1)标签处理程序类:在此类中,我们指定自定义标签在 JSP 页面中使用时将执行的操作。

    2)TLD 文件:标签描述符文件,我们将在其中指定我们的标签名称,标签处理程序类和标签属性。

    3)JSP 页面:我们将使用自定义标签的 JSP 页面。

    示例:

    在下面的示例中,我们创建了一个自定义标签MyMsg,当在 JSP 页面中使用时,它将显示消息This is my own custom tag

    标签处理程序类:

    标签处理程序类应该实现Tag/IterationTag/BodyTag接口,或者它也可以扩展TagSupport/BodyTagSupport/SimpleTagSupport类。所有支持自定义标签的类都存在于javax.servlet.jsp.tagext中。在下面我们扩展了类SimpleTagSupport

    Details.java

    1. package beginnersbook.com;
    2. import javax.servlet.jsp.tagext.*;
    3. import javax.servlet.jsp.*;
    4. import java.io.*;
    5. public class Details extends SimpleTagSupport {
    6. public void doTag() throws JspException, IOException {
    7. /*This is just to display a message, when
    8. * we will use our custom tag. This message
    9. * would be displayed
    10. */
    11. JspWriter out = getJspContext().getOut();
    12. out.println("This is my own custom tag");
    13. }
    14. }

    TLD 文件

    此文件应出现在以下位置:Project Name/WebContent/WEB-INF/,它应该有.tld扩展名。

    注:

    <name>标签:自定义标签名称。在这个例子中,我们将它作为MyMsg

    <tag-class>标签给出:完全限定的类名。我们的标签处理程序类Details.java在包beginnersbook.com 中,因此我们将值赋予beginnersbook.com.Details

    message.tld

    1. <taglib>
    2. <tlib-version>1.0</tlib-version>
    3. <jsp-version>2.0</jsp-version>
    4. <short-name>My Custom Tag</short-name>
    5. <tag>
    6. <name>MyMsg</name>
    7. <tag-class>beginnersbook.com.Details</tag-class>
    8. <body-content>empty</body-content>
    9. </tag>
    10. </taglib>

    在 JSP 中使用自定义标签:

    上面我们创建了一个名为MyMsg的自定义标签。我们将在这里使用它。
    注意taglib指令应该在uri字段中有 TLD 文件路径。上面我们创建了message.tld文件,因此我们给出了该文件的路径。
    选择任何前缀并在taglib指令的前缀字段中指定它。这里我们将其指定为myprefix
    自定义标签的调用方式如下:<prefix:tagName/>;。我们的前缀是myprefix,标签名称是MyMsg,所以我们在下面的 JSP 页面中将其称为<myprefix:MyMsg/>

    1. <%@ taglib prefix="myprefix" uri="WEB-INF/message.tld"%>
    2. <html>
    3. <head>
    4. <title>Custom Tags in JSP Example</title>
    5. </head>
    6. <body>
    7. <myprefix:MyMsg/>
    8. </body>
    9. </html>

    输出:

    This is my own custom tag