連載
» 2007年03月23日 00時00分 公開

やり直し「JSPとTomcat」(11):JSPのインクルードがうまくいかない! なぜ? (1/2)

Javaを途中までかじったが挫折した。やはりJavaプログラマにスキルチェンジしたい! という読者のために、Tomcatの最新バージョンを使いながらJSPを基礎から解説していく(編集部)

[吉川和巳,有限会社スティルハウス]

 前回は、JavaBeansのプロパティにアクセスするための標準アクションである<jsp:getProperty>タグと<jsp:setProperty>タグの機能を紹介しました。

 今回は、JSPページのインクルード(差し込み)を実現する2種類のタグ、<jsp:include>タグと<%@ include>タグについて解説します。

<jsp:include>タグは標準アクション

 まずは、インクルードのための標準アクションである<jsp:include>タグについて説明します。このタグを以下の要領で記述することで、ほかのJSPページの出力内容をインクルードできます。

<jsp:include page="<URL>" />

 ここで属性pageでは、インクルードしたいJSPページ(以下では、インクルード対象のJSPページと呼びます)のURLを記述します。これにより、<jsp:include>タグ部分に、同JSPページの出力内容が挿入されます。

 なお、JSPページに限らずHTMLページテキスト・ファイルもインクルード可能です。

インクルードする前の表示

 では、同タグの機能を実際に試してみましょう。まずは、インクルード対象のJSPページとして、以下のJSPページ「date.jsp」を作成します。

<%@ page pageEncoding="Shift_JIS" %>
<%= new java.util.Date() %>

 このように、インクルード対象のJSPページのpageディレクティブでは、通常のcontentType属性の代わりにpageEncoding属性を記述する点に注意してください。同属性の値としては、JSPページ作成時の文字コードを指定します(その理由については、「Javaの文字化け対策FAQ(4)」を参照のこと)。

 このdate.jspをWebブラウザで開くと、以下のように日時が表示されます。

図1 インクルード対象のJSPページ「date.jsp」の表示結果 図1 インクルード対象のJSPページ「date.jsp」の表示結果

インクルードした後の表示

 つづいては、インクルードを行う側(以下、インクルード元JSPページと呼びます)として、以下のJSPページ「test.jsp」を作成します。

<%@ page contentType="text/html; charset=Shift_JIS" %>

<html>
    <head>
        <title>JSPサンプル</title>
    </head>
    <body>
        こんにちは、今の日時は <jsp:include page="date.jsp"/> です。
    </body>
</html>

 このtest.jspをWebブラウザで開くと、以下のように表示されます。

図2 インクルード元JSPページ「test.jsp」の表示結果 図2 インクルード元JSPページ「test.jsp」の表示結果

 このように、<jsp:include>タグを記述した部分に、date.jspの出力内容がインクルードされていることが分かります。

やり直し「相対URL」

 さて、<jsp:include>タグのpage属性に記述できるURLは、JSP仕様上で「相対URL(relative URL)」と規定されているものです。つまり、「http://...」で始まる絶対URLではなく、インクルード元JSPページを起点とした相対パスとなります。いくつかの例を示しましょう。

JSPファイル名のみの場合

 「foo.jsp」――このようにJSPファイル名のみを記述した場合は、インクルード元JSPページと同じディレクトリ内のfoo.jspをインクルードします。

「ディレクトリ名/ファイル名」形式の場合

 「bar/foo.jsp」――このように「ディレクトリ名/ファイル名」形式で記述した場合は、インクルード元JSPページのディレクトリを起点として、サブディレクトリbarにあるfoo.jspをインクルードします。

冒頭に「/」を付けた場合

 「/bar/foo.jsp」――このように冒頭に「/」を付けた場合は、Webアプリケーションの「コンテキスト・パス」を起点とした相対パスを表現できます(コンテキスト・パスについて詳しくはいずれ説明しますが、Webサーバのドキュメント・ルートに相当するものです)。

 この例では、インクルード元JSPページの配置場所にかかわらず、Webアプリケーションのディレクトリbarにあるfoo.jspをインクルードします

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。