2.3 JSP の実行機能
2.3.7 page/tag ディレクティブの import 属性暗黙インポート
JSP 仕様では,JSP をコンパイルする際に次のクラスを暗黙にインポートします。
• java.lang.*
• javax.servlet.*
• javax.servlet.jsp.*
• javax.servlet.http.*
page/tag ディレクティブの import 属性暗黙インポート機能を使用すると,上記のクラス以外の任意のク ラスを暗黙にインポートできます。
(1) 暗黙インポートするクラスの指定方法
ここでは,page/tag ディレクティブの import 属性暗黙インポート機能の指定方法について説明します。
page/tag ディレクティブの import 属性暗黙インポート機能は,J2EE サーバで JSP をコンパイルする場 合,または cjjspc コマンドで JSP をコンパイルする場合に使用できます。
暗黙にインポートしたいクラスは,完全修飾名のクラス名,または「パッケージ名.*」で指定します。複数 のクラス名を指定する場合は,クラス名とクラス名の間をコンマ(,)で区切って指定してください。存在 しないクラス名や,クラスパスに誤りがあるクラス名などを指定した場合は,JSP コンパイル時に KDJE39143-E のメッセージが出力されます。
• J2EE サーバで JSP をコンパイルする場合
簡易構築定義ファイルの webserver.jsp.additional.import.list キーに暗黙にインポートしたいクラス を指定します。
簡易構築定義ファイル,および指定するパラメタの詳細については,マニュアル「アプリケーション サーバ リファレンス 定義編(サーバ定義)」の「4.6 簡易構築定義ファイル」を参照してください。
• cjjspc コマンドで JSP 事前コンパイルする場合
cjjspc コマンドの-addimport オプションで暗黙にインポートしたいクラスを指定します。
コマンドの詳細については,マニュアル「アプリケーションサーバ リファレンス コマンド編」の「cjjspc
(JSP の事前コンパイル)」を参照してください。
(2) インポート文の出力順序
JSP コンパイル時に,java ファイルに出力されるインポート文の順番を次に示します。
1. JSP 仕様で規定されているクラスのインポート文
• java.lang.*
• javax.servlet.*
• javax.servlet.jsp.*
• javax.servlet.http.*
2. page/tag ディレクティブの import 属性に指定されたクラスのインポート文
3. page/tag ディレクティブの import 属性暗黙インポート機能で指定したクラスのインポート文
(3) 注意事項
(a) cjjspc コマンドで JSP 事前コンパイルした JSP ファイル
page/tag ディレクティブの import 属性暗黙インポート機能は,JSP コンパイル時に動作します。cjjspc コマンドで JSP 事前コンパイルした場合,JSP 事前コンパイルした Web アプリケーションに対して,簡易 構築定義ファイルの webserver.jsp.additional.import.list キーに指定したクラスは暗黙にインポートされ ません。そのため,cjjspc コマンドで JSP 事前コンパイルする場合に,page/tag ディレクティブの import 属性暗黙インポート機能を使用するときは,cjjspc コマンドに-addimport オプションを指定して Web ア プリケーションを JSP 事前コンパイルしてください。
(b) J2EE サーバ内に複数の Web アプリケーションが存在する場合
簡易構築定義ファイルの webserver.jsp.additional.import.list キーに指定したクラスは,cjjspc コマンド で JSP 事前コンパイルされていない J2EE サーバ内のすべての Web アプリケーションに対して有効にな ります。Web アプリケーションごとに異なるクラスを指定したい場合は,cjjspc コマンドに-addimport オプションを指定して Web アプリケーションを JSP 事前コンパイルしてください。
(c) JSP 事前コンパイル後の再コンパイル
次の条件をすべて満たす場合は,再コンパイル時に KDJE39143-E のメッセージが出力されます。そのた め,cjjspc コマンドに-addimport オプションを指定して JSP 事前コンパイルした Web アプリケーション を使用する場合は,簡易構築定義ファイルの webserver.jsp.additional.import.list キーに cjjspc コマンド の-addimport オプションに指定したクラス名と同じクラス名を指定してください。
• JSP ファイル内で完全修飾名のクラス名でクラスを定義していない。
• cjjspc コマンドの-addimport オプションに暗黙にインポートするクラス名を指定して JSP 事前コンパ イルする。
• 簡易構築定義ファイルの webserver.jsp.additional.import.list キーに,cjjspc コマンドの-addimport オプションに指定した暗黙にインポートするクラスと異なるクラス名を指定する。または,
webserver.jsp.additional.import.list キーを省略するか,webserver.jsp.additional.import.list キーに 空文字を指定する。
• J2EE サーバ上で JSP 事前コンパイルした Web アプリケーションが再コンパイルされる。
(d) 同名のクラスが存在するクラス名を指定した場合
page/tag ディレクティブの import 属性暗黙インポート機能で指定したクラス名と,JSP 仕様で規定され たインポート対象のパッケージ内のクラス名や page/tag ディレクティブの import 属性に指定されたク ラス名が重複する場合,JSP コンパイル時にコンパイルエラーとなり,KDJE39143-E のメッセージが出力 されることがあります。
JSP コンパイル時にコンパイルエラーとなるケースの具体例について説明します。なお,具体例では,次の クラス名が存在していることを前提としています。
• packageA.classA
• packageB.classA
● 異なるパッケージからのインポートクラス名が重複した場合 具体例について説明します。
次の指定内容の場合,複数のパッケージから同名のクラスをインポートしようとしているため,JSP コンパ イル時にエラーとなります。
ファイルの種類 指定内容 JSP ファイル <%@page import="packageA.classA" %>
簡易構築定義ファイル webserver.jsp.additional.import.list=packageB.classA
● JSP ファイル内で使用するクラスのインポート元パッケージが特定できない場合 具体例について説明します。
次の指定内容の場合,JSP ファイル内で使用している「classA」が,「packageA.classA」または
「packageB.classA」のどちらかを特定できないため,JSP コンパイル時にエラーとなります。
ファイルの種類 指定内容
JSP ファイル <%@page import="packageA.*" %>
<% System.out.println(classA.method1()); %>
簡易構築定義ファイル webserver.jsp.additional.import.list=packageB.*