# JSP 自定义标签

> 原文： [https://beginnersbook.com/2014/01/jsp-custom-tags-with-example-jsp-tutorial/](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`

```html
package beginnersbook.com;
import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.*;
import java.io.*;
public class Details extends SimpleTagSupport {
   public void doTag() throws JspException, IOException {
      /*This is just to display a message, when
       * we will use our custom tag. This message
       * would be displayed
       */
      JspWriter out = getJspContext().getOut();
      out.println("This is my own custom tag");
   }
}
```

**TLD 文件**

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

**注：**

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

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

`message.tld`

```html
<taglib>
 <tlib-version>1.0</tlib-version>
 <jsp-version>2.0</jsp-version>
 <short-name>My Custom Tag</short-name>
 <tag>
 <name>MyMsg</name>
 <tag-class>beginnersbook.com.Details</tag-class>
 <body-content>empty</body-content>
 </tag>
</taglib>
```

**在 JSP 中使用自定义标签：**

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

```html
<%@ taglib prefix="myprefix" uri="WEB-INF/message.tld"%>
<html>
 <head>
    <title>Custom Tags in JSP Example</title>
 </head>
 <body>
    <myprefix:MyMsg/>
 </body>
</html>
```

**输出：**

```html
This is my own custom tag
```
