Hitachi

Cosminexus V11 アプリケーションサーバ 機能解説 基本・開発編(Webコンテナ)


2.3.7 page/tagディレクティブのimport属性暗黙インポート

JSP仕様では,JSPをコンパイルする際に次のクラスを暗黙にインポートします。

page/tagディレクティブのimport属性暗黙インポート機能を使用すると,上記のクラス以外の任意のクラスを暗黙にインポートできます。

〈この項の構成〉

(1) 暗黙インポートするクラスの指定方法

ここでは,page/tagディレクティブのimport属性暗黙インポート機能の指定方法について説明します。page/tagディレクティブのimport属性暗黙インポート機能は,J2EEサーバでJSPをコンパイルする場合,またはcjjspcコマンドでJSPをコンパイルする場合に使用できます。

暗黙にインポートしたいクラスは,完全修飾名のクラス名,または「パッケージ名.*」で指定します。複数のクラス名を指定する場合は,クラス名とクラス名の間をコンマ(,)で区切って指定してください。存在しないクラス名や,クラスパスに誤りがあるクラス名などを指定した場合は,JSPコンパイル時にKDJE39143-Eのメッセージが出力されます。

(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.*