JSP: タグ拡張を使う

PHP 大人気らしいけど JSP

JSTL を使うには

Standard-1.1 Taglib
http://jakarta.apache.org/taglibs/doc/standard-doc/intro.html

ダウンロードして展開すると、lib ディレクトリに jstl.jar と standard.jar が入っている。これを自分の WEB-INF/lib にコピーする。
タグのリファレンスは入っていないので、こちらを参照。

JavaServer Pages Standard Tag Library 1.1 Tag Reference
http://java.sun.com/products/jsp/jstl/1.1/docs/tlddocs/index.html

JSTL で DB を使う場合の設定

JSTLsql ライブラリで DB に接続する場合、接続先は JNDI 名で書いておく。

<sql:query var="rs" dataSource="jdbc/mydb">
select * from mytable
</sql:query>

その JNDI 名を実際の DB に関連付けるには、Tomcat の場合、server.xml に記述を追加する。Context 要素の中に Resource 要素を追加すればいいんだけど、初期状態の server.xml には Context がない。Host 要素の下に Context を足して、その中に Resource を足す。Context 要素を足す位置は、Host 要素の開始タグの直後でいい。MySQLの場合、こんな感じ。

<Context path="/myapp" docBase="myapp" reloadable="true" crossContext="true">
  <Resource name="jdbc/mydb" auth="Container" type="javax.sql.DataSource"
            maxActive="3" maxIdle="30" maxWait="10000"
            username="mydbuser" password="mydbpassword" driverClassName="com.mysql.jdbc.Driver"
            url="jdbc:mysql://localhost/teriyaki?autoReconnect=true"/>
</Context>

さらに、web.xml に宣言を追加。

<resource-ref>
  <description>DB Connection</description>
  <res-ref-name>jdbc/mydb</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
</resource-ref>

最後に、JDBC ドライバを適切な場所に置く。WEB-INF/lib に置いても参照されない。TomcatMySQL の場合、common/lib に mysql-connector-java-3.1.11-bin.jar をコピーしておく。

タグファイルを書くには

タグは Java クラスとして書くこともできるが、タグファイル (拡張子 .tag のテキストファイル) に書いてもいい。
タグファイルは基本的には JSP ファイルと同じだが、ディレクティブがちょっと違う。page ディレクティブの代わりに tag ディレクティブを使うほか、attribute ディレクティブと variable ディレクティブが使える。include ディレクティブと taglib ディレクトリは、JSP ファイルと同じように使える。

<%@ tag pageEncoding="UTF-8" %>
<%@ attribute name="target" %>

hello ${target}

タグファイルを使うには

タグファイルをテスト的に作っている場合は、JSP ファイル側で直接に参照してもいい。

<%@ taglib prefix="t" tagdir="/WEB-INF/tags" %>
<t:hello target="world"/>

これで、/WEB-INF/tags/hello.tag が参照される。
固まってきたら、tld ファイルを作ってやるのがよさげ。