JSP/Servletのお勉強メモ その7

タグライブラリについてをやってみる.


タグライブラリとは, スクリプトの代わりに処理を行うことのできるタグである,
カスタムタグをまとめたもののこと.
JSTLってのがあるみたい.
導入がちょっち面倒っぽい.

カスタムタグの作成

カスタムタグ作成の流れとしてはこんな感じになる.

  1. TLDファイルの作成.
  2. タグハンドラクラスの定義
  3. web.xmlにタグライブラリの登録
  4. JSPファイルにカスタムタグを追加.

とりあえずは簡単な例をやってみる.

TLDファイルの作成

以下の内容をWEB-INF/tldディレクトリに作成.

<?xml version="1.0" encoding="UTF-8"?>

<taglib>
    <tlib-version>2.0</tlib-version>
    <jsp-version>2.0</jsp-version>
    <short-name>CustomTag Sample</short-name>

    <tag>
        <name>printDate</name>
        <body-content>empty</body-content>
        <tag-class>chap10.sec01.PrintDateTag</tag-class>
    </tag>
</taglib>

何度書いてもXMLはいやだなあ.
書くのが面倒だし, エラー出たとき間違い箇所見つけるのがやっかい.
なお, body-content中のemptyは, タグの内容を指定しないということ.

タグハンドラクラスの定義

とはいってもjavaファイルの作成, コンパイルなんだけど.
配置場所は, classes以下package指定にそってでOK.

package chap10.sec01;

import java.io.*;
import java.util.Date;

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

public class PrintDateTag extends SimpleTagSupport
{
    public void doTag() throws JspException, IOException
    {
        JspWriter out = getJspContext().getOut();
        out.println( new Date() );
    }
}

コンパイルはちょっとだけとまどった.

$ javac -d classes -classpath $CATALINA_HOME/common/lib/jsp-api.jar src/chap10/sec01/PrintDateTag.java

こんな感じで指定するか, 環境変数CLASSPATHjsp-api.jarを加えちまうかしないといけない.

web.xmlにタグライブラリを登録

web-appタグの中にこんなのを記載.

    <taglib>
        <taglib-uri>http://localhost:8080/jspbook/simpletag</taglib-uri>
        <taglib-location>/WEB-INF/tld/customtag-example.tld</taglib-location>
    </taglib>

taglib-uriは, jspファイルでタグライブラリを指定するために使う.
名前みたいなもんだろうから, 何でもいいんじゃないかと思う. (実際どうなんだか知らないけど.)
ちなみに日本語のコメントを書いといたらエラーが出て全然上手くいかなかった.
日本語コメント消したら上手くいったから, 間違いないんだろうけど文字コードの問題かなあ.

JSPファイルの作成

本に載ってたサンプルそのまま.
現在の時刻を表示する.

<%@ page contentType="text/html; charset=EUC_JP" %>
<!-- web.xmlのtaglib-uriに書いたものを指定する. -->
<%@ taglib uri="http://localhost:8080/jspbook/simpletag" prefix="test" %>

<HTML>
<HEAD>
<TITLE>SimpleTagSupportを使用したカスタムタグ</TITLE>
</HEAD>
<BODY>
<H1>
<test:printDate />
</H1>
</BODY>
</HTML>

これで終了.
意外と簡単だった.


サーブレットとどう使い分ければいいんだろう.
線引きが分かりづらいなあ.
でもかなり便利そうだなあ.
上手くやればjsp内にjavaコードをなくせるかもしれないし.
やっぱり先にjavaコードをコンパイルしとくからjspに比べて動作が高速だったりするのだろうか?


高速であるとかそういうことが目的ではないみたいね.
ここ↓が詳しいかな. なっとく.

                                                                                                                      • -

dW : Java technology : JSTL入門: 式言語
http://www-06.ibm.com/jp/developerworks/java/030411/j_j-jstl0211.html

                                                                                                                      • -