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.3 簡易構築定義ファイル」を参照してください。
-
cjjspcコマンドでJSP事前コンパイルする場合
cjjspcコマンドの-addimportオプションで暗黙にインポートしたいクラスを指定します。
コマンドの詳細については,マニュアル「アプリケーションサーバ リファレンス コマンド編」の「cjjspc(JSPの事前コンパイル)」を参照してください。
(2) インポート文の出力順序
JSPコンパイル時に,javaファイルに出力されるインポート文の順番を次に示します。
-
JSP仕様で規定されているクラスのインポート文
-
java.lang.*
-
javax.servlet.*
-
javax.servlet.jsp.*
-
javax.servlet.http.*
-
-
page/tagディレクティブのimport属性に指定されたクラスのインポート文
-
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.*