ASH | サーバ | セキュリティ | Linux | FreeBSD | DB | Web | CGI | Perl | Java | XML | プログラム | ネットワーク | 標準 | Tips集

「HelloWorld!」カスタムタグ

最も簡単なカスタムタグ

 単一タグのカスタムタグの例として、「Hello World!」を表示するカスタムタグを作成してみます。

表示画面イメージ

Hello カスタムタグ×
Hello カスタムタグ

Hello World!


JSPのソース(HelloTag.jsp)

 JSPでカスタムタグを利用するためには、taglibディレクティブを指定する必要があります。 カスタムタグは、<プレフィックス:タグ名 />で指定します。

HelloTag.jsp
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ taglib prefix="ash" uri="http://ash.jp/taglib_1_0" %>

<html>
<head>
<title>Hello カスタムタグ</title>
</head>
<body>

<h1>Hello カスタムタグ</h1>

<p><ash:hello /></p>

</body>
</html>

タグハンドラのソース

 タグハンドラは、doStartTagメソッドのみ実装します。 「Hello World!」を表示すると、SKIP_BODYを返却しているため、BODYの処理を行われません。

HelloTag.java
package jp.ash.taglib;

import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;

/**
 * 「Hello World!」表示タグライブラリ
**/
public class HelloTag extends TagSupport {
  public int doStartTag() throws JspException {
    try {
      pageContext.getOut().print("Hello World!");
    } catch(Exception ex) {
      throw new JspException(ex);
    }
    return SKIP_BODY;
  }
}

属性を持つカスタムタグ

 属性は、タグハンドラクラスに属性名のセッタメソッド(setXXX)を作成するだけです。セッタメソッドは、set + 「変数名の先頭を大文字にした名前」のメソッドのことです。 セッタメソッドを作成しておくと、JSPで属性を設定すると、setPageContextで自動的に設定されます。

表示画面イメージ

Echo カスタムタグ×
Echo カスタムタグ

Hello World!


JSPのソース(EchoTag.jsp)

 カスタムタグは、<プレフィックス:タグ名 属性名="属性値" />で指定します。

EchoTag.jsp
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ taglib prefix="ash" uri="http://ash.jp/taglib_1_0" %>

<html>
<head>
<title>Echo カスタムタグ</title>
</head>
<body>

<h1>Echo カスタムタグ</h1>

<p><ash:echo msg="Hello World!" /></p>

</body>
</html>

タグハンドラのソース(EchoTag.java)

 タグハンドラクラスでは、属性名のセッタメソッド(setMsg)を作成します。

EchoTag.java
package jp.ash.taglib;

import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;

/**
 * メッセージ表示タグライブラリ
**/
public class EchoTag extends TagSupport {
  private String msg;

  /** msgの設定 **/
  public void setMsg(String msg) {
      this.msg = msg;
  }

  /** タグ初期処理 **/
  public int doStartTag() throws JspException {
    try {
      pageContext.getOut().print(msg);
    } catch(Exception ex) {
      throw new JspException(ex);
    }
    return SKIP_BODY;
  }
}

カスタムタグの登録方法

タグライブラリ記述子の作成

 タグライブラリの情報をタグライブラリ記述子に設定します。

taglib.tld
<?xml version="1.0" encoding="Shift_JIS" ?>
<!DOCTYPE taglib PUBLIC
  "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
  "http://java.sun.com/j2ee/dtd/web-jsptaglibrary_1_2.dtd">

<taglib>
  <tlib-version>1.0</tlib-version>
  <jsp-version>1.2</jsp-version>
  <short-name>ash</short-name>
  <uri>http://ash.jp/taglib_1_0</uri>
  <description>ASHのタグライブラリ</description>

  <tag>
    <name>hello</name>
    <tag-class>jp.ash.taglib.HelloTag</tag-class>
    <body-content>empty</body-content>
    <description>「HelloWorld!」を表示</description>
  </tag>

  <tag>
    <name>echo</name>
    <tag-class>jp.ash.taglib.EchoTag</tag-class>
    <body-content>empty</body-content>
    <description>msg内容を表示</description>
    <attribute>
      <name>msg</name>
      <required>true</required>
      <rtexprvalue>false</rtexprvalue>
    </attribute>
  </tag>

</taglib>

デプロイメント記述子の作成

 タグライブラリ記述子をデプロイメント記述子に設定します。

web.xml
<?xml version="1.0" ?>
<!DOCTYPE web-app PUBLIC
  "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
  "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>

  <taglib>
    <taglib-uri>http://ash.jp/taglib_1_0</taglib-uri>
    <taglib-location>/WEB-INF/taglib.tld</taglib-location>
  </taglib>

</web-app>


Copyright (C)1995-2002 ASH multimedia lab.
mail : info@ash.jp