このヒントを使用して、JavaServer Pages の問題をトラブルシューティングします。
WebSphere Application Server の文書ルートを Web サーバーの文書ルートと共用している場合は、Web サーバーが JavaServer Pages (JSP) ソース・ファイルをプレーン・テキストとして表示してしまうことによる、機密漏れが発生する恐れがあります。
問題
WebSphere Web サーバー・プラグインを使用 すると、要求を WebSphere Application Server が処理するかどうかを決定する規則を設定できます。受信する要求 がルールに一致しない場合には、Web サーバー・プラグインは制御を Web サーバーに返し 、Web サーバーは要求を実行できます。 この場合、未知のホスト・ヘッダーに対しては、ルールによって WebSphere Application Server が処理すべきであるとは判定されないため、Web サーバー・プラグインは制御を Web サーバーに返します。その結果、Web サーバーは Web サーバー 文書ルート内で要求を探します。JSP ソース・ファイルは Web サーバーの文書ルート 内に保管されるため、Web サーバーはファイルを検索し、プレーン・テキストと して表示します。
推奨される解決法
WebSphere Application Server JSP ソース・ ファイルを Web サーバー文書ルート外に 移動します。 すると、この要求が未知のホスト・ヘッダーと共に来た場合には、プラグ インは制御を Web サーバーに返し、JSP ソース・ファイルは文書ルート内に は見つかりません。その結果、Web サーバーは JSP ソースではなく、404 File Not Found エラーを返します。
@include ディレクティブを使用する JavaServer Pages ファイルで 2 バイト文字セット (DBCS) 文字を表示すると、問題が発生する可能性があります。WebSphere Application Server バージョン 6.0 以降にマイグレーションされた一部のアプリケーションでは、 後方互換性の問題から JSP 2.0 仕様に準拠するように変更する必要がある場合があります。 JSP 2.0 仕様では、静的に組み込まれた各リソースがページ・エンコードまたはコンテンツ・タイプを設定することが必要です。 これは、1 つのファイルの中に include ディレクティブを使用する別のファイルが含まれている場合でも、各ファイルの文字エンコードは別々に決定されるためです。
Extension Processor [class com.ibm.ws.jsp.webcontainerext.JSPExtensionProcessor] was initialized successfully. Extension Processor [class com.ibm.ws.jsp.webcontainerext.JSPExtensionProcessor] has been associated with patterns [*.jsp *.jspx *.jsw *.jsv ].JSP プロセッサーがロードに失敗した場合、以下のようなメッセージが表示されます。
No Extension Processor found for handling JSPs. JSP Processor not defined. Skipping : jspfilename.in the root_dir/logs/server_name/SystemOut.log file
Message: /filename.jsp(2,1)JSPG0076E: Missing required attribute page for jsp element jsp:includeこの例では、指定された JavaServer Pages ファイルの 2 行目の列 1、jsp:include action で、必須属性が欠落していることが示されています。他の構文エラーの場合にも、同様なメッセージが表示されます。
JSPG0091E: An error occurred at line: 2 in the file: /myJsp.jsp JSPG0093E: Generated servlet error: c:¥WASROOT¥temp¥ ... test.war¥_myJsp.java:16: myInt is already defined in com.ibm.ws.jsp20._myJsp int myInt = 122; String myString = "number is 122"; static int myStaticInt=22; int myInt=121; ^ 1 error
JSP ファイル内のエラーを訂正して、ファイルを再試行します。
JSPG0091E: An error occurred at line: 2 in the file: /myJsp.jsp JSPG0093E: Generated servlet error: c:¥WASROOT¥temp¥ ... test.war¥_myJsp.java:16: myInt is already defined in com.ibm.ws.jsp20._myJsp int myInt = 122; String myString = "number is 122"; static int myStaticInt=22; int myInt=121; ^ 1 error
JSP ファイル内のエラーを訂正して、ファイルを再試行します。
症状 | プリコンパイルが選択されている際、管理コンソールでのデプロイメント中に JavaServer Pages がコンパイルに失敗します。
SystemErr R com.ibm.websphere.management.exception.AdminException: ADMA0021E: Error in compiling jsps - xyz.war (rc=1) |
問題 | どのクラスパスでも使用不可の別の Java アーカイブ (JAR) ファイルへの依存関係がある場合に、プリコンパイルが選択されていると、管理コンソールでのデプロイメント中に JavaServer Pages がコンパイルに失敗します。 |
推奨される解決法 | エンタープライズ・アプリケーションのデプロイメント中に JSP ファイルをプリコンパイルするために wsadmin スクリプトを使用することができます。
しかし、管理コンソールを使用するには、アプリケーションをパッケージ化する前に、すべての JSP ファイルをコンパイルします。
|
症状 | 以下のエラーが表示されます。
JSP 処理エラー HTTP エラー・コード: 500 エラー・メッセージ: /test.jsp(2,1) /test.jsp(2,1) JSPG0089E: ページ・ディレクティブ・エンコード Shift_JIS と xml prolog エンコード UTF-8 との間に不一致が検出されました。 |
問題 | jsp:directive.page エレメントの pageEncoding 属性が UTF-8 ではありません。 |
推奨される解決法 | JavaServer Pages では、ページ・ディレクティブで指定されたエンコード方式にマッチングする prolog を指定する必要があります。
以下に例を示します。
<?xml version="1.0" encoding="Shift_JIS"?> <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0"> <jsp:directive.page language="java" contentType="text/html"; charset=Shift_JIS" pageEncoding="Shift_JIS"/> <jsp:text>XXXXXjsp:text>XXXXX> </jsp:root> 追加情報については、JavaServer Pages 仕様の JSP.4.1 節「Page Character Encoding」および Extensible Markup Language (XML) 仕様の 4.3.3 節および付録 F.1 を参照してください。 |
これらのステップで問題が解決されない場合は 、問題の診断および修正: 学習用リソースのリンクを使用して、問題が特定され、文書化されているかどうかを確認してください。 類似した問題が見つからない場合、 または提供されている情報では問題が解決されない場合は、IBM サポートに連絡してください。
IBM サポートから入手可能な既知の問題およびその解決法に関する最新の情報については、IBM サポート・ページを参照してください。 IBM サポート・ページが提供する資料を参照すれば、この問題を解決するために必要な情報を集める時間を節約することができます。