ディレクティブについて

ディレクティブで、JSP と結果として求められるサーブレットのプロパティを設定します。ディレクティブは、コンパイル時の JSP 解析中に評価される前処理要素です。

ディレクティブによって定義される情報の例には、JSP の出力 MIME タイプ、ページが使用するタグライブラリ、ページに含まれるクラスがあります。

すべての JSP ディレクティブの基本シンタックスは次の形式です。

<%@ directive %>

JSP では、次の表に示す 3 種類のディレクティブがサポートされています。次のセクションでは、これらのディレクティブについて説明します。
ディレクティブ
目的
シンタックス
page
ページ全体にわたる属性を定義します。
<%@ page attribute="value" ... %> 
include
JSP にテキストを挿入
します。
<%@ include file = "path" ... %> 
taglib
JSP にタグライブラリを
含めます。
<%@ taglib uri="tagLibraryURI"
   prefix="tagPrefix" %>

式は実行時に評価されるため、ディレクティブ内では使用できません。したがって、次のディレクティブの例は、式 <%= myVar%> をコンパイル時に評価できないので、正しくありません。

<%@ page import="<%= myVar%>" %>

さらに、ディレクティブは解析時に評価され、何も出力しないので、ディレクティブを使用してクライアントに情報を返すことはできません。

次のセクションでは、JSP がサポートするディレクティブを説明します。

page ディレクティブ

page ディレクティブでは、JSP 全体に対して 1 つ以上の属性を定義できます。

page ディレクティブのシンタックスは次のとおりです。

<%@ page attribute = "value" ... %> 

ここで、

attribute = language | import | contentType | session | buffer | 
autoflush | isThreadSafe | info | errorPage | isErrorpage | 
extends

value は、引用符または二重引用符で囲まれた文字列リテラル。

1 つの JSP で複数の page ディレクティブを使用できます。ただし、import 属性を使用している場合を除き、1 つの属性は 1 回しか参照できません。複数の page ディレクティブを指定したために属性が重複すると、JRun は JSP 内の page ディレクティブの最初のインスタンスだけを認識します。つまり JRun では、最初の属性以上の定義は無視されます。

import 属性を含む page ディレクティブは複数指定できます。コンパイルされたページでは、import 属性で参照されたファイルがすべてインポートされます。

たとえば、次のディレクティブでは JSP の出力 MIME タイプは HTML に、スクリプト言語は Java に設定されます。

<%@  page contentType="text/html" language = "java" %>

(language 属性を定義する場合は、java に設定する必要があります。)

次の表で、page ディレクティブの属性を説明します。
属性
説明
language
ファイルで使用されるスクリプト言語を定義します。デフォルトは Java ですが、Java 以外の値は使用できません。JRun は、JSP での JavaScript の使用をサポートしません。
import
コンパイルされたページがインポートするパッケージを、カンマ区切りリストで指定します。次に例を示します。
<%@  page import = "java.io.*,java.util.Hashtable" %>

JRun は次のクラスを暗黙的にインポートします。
java.lang.*
javax.servlet.*
javax.servlet.jsp.*
javax.servlet.http.*
contentType
MIME タイプを定義します。またオプションで、JSP によって生成されるレスポンスの文字セットを定義します。デフォルトの MIME タイプは text/html で、デフォルトの文字セットは ISO-8859-1 です。
この属性のシンタックスは次のとおりです。
<%@  page contentType = "TYPE; charset = CHARSET" %>
TYPE では、出力 MIME タイプを指定します。またオプションの CHARSET で、文字セットを指定します。次に例を示します。
<%@  page contentType = "text/plain" %>

JSP の文字セット変更の詳細については、弟 3 章、「国際化対応とローカリゼーション」を参照してください。
session
ページがセッションの一部としてアクセスされるかどうかを指定します。
true に設定すると、ページの JSP session オブジェクトが初期化されます。
false に設定すると、ページがセッションの一部ではなく、session
オブジェクトを使用できないことが指定されます。
デフォルトは true です。
buffer 
ページ出力で使用されるバッファリングモデルを指定します。サイズ
指定に文字列 kb を入れる必要があります。たとえば、次のディレクティブはバッファーサイズを 16 キロバイトに設定します。
<%@ page buffer = "16kb" %>

none に設定すると、自動バッファリングが無効になります。つまり、ページ出力はすべてクライアントに直接書き込まれます。
バッファーサイズを指定した場合、出力は指定されたサイズ以下のサイズでバッファリングされます。autoFlush 属性の値に応じて、バッファーの内容が自動的にフラッシュされるか、または、オーバーフローが発生したときに例外が発生します。デフォルト値は 8 キロバイトです。
バッファーサイズ設定の詳細については、 「レスポンスオブジェクトのバッファーサイズの拡張」 を参照してください。
autoFlush
true に設定すると、バッファーが一杯になったときに出力が自動的に
フラッシュされます。
false に設定すると、バッファーが一杯になったときに例外が発生します。
デフォルトは true です。buffer 属性を none に設定している場合は、autoFlush を false に設定できません。
isThreadSafe 
ページごとに実装されるスレッドセーフのレベルを指定します。
false に設定すると、複数のリクエストを処理するためにページの
インスタンスが複数作成されます。これらのページインスタンスは
それぞれ1 つのスレッドを持ちます。
true に設定すると、複数の未解決のクライアントリクエストが、このページに同時にディスパッチされます。これによって、JSP は、ページの共有ステートへのアクセスを正しく同期させることができます。
デフォルトは true です。
info
JSP によって実行時に使用される文字列を指定します。
この文字列へは、application.getServletInfo メソッドを
使用してアクセスできます。
isErrorPage
別の JSP でキャッチされない例外をこの JSP で処理するように指定
します。
true に設定すると、JSP exception オブジェクトがインスタンス化
されます。JRun は、例外発生元 JSP からのエラーに基づいて、exception オブジェクトを定義します。
false に設定すると、この exception オブジェクトを使用できなく
なります。JSP の本文からこのオブジェクトを参照すると、致命的な
変換エラーが発生します。
デフォルト値は false です。
JSP のエラーキャッチメカニズムの詳細については、 「エラーの処理」 を参照してください。
errorPage
ページでキャッチされなかった例外がエラー処理のために送信される JSP への URL を指定します。デスティネーションページは、page ディレクティブの isErrorPage 属性を true に設定する必要があります。
呼び出されると、デスティネーション JSP の exception オブジェクトに例外へのリファレンスが入ります。
autoFlush を true に設定し、例外を返したページからの出力データがすべてフラッシュされた場合は、エラーページへ例外を返そうとしても、失敗する可能性があります。
JSP のエラーキャッチメカニズムの詳細については、 「エラーの処理」 を参照してください。
extends
JSP がサブクラス化する JSP ベースクラスを指定します。次に例を示します。
<%@ page extends = 
"com.myPackage.AServletImplementation" %>

デフォルトでは、サーブレットは JRun で javax.servlet.http.HttpServlet クラスのサブクラスとして作成されます。したがって、サーブレットのベースクラスを再定義する特定の理由がある場合にかぎり、この属性を使用します。
pageEncoding
JSP をコンパイルするときに使用するエンコーディングタイプを指定
します。
次の例は、日本語文字セットでページをエンコードします。
<% page contentType="text/html; charset=UTF-8" 
pageEncoding="EUC-JP" %>

ページのエンコーディングは、エディタや IDE でページを保存するときに使用したエンコーディングタイプに一致しなければなりません。

サンプルの JSP を表示するには、samples JRun サーバを起動し、ブラウザで
http://localhost:8200/techniques を開きます。

include ディレクティブ

include ディレクティブは、変換時にテキストを JSP ファイルに挿入します。このディレクティブによって、挿入元 JSP のコンテンツと挿入先 JSP のコンテンツの両方が 1 つの JSP に入るようになります。

include ディレクティブのシンタックスは次のとおりです。

<%@ include file = "path" %> 

JRun は、指定されたファイルのコンテンツを、このディレクティブのある位置で JSP ファイルに挿入します。

path の先頭がスラッシュ (/) の場合、パスは JSP のアプリケーションに相対的になります。パスの先頭がスラッシュでない場合、JRun は、パスが、変換中の JSP のパスに相対的であると見なします。パスの詳細については、 「相対 URL の指定」 を参照してください。

JSP で include ディレクティブを使用すると、JSP が 1 つ作成されます。これは、1 つの JSP を別の JSP にインクルードした場合でも同様です。JRun は 1 つの JSP とそれに対応する 1 つのサーブレットを作成します。このサーブレットは、元の 2 つの JSP のコンテンツを含んでいます。

JRun は、インクルードされたすべてのファイルについて、実行時に依存チェックを実行します。インクルードしたファイルがメモリにロードされた後で、インクルードされたファイルが変更された場合、インクルードしたファイルは次のリクエスト時に再変換されます。

次の例で、ヘッダー情報を含む別の JSP をインクルードします。

<html><%@ include file="my_header.jsp" %>
<%-- 残りの JSP --%>
...
</body></html>

my_header.jsp ファイルには次の情報が含まれています。

<head><title>ご挨拶</title></head><body>
<center><table width=80%><tr>
<td><img src="logo.gif" width=200 height=21 alt="インクルードのテスト" 
border="0"><P></td>
<td><H1><font color="#336699">ご挨拶</font></h1></td>
</tr></table></center>

JSP request オブジェクトを使用して、インクルードされた JSP に情報を渡すことができます。たとえば、次のように、入力としてページのタイトルを定義する属性を取るヘッダー JSP を作成できます。

<html><%request.setAttribute("title", "ご挨拶"); %>
<%@ include file="my_header.jsp" %>
<%-- 残りの JSP --%>
...
</body></html>

こうするとヘッダーファイルは、次のようにしてこの属性にアクセスできます。

<html><head><title><%= request.getAttribute("title")%></title>...

サンプルの JSP を表示するには、samples JRun サーバを起動し、ブラウザで
http://localhost:8200/techniques を開きます。

taglib ディレクティブ

taglib ディレクティブを使用して、JSP によってインクルードされるタグライブラリを宣言します。タグライブラリには JSP で使用可能なカスタムタグが含まれています。

taglib ディレクティブのシンタックスは次のとおりです。

<%@ taglib uri="path" prefix="tagPrefix" %>

次の例で、タグ coolTag を含むタグライブラリを定義します。このディレクティブの後でこのタグライブラリにあるタグを参照するには、接頭辞 myTags を使用します。接頭辞 myTags を使用する JSP に別のタグライブラリを定義すると、エラーが発生します。

<%@ taglib uri="myApp/appTags" prefix="myTags" />
<myTags:coolTag>
...
</myTags:coolTag>

次の表で、taglib ディレクティブの属性を説明します。
属性
説明
uri
タグライブラリの場所を、相対パス位置、または web.xml ファイルへのルックアップキーとして指定します。JRun は、まず web.xml ファイルをチェックし、path がルックアップキーであるかどうかを判断します。
uri が web.xml ファイルへのルックアップキーである場合は、JRun によって、web.xml ファイル内のキーと、関連するタグライブラリが検索されます。たとえば、アプリケーションの web.xml ファイルで次のように指定すると、myTagLib と名付けられたルックアップキーと、タグライブラリの関連する位置が定義されます。
<taglib>
  <taglib-uri>myTagLib</taglib-uri>
  <taglib-location>/WEB-INF/tlibs/myTagLib.tld</ 
  taglib-location>
</taglib>

uri がタグライブラリを識別する相対パスで、スラッシュ (/) で始まっている場合、この uri は JSP のアプリケーションに関連付けられています。uri がスラッシュで始まっていない場合、このパスは 変換されている JSP に関連付けられているパスと見なされます。
詳細については、 「相対 URL の指定」 を参照してください。
prefix 
ライブラリ内のカスタムタグを識別する接頭辞文字列を定義し
ます。接頭辞 jspjspxjavajavaxservletsunsunw は予約されています。空の接頭辞は使用できません。

独自のカスタムタグライブラリ作成の詳細については、弟 11 章、「Java のカスタムタグ」を参照してください。

サンプルの JSP を表示するには、samples JRun サーバを起動し、ブラウザで
http://localhost:8200/techniques を開きます。