タグクラスのソースコード
では、作成したMyFirstTagHandlerがどのようになっているか、ソースコードを見てみましょう。初期状態では、以下のようなものが作成されているはずです。
package jp.tuyano;
import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.JspException;
public class MyFirstTagHandler extends SimpleTagSupport {
public void doTag() throws JspException {
JspWriter out=getJspContext().getOut();
try {
JspFragment f=getJspBody();
if (f != null) f.invoke(out);
} catch (java.io.IOException ex) {
throw new JspException(ex.getMessage());
}
}
}
コメント類はすべて省略しました。見ればわかるように、MyFirstTagHandlerはSimpleTagSupportというクラスを継承して作られています。このSimpleTagSupportは、もっとも単純なタグハンドラクラスです。これは「単独でボディをもたないタグ」を作成するためのクラスなのです。
タグの中には、<a>○○</a>というように開始タグと終了タグがあってその間に何らかのテキスト(これがボディ)を記述するタイプのものと、<hr>や<br>タグのように1つのタグを書くだけで終了タグもボディも持たないタイプのものがあります。このSimpleTagSupportは、1つのタグだけで完結するタイプのタグを作るためのものです。
この他、JspFragmentというものを取得するコードがデフォルトで作成されていますが、今回はこれは使いません。削除してもかまわないものですので、今は無視してください。
このクラスには「doTag」というメソッドが1つだけ用意されています。これが、タグを呼び出した際に実行される処理を記述する部分です。
では、ここに簡単なタグの処理を用意してみましょう。ここでは、ごく単純ですが今日の日付を表示する処理を作成しておきます。
package jp.tuyano;
import java.text.SimpleDateFormat;
import java.util.GregorianCalendar;
import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.JspException;
public class MyFirstTagHandler extends SimpleTagSupport {
public void doTag() throws JspException {
JspWriter out=getJspContext().getOut();
try {
GregorianCalendar gc = new GregorianCalendar();
SimpleDateFormat df = new SimpleDateFormat("yyyy年 M月 d日(E)");
String date = df.format(gc.getTime());
out.println("<span style=\"font-size:10pt; font-weight:bold;
background-color:#ddddff;\">");
out.println(date);
out.println("</span>");
JspFragment f=getJspBody();
if (f != null) f.invoke(out);
} catch (java.io.IOException ex) {
throw new JspException(ex.getMessage());
}
}
}
JSP側への出力は、JspWriter out=getJspContext().getOut();で取得したJspWriterを使って行なえます。ここではGregorianCalendarとSimpleDateFormatを使って今日の日付のStringを用意し、これをout.printlnで出力させています。そのままではつまらないので、<span>タグを使ってちょっと表示をアレンジしてみました。