PGBox
P
G
Box

pageディレクティブ

JSPのメニューへ戻る



使用した環境
JDK 6 Update 11
Tomcat 6.0.18

JSPページに関する設定情報を記述するディレクティブです。

JSPページの振る舞いや基本的な動作を指定します。

シンタックスは以下のようになっています。
<%@ page page_directive_attr_list %>
page_directive_attr_list ::= { language="scriptingLanguage" }
                             { extends="className" }
                             { import="importList" }
                             { session="true|false" }
                             { buffer="none|sizekb" }
                             { autoFlush="true|false" }
                             { isThreadSafe="true|false" }
                             { info="info_text" }
                             { errorPage="error_url" }
                             { isErrorPage="true|false" }
                             { contentType="ctinfo" }
                             { pageEncoding="peinfo" }
                             { isELIgnored="true|false" }
                             { deferredSyntaxAllowedAsLiteral="true|false" }
                             { trimDirectiveWhitespaces="true|false" }


<%@ page language="scriptingLanguage" %>

JSPページのスクリプトレットで使用する言語を指定します。
デフォルトは"java"です。この属性は特に指定する機会はないでしょう。



<%@ page extends="className" %>

JSPページから生成されるサーブレットが継承するスーパークラスを指定します。



<%@ page import="importList" %>

JSPページ内のスクリプトレットで使用するクラスをインポートします。
通常のJavaコードと同様の方法で指定します。

<%@ page import="java.util.*" %>
<%@ page import="sample.SampleItem" %>
<%
    List<SampleItem> sampleItem = new ArrayList<SampleItem>();
%>

以下のようにカンマ区切りでの指定も可能です。
<%@ page import="java.util.*, sample.SampleItem" %>



<%@ page session="true|false" %>

JSPページ内で暗黙オブジェクトsession(セッション)を使用可能にするかどうかを指定します。
デフォルトはtrueです。falseを指定した場合、sessionは使用できなくなります。

<%@ page session="false" %>
<%
    session.setAttribute("aaa", "AAA");
%>
※ エラーになる



<%@ page buffer="none|sizekb" %>

JSPページの出力結果のバッファサイズを指定します。
「none」を指定した場合はバッファされずに処理結果が随時クライアントに出力されます。
デフォルトのバッファサイズは「8kb」です。

「○kb」といったようにキロバイトで指定します。

サイズの大きなコンテンツの場合は、バッファサイズを大きくする事により
JSP処理結果の転送が効率的になる場合があります。

<%@ page buffer="32kb" %>



<%@ page autoFlush="true|false" %>

バッファ内の処理結果を自動的にフラッシュ(クライアントへ送出)するかどうかを指定します。
デフォルトはtrueです。バッファ容量がいっぱいになると自動的にフラッシュされます。

falseを指定した場合、以下のようにJSP中で手動でout.flush()を呼び出してフラッシュを行う必要があります。
<%@ page autoFlush="false" %>
<%
    for (int i = 0; i < 10000; i++) {
        out.println("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
        out.flush();
    } 
%>
out.flush()が呼び出される前にバッファがいっぱいになるとExceptionが発生します。

また、buffer="none"としている場合にautoFlush="false"を指定する事はできません。



<%@ page isThreadSafe="true|false" %>

スレッドセーフでJSPぺージを処理するかどうかを指定します。
trueの場合、リクエストごとにスレッドを使用してリクエストが処理されます。
falseの場合、リクエストごとにスレッドは使用されずに、1つのリクエストが処理中は、別のリクエストの処理はその処理が終了するまで待機させられます。
デフォルトはtrueです。

以下の例を複数のブラウザを起動して同時にアクセスすると、スレッドが1ずつでしか処理されない事が分かります。
2つ目のリクエストの終了までには最大で10秒程度かかります。
<%@ page isThreadSafe="false"  %>
<%
    Thread.sleep(5000);
%>
1リクエストずつしか処理されません。



<%@ page info="info_text" %>

JSPページの情報を記述します。任意の情報を記述します。
情報を設定するだけで、JSPページの動作に影響を与えるものではありません。
この値はServlet.getServletInfoで取得可能です。



<%@ page errorPage="error_url" %>

JSPページ内でキャッチされないExceptionが発生した場合に、遷移するエラー処理用JSPページのパスを指定します。

<%@ page errorPage="/error.jsp" %>
<%
    String str = null;
    String sub = str.substring(1, 2); // NullPointerExceptionが発生する。
%>
上記の場合、/error.jspへ遷移します。



<%@ page isErrorPage="true|false" %>

エラー処理用のJSPページであるかどうかを指定します。
errorPageで指定されたエラー処理用JSPページである場合はtrueを指定します。
trueを指定した場合、暗黙オブジェクト「exception」が使用可能になります。
暗黙オブジェクト「exception」は、遷移前のページにて発生したExceptionのオブジェクトになります。

sample.jsp
<%@ page errorPage="/error.jsp" %>
<%
    String str = null;
    String sub = str.substring(1, 2); // NullPointerExceptionが発生する。
%>
error.jsp
<%@ page isErrorPage="true" %>
エラーが発生しました。<%= exception.toString() %>



<%@ page contentType="ctinfo" %>

レスポンスのMIMEタイプと、ページ出力の際に使用する文字コードを指定します。
日本語のページを作成する際は、この属性とpageEncoding属性を正しく設定しないと文字化けを起こしてしまいます。

.jspファイルをWindows-31J(MS932)で作成し、クライアントへWindows-31J(MS932)で出力する場合
<%@ page contentType="text/html; charset=Windows-31J" pageEncoding="Windows-31J" %>

.jspファイルをWindows-31J(MS932)で作成し、クライアントへUTF-8で出力する場合
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="Windows-31J" %>



<%@ page pageEncoding="peinfo" %>

.jspファイルを作成した文字コード名を指定します。

日本語のページを作成する際は、この属性とcontentType属性を正しく設定しないと文字化けを起こしてしまいます。

省略した場合はcontentTypeのcharset=xxxで指定した文字コードが適用されます。



<%@ page isELIgnored="true|false" %>

EL式をJSPページ内で有効にするかどうかを指定します。
trueを指定した場合、EL式の記述は無効になります。
デフォルトはfalse(EL式は有効)です。

<%@ page isELIgnored="false" %>
${1 + 1}
※ 2と表示される

<%@ page isELIgnored="true" %>
${1 + 1}
※ ${1 + 1}と表示される



<%@ page deferredSyntaxAllowedAsLiteral="true|false" %>

#{xxx}といった記述を、文字列として出力を許可する場合にtrueを指定します。
デフォルトはfalseです。

JSFの記述
<h:inputTextarea value="#{xxx.xxx}"/>
はtrueであってもfalseであっても問題ありませんが
falseの場合
#{xxx.xxx}
といったようにタグ属性値ではなく、JSP中に直接#{}記述がある場合にExceptionが発生します。



<%@ page trimDirectiveWhitespaces="true|false" %>

ディレクティブ行の改行や空白を除去する場合にtrueを指定します。
デフォルトはfalseです。

<%@ page trimDirectiveWhitespaces="false" %>
<%@ page import="java.util.List" %>
<%@ page import="java.io.InputStream" %>
Contents
  ↓
(改行)
(改行)
(改行)
Contents


<%@ page trimDirectiveWhitespaces="true" %>
<%@ page import="java.util.List" %> 
<%@ page import="java.io.InputStream" %>
Contents
  ↓
(改行)
Contents




JSPのメニューへ戻る