JSPのインクルードがうまくいかない! なぜ?:やり直し「JSPとTomcat」(11)(1/2 ページ)
Javaを途中までかじったが挫折した。やはりJavaプログラマにスキルチェンジしたい! という読者のために、Tomcatの最新バージョンを使いながらJSPを基礎から解説していく(編集部)
前回は、JavaBeansのプロパティにアクセスするための標準アクションである<jsp:getProperty>タグと<jsp:setProperty>タグの機能を紹介しました。
今回は、JSPページのインクルード(差し込み)を実現する2種類のタグ、<jsp:include>タグと<%@ include>タグについて解説します。
<jsp:include>タグは標準アクション
まずは、インクルードのための標準アクションである<jsp:include>タグについて説明します。このタグを以下の要領で記述することで、ほかのJSPページの出力内容をインクルードできます。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
ここで属性pageでは、インクルードしたいJSPページ(以下では、インクルード対象のJSPページと呼びます)のURLを記述します。これにより、<jsp:include>タグ部分に、同JSPページの出力内容が挿入されます。
なお、JSPページに限らずHTMLページやテキスト・ファイルもインクルード可能です。
インクルードする前の表示
では、同タグの機能を実際に試してみましょう。まずは、インクルード対象のJSPページとして、以下のJSPページ「date.jsp」を作成します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
このように、インクルード対象のJSPページのpageディレクティブでは、通常のcontentType属性の代わりにpageEncoding属性を記述する点に注意してください。同属性の値としては、JSPページ作成時の文字コードを指定します(その理由については、「Javaの文字化け対策FAQ(4)」を参照のこと)。
このdate.jspをWebブラウザで開くと、以下のように日時が表示されます。
インクルードした後の表示
つづいては、インクルードを行う側(以下、インクルード元JSPページと呼びます)として、以下のJSPページ「test.jsp」を作成します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
このtest.jspをWebブラウザで開くと、以下のように表示されます。
このように、<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をインクルードします
Copyright © ITmedia, Inc. All Rights Reserved.