検索
連載

個別のJSPページでJSTL宣言を省略するJavaTips 〜JSP/サーブレット編

Share
Tweet
LINE
Hatena

 JSTL(JSP Standard TagLibrary)は、Java標準化組織であるJCP(Java Community Process)でJSR(Java Specification Requests/Java標準仕様)として認定された標準タグライブラリです。JSPページでよく使用する汎用的な機能を実装しており、その内部はさらにCore、Database、I18n、Xml、Functionsという5つのライブラリ群から構成されます。

ライブラリ名 概要
Core 変数の設定/参照、条件分岐、繰り返し、例外処理など基本機能を提供
Database データベースへの接続から更新/検索、トランザクション機能を提供
I18n 数値や日付の地域依存表記、国際化対応機能を提供
XML XML文書の解析/ノード抽出、XSLTスタイルシートによる変換機能を提供
Functions コレクションのサイズ取得や文字列操作のための関数群を提供(JSTL1.1以降)
JSTL1.1で使えるタグライブラリ

 JSP2.0から導入された式言語やタグファイルなどと併せて用いることで、JSPページからスクリプティング要素を排除することができます。今後、JSPページを作成する場合には、できるだけスクリプティング要素は利用せずにJSTLや式言語で記述することを強くお薦めします(JSTL/式言語の具体的な利用方法について興味のある方は、「今日からつかえる JSP&サーブレット サンプル集 JSP2.0+サーブレット2.4対応版」(秀和システム刊)、「JSP&サーブレット スーパーリファレンス」(秀和システム刊)などを参考にしてください)。

 ところが、JSP2.0環境では、JSTLは拡張ライブラリとして扱われており、利用するにはページごとに@taglibディレクティブを宣言する必要があります。@taglibディレクティブの記述はごく単純なものですが、単純であるだけに忘れやすく、プログラマにとっては面倒なものでしょう。また、そもそもJSTLのバージョンが変わった場合に、ページごとに@taglibディレクティブの記述を書き換えなければならないのも好ましくありません。そこで本稿では、JSP2.0から導入された「共通ヘッダ」機能を利用することで、個別のページから煩雑なディレクティブ宣言を取り除き、JSTLをあたかも組み込みのアクションタグであるかのように利用できる方法について紹介します。

解説

(1)JSTLをインストールする

 共通ヘッダの定義に先立って、まずはJSTLをWebアプリケーション上で有効にしておく必要があります。JSTLの最新バイナリは、以下のURLから入手することができます。

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


 ダウンロードしたjakarta-taglibs-standard-X.X.X.tar.gz(Linux版)、jakarta-taglibs-standard-X.X.X.zip(Windows版)を解凍し、配下の「jakarta-taglibs-standard-X.X.X/lib」ディレクトリにあるjstl.jar、standard.jarの2ファイルを、それぞれアプリケーションルート配下の「/WEB-INF/lib」ディレクトリにコピーしてください。

利用可能なJSTLのバージョンは、JSP&サーブレットのバージョンによって異なります。JSP2.0(Tomcatであれば5.x)を利用している場合はJSTL1.1.xを、JSP1.2(Tomcatであれば4.x)を使用している場合にはJSTL1.0.xを使用してください。本稿ではJSP2.0環境を前提としていますが、もしもJSP1.2環境を使用している場合には、jstl.jar、standard.jarの他に、jaxen-full.jar、saxpath.jarを加えた4ファイルを、それぞれアプリケーションルート配下の「/WEB-INF/lib」ディレクトリにコピーする必要があります。また、J2SE1.3以前のバージョンを使用している場合には、同フォルダに格納されているその他の「.jar」ファイルもあわせてコピーしてください。


(2)JSPコンフィギュレーションを定義する

 JSPコンフィギュレーション(<jsp-config>要素)は、JSP2.0から新たに追加された機能です。デプロイメント・ディスクリプタ(web.xml)に設定を追加することで、アプリケーション配下のJSPページで共通的に利用する文字エンコーディングやヘッダ/フッタを定義することができます。これによって、冗長なディレクティブの記述などをデプロイメント・ディスクリプタに集約することができますので、JSPページの記述が簡素化できるほか、設定に変更があった場合にも修正が容易になります。

 本稿では、JSPコンフィギュレーションの機能を利用して、アプリケーション共通で利用するタグライブラリ宣言を「共通ヘッダ」として定義することにします。

リスト1 web.xml
<?xml version="1.0" encoding="UTF-8" ?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
……中略……
<jsp-config>
……中略……
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<el-ignored>false</el-ignored>
<page-encoding>Windows-31J</page-encoding>
<scripting-invalid>false</scripting-invalid>
<include-prelude>/header.jsp</include-prelude>
</jsp-property-group>
</jsp-config>
……中略……
</web-app>
リスト2 header.jsp
<%@ page contentType="text/html;charset=Windows-31J" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

 JSPページ共通のパラメータは、<jsp-config>要素配下の<jsp-property-group>要素で定義することができます。<jsp-property-group>要素配下に登場する各子要素の意味は以下の通りです。

要素名 概要
<url-pattern> パラメータを適用するURLパターン(必須)
<el-ignored> 式言語を無視するか(true/false)
<page-encoding> ページエンコーディング名
<scripting-invalid> スクリプティング要素を無効にするか
<include-prelude> 各ページのヘッダとしてインクルードするファイル
<include-coda> 各ページのフッタとしてインクルードするファイル
<jsp-property-group>要素に属する主な要素

 ここで注目して頂きたいのは、<url-pattern>要素と<include-prelude>要素です。<url-pattern>要素は、<jsp-property-group>要素で定義された一連のパラメータを適用する範囲を特定します。ここでは「*.jsp」としていますので、アプリケーション配下の全「.jsp」ファイルに対してパラメータを適用します。

 <include-prelude>要素には、各JSPページの読み込みに先立って呼び出されるヘッダファイルを指定します。ここでは、ヘッダファイルheader.jspで、一連の@taglibディレクティブを指定することで、すべての「.jsp」ページでJSTLを利用できるように設定しています。もちろん、他にも追加で他のタグライブラリを利用したい場合には、@taglibディレクティブを適宜追加すれば良いでしょう。

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る