Tomcatとタグライブラリで遊ぶ

トップ 戻る

タグライブラリとは・・・。
サーブレットは、サーバーでの処理を書くにはいいが、HTMLを埋め込むのがかなり面倒。見た目も汚い。
JSPでは画面のレイアウトをしやすいが、処理が複雑になってくるとHTMLとごちゃごちゃになる。
レイアウトを直したいだけだったのに、Javaのコードまでいじらないと直せないとか、
Javaの処理を直したいだけだったのに、画面まで・・・とか。

そこでタグライブラリができたらしい。(カスタムタグというのか?)
Javaのクラスをタグとして扱えるものである。これならレイアウトと内部の処理を分けることができる。
おまけにソースも見やすくなる。



とりあえず、やってみる。

まずはサーブレットの普通のクラスと区別するためにパッケージにしたいので、
\jakarta-tomcat-4.1.29\webapps\myworks\WEB-INF\classes\
に customTag フォルダ作成。
(というかあまりパッケージを使ったことないので)

次にはタグにするクラスファイルを作る。(タグハンドラ)
(\jakarta-tomcat-4.1.29\webapps\myworks\WEB-INF\classes\customTag 内に)

TagTest.java
package customTag;

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

public class TagTest extends BodyTagSupport {

  public int doStartTag() throws JspException {
    try {
      pageContext.getOut().print("Hello CustomTag!!");
    } catch (Exception e) {
      throw new JspException(e.getMessage());
    }
    return SKIP_BODY;
  }

  public int doEndTag() {
    return EVAL_PAGE;
  }

}

DOSプロンプトからコンパイル。
(コンパイルの仕方、設定などは Tomcatとサーブレットで遊ぶ を参考)



今度はタグディスクリプタライブラリ(tld)ファイルとかいうのを作る。
さっき作ったのはまだ、ただのクラスファイルなので、タグハンドラとして設定する必要がある。

examples を参考にして、
\jakarta-tomcat-4.1.29\webapps\myworks\WEB-INF\
に jsp フォルダを作り、tld ファイルを置く。
(とりあえず、サンプルにあるフォルダ構成や example-taglib.tld などを参考にしてみた)

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

<taglib>

  <tlib-version>1.0</tlib-version>
  <jsp-version>1.2</jsp-version>
  <short-name>simple</short-name>
  <uri>http://jakarta.apache.org/tomcat/example-taglib</uri>
  <description>
    A simple tab library for the examples
  </description>

  <tag>
    <name>Test</name>
    <tag-class>customTag.TagTest</tag-class>
    <description> TagTest Nov. 2003 </description>
  </tag>

</taglib>

上の記述はこのファイルが xml 形式で、2行目からはタグライブラリの記述ですよ、ということ?
(詳しいことはよく知らない。未調査)

<taglib></taglib> 内がタグライブラリの記述。
tlib-version はタグライブラリのバージョン。
jsp-version はJSPのバージョン。(このバージョンによって<taglib>内のタグの書き方が違うので注意)
short-name はこのタグライブラリの名前。
uri ・・・なんだろ。省略可能らしい。
description はこのタグライブラリの説明。

ここまでは example-taglib.tld のコピペ。
<tag></tag>内で実際に先ほど作ったクラスに名前をつける。
name このタグを使うときの名前。
tag-class このタグで実際に動くクラス。
description 説明。

TagTest.jsp
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ taglib uri="/WEB-INF/jsp/tagTest.tld" prefix="tagtest" %>

<html>
<head>
<title>TagTest</title>
</head>
<body>

<tagtest:Test></tagtest:Test>

</body>
</html>

1行目はこのファイルがテキストでで HTML、キャラクターセットは Shift_JIS という設定。
2行目がタグライブラリの設定。/WEB-INF/jsp/tagTest.tld を tagtest という名前で使いますよ、という指定
これで <tagtest:Test></tagtest:Test> と書くことで使えるようになる。
(なぜ <Test></Test> じゃダメなのか?.tldでnameを変えて複数記述できるのか、名前解決のためか?またもや未調査)

http://localhost:8080/myworks/jsp/TagTest.jsp
Hello CustomTag!!

でた。



トップ    戻る

Copyright© 2002-2003 Kasaharan All rights reserved