Oracle Containers for J2EE - Java Server Pages

ORACLE FUSION MODDLEWARE
faq
Oracle Application Server 10g
Oracle Containers for J2EE − Java Server Pages
Frequently Asked Questions
2005 年 11 月
この FAQ では、Oracle Containers for J2EE 10g(10.1.3)の JavaServer Pages(JSP)ついて、よく尋ねられる質問
を取り上げます。この FAQ は、次の 3 つのセクションからなります。
•
一般的な質問 − JSPテクノロジ
•
OC4J JSPコンテナ
•
JSPトラブルシューティング
一般的な質問 − JavaServer Pages テクノロジ
1.
JavaServer Pages テクノロジとは何ですか。
J2EE プラットフォームの一部である JavaServer Pages(TM)は、Web アプリケーションが出力するページ内に動
的コンテンツを生成する便利な方法として、Sun Microsystems によって仕様が定められたテクノロジです。Java
サーブレット・テクノロジと密結合したこのテクノロジを使用することにより、HTML コード(または XML な
ど、その他のマークアップ・コード)に Java コードおよび外部 Java コンポーネントへのコールを含めることが
できます。JavaServer Pages(JSP)テクノロジは、ビジネス・ロジックおよび JavaBeans や Enterprise JavaBeans
(EJBs)にカプセル化された動的機能のフロントエンドとして、適切に機能します。
JSP ページは、実行前に Java サーブレットに変換され、その他のサーブレットと同様、HTTP リクエストを処理
してレスポンスを生成します。JSP テクノロジはサーブレットをコーディングする、より便利な方法を提供しま
す。変換は通常、オンデマンドで、つまりアプリケーションの実行につれて発生します。JSP トランスレータは、
URL 内の.jsp ファイル名拡張子によってトリガーされます(SQLJ JSP ページ用に使用される.sqljsp 拡張子も JSP
トランスレータをトリガーします)。
JSP 構文要素の概要については、『OC4J JavaServer Pages 開発者ガイド』の第 1 章を参照してください。
1
JSP ページ・ソースはどのようなものですか。
2.
簡単な例を次に示します。
<HTML>
<HEAD><TITLE>The Welcome User JSP</TITLE></HEAD>
<BODY>
<% String user=request.getParameter ("user"); %>
<H3>Welcome <%= (user==null) ? "" : user %>!</H3>
<P><B> Today is <%= new java.util.Date () %>. Have a nice day! :-) </B></P>
<B>Enter name:</B>
<FORM METHOD=get>
<INPUT TYPE="text" NAME="user" SIZE=15>
<INPUT TYPE="submit" VALUE="Submit name">
</FORM>
</BODY>
</HTML>
ユーザーが「Amy」という名前を入力すると、この JSP ページは次のような行を出力します。
Welcome Amy!
Today is Wed Jun 21 13:42:23 PDT 2000. Have a nice day! :-)
JavaServer Pages テクノロジのメリットは何ですか。
3.
サーブレットに代わる JSP ページの使用は、ほとんどの状況において、少なくとも 2 つの一般的なメリットがあ
ります。
•
コーディングの利便性 − JSP 構文によりユーザーは、動的 Web ページのコーディングでショートカット
が可能になります。同等のサーブレットのコーディングより、大幅にコーディング量が減少します。JSP
トランスレータは、標準の JSP/サーブレット・インタフェースの実装および HTTP セッションの作成な
ど、いくつかのサーブレット・コーディングのオーバーヘッドも自動的に処理します。
•
静的コンテンツと動的コンテンツの分離 − JSP テクノロジにより、静的ページ・プレゼンテーションを
決定する HTML コードとビジネス・ロジックを処理して動的コンテンツを表現する Java コードとで、
別々に開発作業を行うことができます。したがって、Java に不慣れでも HTML に堪能なプレゼンテーシ
ョンやレイアウトの専門家と、HTML に不慣れでも Java に堪能なコード専門家とで、容易にメンテナン
スの責任を分担することができます。典型的な JSP ページでは、Java コードおよびビジネス・ロジック
のほとんどは JSP ページのコードに組み込まれず、JSP ページから呼び出される JavaBeans または
Enterprise JavaBeans に組み込まれます。
2
4.
JavaServer Pages テクノロジに関する一般情報とよくある質問について、他にどのような
リソースがありますか。
Sun Microsystems Web サイト:
http://java.sun.com/products/jsp/(一般情報と仕様)
http://java.sun.com/products/jsp/docs.html(JSP初心者ガイド)
その他の一般情報サイトとよくある質問(FAQ)サイト:
http://www.jspinsider.com/index.view
http://www.jspin.com/(JSP総合索引)
http://www.javasoft.com/products/jsp/faq.html(FAQリスト)
http://www.jguru.com/faq/JSP(FAQリスト)
Oracle Technology Network サイト(OTN アカウントが必要):
http://forums.oracle.com/forums/forum.jspa?forumID=46(パブリック・ディスカッション)
http://otn.oracle.com/tech/java/oc4j/content.html(OC4J ダウンロード、サンプル、資料)
http://technet.oracle.com/tech/java/servlets/(Oracle JSP Reference Implementationダウンロード)
OTN 上のドキュメント:
http://download-west.oracle.com/otn_hosted_doc/ias/preview/web.1013/b14430.pdf (OC4J
JavaServer Pages 開発者ガイド)
http://download-west.oracle.com/otn_hosted_doc/ias/preview/web.1013/b14425.pdf (OC4J JSP
タグ・ライブラリおよびユーティリティ・リファレンス)
5.
JavaServer Pages はサーブレットと相互運用可能ですか。
はい、JSP ページはサーブレットと完全な相互運用が可能です。JSP ページではサーブレットからの出力を含め
ること、または出力をサーブレットに転送することができます。サーブレットでは、JSP ページからの出力を含
めること、または出力を JSP ページに転送することができます。次に例を示します。
<jsp:include page="/servlet/MyServlet" flush="true" />
<jsp:forward page="/servlet/MyServlet" />
詳細は、『OC4J JavaServer Pages 開発者ガイド』の第 6 章の「Working With JSP」の項を参照してください。
6.
JSP ページから JavaBean(またはその他の Java クラス)をコールする方法を教えてくだ
さい。
標準の JSP useBean タグを使用して、JSP ページから JavaBean またはその他の Java クラスを実行します。次に例
を示します。
<jsp:useBean id="pageBean" class="mybeans.NameBean" scope="page" />
3
この例では、(引数なしのコンストラクタ経由で)mybeans.NameBean クラスのインスタンス、pageBean を作成
します。pageBean インスタンスは、現在の JSP ページ全体、つまりその有効範囲内で使用できます(その他に可
能な有効範囲は、リクエスト、セッションおよびアプリケーションです)。
次の例のように、後でそのページで pageBean を使用できます。
Hello <%= pageBean.getNewName () %> !
jsp:useBean タグは多数の標準 JSP「アクション」タグの 1 つで、次の一般形式のどちらかを使用します。
<jsp:tagname ... />
または
<jsp:tagname ... >
...
...
</jsp:tagname>
7.
JSP ページから Enterprise JavaBean(EJB)を呼び出す方法を教えてください。
JSP ページから EJB を呼び出すために必要な主な手順は、次のとおりです。
1)
EJB を呼び出す各 JSP ページに、ビーン・ホームおよびリモート・インタフェース用の EJB パッケージをイ
ンポートします(このために、JSP ページでページ・ディレクティブを使用します)。
2)
JNDI を使用して、EJB ホーム・インタフェースを探します。
3)
ホームから EJB リモート・オブジェクトを作成します。
4)
リモート・オブジェクトからビジネス・メソッドを起動します。
この手順は scriplet コードにより実行されます。さらに便利で適当なアプローチは、OC4J EJB タグ・ライブラリ
を使用する方法です。
8.
別のページを含める、または別のページに転送するための JavaServer Pages 機能はあり
ますか。
はい、このためのオプションがいくつかあります。
1)
次のように、「static include」と呼ばれるインクルード・ディレクティブが使用できます。
<%@ include file="/jsp/userinfopage.jsp" %>
これは、変換時に userinfopage.jsp のページ・ソースを呼出し側の JSP ページに効率的にコピーするため、呼
出し側のページのサイズを増大します(これは、C 言語の#include に似た性質を持っています)。
2)
次のように、「dynamic include」と呼ばれる jsp:include アクションを使用できます。
<jsp:include page="/jsp/userinfopage.jsp" flush="true" />
これは、userinfopage.jsp からの出力を呼出し側ページの出力内に含めて変換時ではなく実行時に機能し、リ
クエスト・ディスパッチャを介して処理されます。リクエスト・ディスパッチャへの呼出しを追加しますが、
呼出し側ページのサイズは増大しません(注意: JSP 1.0 および JSP 1.1 環境では、常に flush="true"である必要
がありますが、JSP 1.2 環境では必要ありません。)
3)
次のように jsp:forward アクションを使用できます。
<jsp:forward page="/jsp/userinfopage.jsp" />
4
呼出し側ページのコンテンツに単に userinfopage.jsp のコンテンツを含める代わりに、このコマンドは実際に
呼出し側ページの処理を停止し、実行を userinfopage.jsp に転送します。ブラウザに表示(フラッシュ)され
ていない呼出し側ページからの出力バッファの内容は、表示されないまま消去されます。
注意: jsp:forward もオリジナルの HTTP リクエスト・オブジェクトをターゲット・ページに転送します。これ
は、オリジナルのリクエスト・オブジェクトを転送せずにブラウザをトリガーして指定された URL へ進む、
HTTP レスポンス・オブジェクト、sendRedirect(String URL)の機能とは異なります。
これらのコマンドの詳細は、『OC4J JavaServer Pages 開発者ガイド』の第 1 章の「Directives」と「Standard
JSP Action Tags」の項を参照してください。
スタティック・インクルードとダイナミック・インクルードの機能的な違いの詳細は、『OC4J JavaServer
Pages 開発者ガイド』の第 6 章の「Using Static Includes Versus Dynamic Includes」の項を参照してください。
9.
JSP ページの代わりに、サーブレットまたは HTML ページを転送できますか。
はい、Servlet 2.1 以上を稼働する JSP 環境では、次の例のように、任意のページ転送(jsp:forward)文またはダイ
ナミック・インクルード(jsp:include)文に、JSP ページだけでなくサーブレット・クラスまたは HTML ページを
指定できます。
<jsp:include page="/servlets/MyServlet" flush="true" />
<jsp:forward page="/html/myfile.htm" />
JSP ページとサーブレット間の相互作用の詳細は、『OC4J JavaServer Pages 開発者ガイド』の第 6 章の「Working
with JSP」の項を参照してください。
10. 別のページへ転送するまたは別のページに含める場合に、HTTP リクエスト・パラメータを
ページ間で引き渡す方法を教えてください。
次の例のように、jsp:param タグを jsp:include または jsp:forward と併せて使用します。
<jsp:include page="/templates/userinfopage.jsp" flush="true" >
<jsp:param name="username" value="Smith" />
<jsp:param name="userempno" value="9876" />
</jsp:include>
または、次の例のように、jsp:include または jsp:forward で URL リライティングを使用します。
<jsp:include page="/templates/userinfopage.jsp?username=Smith&userempno=9876"
flush="true" />
11. バイナリ・データの処理または表示に、JSP ページを使用する必要がありますか。
いいえ。JSP テクノロジはバイナリ・データではなく、テキストの出力および表示用に設計されたものです。1
つには、JSP 出力ライター(javax.servlet.jsp.JspWriter インスタンス)に生データを書き込むメソッドがありませ
ん。また、JSP コンテナは実行中、タブ、改行、行送りなどのソース・コードの空白を保存します。バイナリ・
データではこのような空白は、データ内でエラーまたは問題を引き起こします。
グラフィックスまたはデータ BLOB などのバイナリ・データを扱う場合、代わりにサーブレットの使用をお薦め
します。
5
12. JSP「暗黙オブジェクト」とは何ですか。
JSP テクノロジにより、いずれの JSP ページでも暗黙オブジェクト・セットが使用できます。これらは、JSP メカ
ニズムによって自動的に作成され、基礎となるサーブレット環境との相互作用を可能にする Java クラス・インス
タンスです。
使用可能な暗黙オブジェクトは、次のとおりです。
•
ページ − JSP ページを表す JSP トランスレータによって生成された、ページ実装クラスのインスタンス
です。
•
リクエスト − HTTP リクエストを表す javax.servlet.http.HttpServletRequest インスタンスです。
•
レスポンス − HTTP レスポンスを表す javax.servlet.http.HttpServletResponse インスタンスです。
•
セッション − HTTP セッションを表す javax.servlet.http.HttpSession インスタンスです。
•
アプリケーション − Web アプリケーション用のサーブレット・コンテキストを表す
javax.servlet.ServletContext のインスタンスです。
•
Out − JSP ページからブラウザに出力を書き込むために使用されるオブジェクトであり、
javax.servlet.jsp.JspWriter のインスタンスです。
たとえば、次のコードを使用して HTTP リクエスト・オブジェクトからユーザー名を取得できます。
<% String user=request.getParameter("user"); %>
詳細は、『OC4J JavaServer Pages 開発者ガイド』の第1章の「暗黙オブジェクト」の項を参照してください。
13. 「JavaServer Pages Standard Tag Library (JSTL)」とは何ですか。また、OC4J JSP コ
ンテナはそれをどのようにサポートしていますか。
JSTL は、JSP ページにもっとも頻繁に含まれる多くの機能をカプセル化した広範なタグ・セットを提供します。
JSTL は、ページ作者の作業の簡素化を支援するために設計され、そのために長い間、JSP ページで Java スクリプ
ト・エレメントの必要性をなくすための努力をしてきました。
OC4J Web コンテナと Oracle Application Server 10g リリース 3(10.1.3)の組合せには、Sun Microsystems 社が指定
したように、JavaServer Pages Standard Tag Library、バージョン 1.1 の実装が含まれます。JSTL1.1 の完全な情報は、
次のサイトにある Sun Microsystems 社の仕様書を参照してください。
http://java.sun.com/products/jsp/jstl/
JSTL 1.1 の主な機能は次のとおりです。
•
式言語サポート、条件制御論理とフロー制御、イテレータ・アクションおよび URL ベース・リソースへ
のアクセス用のコア・タグ
•
XML 処理、フロー制御および XSLT 変換用のタグ
•
データベース・アクセス用の SQL タグ
•
I18N 対応の国際化およびフォーマット用のタグ(I18N は国際化標準を指す)
•
標準化された式言語機能をカプセル化するタグ、Expression Language(EL)式から呼び出すスタティッ
ク・メソッド
JSTL の詳細な取扱い方は、『OC4J JSP タグ・ライブラリおよびユーティリティ・リファレンス』の第 2 章を参
照してください。
6
14. 「カスタム・タグ・ライブラリ」とは何ですか。OC4J JSP コンテナはそれをどのように
サポートしますか。
JSP 1.1 仕様以降、標準の JavaServer Pages テクノロジを使用することにより、開発者およびベンダーはカスタム
JSP タグ・ライブラリを作成できます。タグ・ライブラリは、カスタム・アクションの集合を定義します。タグ
は、JSP ページを手動でコーディングすることで開発者が直接使用できます。または Java 開発ツールにより自動
的に使用できます。標準のタグ・ライブラリは、JSP 1.1 以上のコンテナ間で移植可能です。
OC4J JSP コンテナは、タグ・ライブラリ用に標準フレームワークをサポートして、顧客が独自のライブラリを構
築できるようにします。
また、OC4J JSP には、次のような多数の独自のカスタム・タグ・ライブラリがあります。
•
SQL 操作用の SQL タグ・ライブラリ(接続プーリングのサポートを含む)
•
キャッシング・タグ・ライブラリ
°
Edge Side Includes キャッシング用の JESI タグ・ライブラリ
°
JVM 内でキャッシングするための Web Object Cache タグ・ライブラリおよび API(部分的または中
間結果向き)
•
パーソナライズ・タグ・ライブラリ
•
ファイルをデータベースまたはファイル・システムにアップロード/ダウンロードするための File-Access
タグ・ライブラリ
•
SendMail タグ
•
XML DOM オブジェクトへ入力ストリームを変換および解析するための XML タグ
•
EJB タグ
•
Web Services タグ・ライブラリ
•
その他のユーティリティ・タグ
これらのタグ以外にも、Oracle AS リリース(9.0.4)には、Reports Tag Library、Wireless Location (Spatial) Tag
Library、Ultra Search Tag Library、Portal Tag Library、Multi-media Tag Library など、他のコンポーネントからの
JSP タグ・ライブラリが多数含まれています。
JSP タグ・ライブラリの詳細な取扱い方は、『OC4J JSP タグ・ライブラリおよびユーティリティ・リファレン
ス』を参照してください。
15. データベース・アクセス用に JavaServer Pages を使用する方法を教えてください。
データベース・アプリケーション向けの典型的なシナリオでは、JSP ページは JavaBean または Enterprise
JavaBean を呼出し、ビーンが直接または JDBC や SQLJ を介して間接的にデータベースにアクセスします(OC4J
JSP コンテナは JDBC をサポートします)。
さらに OC4J JSP コンテナには、データベース・アクセスをより便利にする次の機能もあります。
•
Oracle データベース・アクセス JavaBeans
•
SQL 用のタグ・ライブラリ
注意: Oracle JDBC 接続キャッシュ実装は、データベース・アクセス・ビーンズと一緒に使用できます。また、
dbopen SQL タグには、接続プーリングをサポートする属性データソースも含まれます。
これらの機能については、『OC4J JSP タグ・ライブラリおよびユーティリティ・リファレンス』の第 3 章を参照
してください。
7
16. JavaServer Faces(JSF)とは何ですか。
JavaServer Faces(JSF)は、Web アプリケーション開発の新しい標準 Java フレームワークです。Web ユーザー・
インタフェースの開発にコンポーネント中心の手法を利用して、アプリケーション開発を簡素化します。JSF は、
確立された Model-View-Controller(MVC)設計パターンをアーキテクチャに統合することで、確実に保守性を改
善し、アプリケーションの設計をより適切にします。JSF は Java Community Process(JCP)を介して開発された
Java 標準であるため、開発ツール・ベンダーは、Java Server Faces に対し使いやすいビジュアルおよび生産の開発
環境を提供します。
JSF 仕様は、それ自身非常に有用な基本 UI コンポーネント・セットを Reference Implentation(RI)に提供します。
ここにはコンポーネントの 2 つのライブラリが含まれます。国際化や入力データの検査/変換などの共通開発作業
を支援するコア・ライブラリと、それとともに標準の HTML 入力要素を大規模にミラーリングする HTML コン
ポーネント・ライブラリです。
JSF の完全情報については、次のサイトにある Sun Developer Network を参照してください。
http://java.sun.com/j2ee/javaserverfaces/
MyFaces は Apache Foundation 傘下のオープン・ソース・プロジェクトです。MyFaces は、Sun が提供する JSF RI
に代わる JSF 実装です。Oracle JDeveloper 10.1.3 Developer Preview には Sun RI に対するサポートが組み込まれて
います。JDeveloper 10.1.3 の本番リリースでは、開発者はデフォルト提供の RI を削除して、好みの JSF 実装を使
用できるようになります。
MyFaces の完全情報については、次のサイトにある Apache MyFaces Project を参照してください。
http://myfaces.apache.org/
8
OC4J JSP コンテナ − よくある質問(FAQ)
Oracle 10.1.3 Container for J2EE は、JSP2.0 をはじめとする J2EE 1.4 標準に準拠しています。
16. OC4J JSP Container の「付加価値」機能とは何ですか。
OC4J (10.1.3) JSP コンテナは JSP 2.0 標準に準拠し、複数の領域で拡張機能を提供します。
次の拡張機能は、標準ベースのタグ・ライブラリおよび JavaBeans を介して提供されるため、Oracle 以外の JSP
環境にも移植可能です。
•
指定された有効範囲(ページ、リクエスト、セッションまたはアプリケーション)を持つ JavaBeans と
して実装される拡張データ型
•
XML および XSL との統合
•
データベース・アクセス JavaBeans
•
特定の JSP 有効範囲(ページ、リクエスト、セッションまたはアプリケーション)のイベント用のイベ
ント・ハンドラ(JspScopeListener)
次の拡張機能は Oracle 固有です。
•
TLD キャッシング向けのサポート
•
拡張グローバライゼーションのサポート
•
コマンドライン・トランスレータ(たとえば、実行可能ファイルのみの配置など事前変換に使用され
る)
これらの機能については、『OC4J JavaServer Pages 開発者ガイド』の第 2 章に要約されています。
17. Oracle が提供する JSP デバッグ機能とは何ですか。
ページを事前に変換する場合、ojspc ユーティリティのデバッグ・オプションを使用して、デバッグ用の.jsp ファ
イルにマップする行を生成します。
デフォルトは true です。実行時例外が発生するごとにスタック・トレースを出力します。この機能を無効にする
場合は、false にセットしてください。
ojspc の詳細は、『OC4J JavaServer Pages 開発者ガイド』の第 4 章の「The ojspc Pre-Translation Tool」の項を参照
してください。
開発環境では、emit_debuginfo オプションを使用して、デバッグ用にオリジナルの.jsp ファイルにマップする行を
生成するよう JSP トランスレータに指示することができます(さもなければ、行のマッピングはトランスレータ
によって生成されたページ実装クラスに対して行われます)。デバッグ・オプションの設定方法の詳細は、
『OC4J JavaServer Pages 開発者ガイド』の第 3 章の「JSP Configuration Parameters」の項を参照してください。
Oracle JDeveloper リリース 3.1 以上を使用している場合、JSP ページ・ソースにブレークポイントをセットして
JSP ページから JavaBeans へのコールを追跡できます。詳細は、JDeveloper のオンライン・ヘルプを参照してくだ
さい。
9
18. 自動ページ再変換およびクラスの再ロードに関して、JSP コンテナはどのようなデフォル
ト動作をとりますか。
デフォルトのとき、JSP コンテナは、Web アプリケーションの実行時のページ再変換およびクラス再ロードに関
して、次の規則に従います。
•
JSP ページを自動的に再変換し、ページ・ソースの修正ごとに変換されたクラスを再ロードします。
•
ページの再変換ごと、またはページによって呼び出されたクラスが修正されるごと(クラスがシステ
ム・クラス・ローダーではなく OC4J JSP コンテナ・クラス・ローダーによってロードされたと仮定し
て)、または同じアプリケーション内の任意のページが再ロードされるごとに、JSP ページの変換済ク
ラスを自動的に再ロードします。
注意: クラスが WEB-INF/lib ディレクトリの JAR ファイル、WEB-INF/クラス・ディレクトリのクラス・ファイル、
または_pages トランスレータ出力ディレクトリにある場合、(システム・クラス・ローダーではなく)JSP クラ
ス・ローダーによってロードされます。
19. OC4J JSP コンテナに JSP ページの自動再コンパイルと Java クラスの再ロードをチェッ
クしないように指示する方法を教えてください。
JSP main_mode フラグを justrun にセットして、可能性のあるすべての再変換および再ロードに関するタイムスタ
ンプのチェックを回避します。これは実行速度を上げるのに役立つため、簡単にコードが変更されない開発環境
やパフォーマンスが重要な開発環境でお薦めします。
その他の main_mode 設定は次のとおりです。
•
再ロード − ディスパッチャが、変換済み JSP ページ、ページから呼び出された JavaBeans およびその他
の依存性クラスを含め、ローディング後に修正されたクラスがないかチェックします。
•
再コンパイル(デフォルト) − ディスパッチャが JSP ページのタイムスタンプをチェックし、ローディ
ング後に修正されていれば再変換して、再ロードし、すべての再ロード機能を実行します。
20. OC4J を使用する場合で JSP がサブディレクトリにあるとき、welcome-file-list に JSP フ
ァイルを追加する方法を教えてください。
web/jsp/one サブディレクトリで、ファイル名が xx.jsp であるとします。
標準の J2EE WAR フォーマットを使用して Web アプリケーションを配置します。次のように、デプロイメン
ト・ディスクリプタ(web.xml)の Welcome ファイル・リストにファイルを追加できます。
<welcome-file-list>
...
<welcome-file>web/jsp/one/xx.jsp</welcome-file>
...
</welcome-file-list>
ディレクトリ web/jsp/one は Web モジュールのホームと相対的な位置にあります。
21. JSP 用に生成されたサーブレット・コードを実行中に削除しないようにするには、OC4J
をどのように構成すればよいですか。
orion-web.xml ファイルの<orion-web-app>要素内の development を true にセットすると、生成されたコードが永続
ディレクトリに保存されます。
10
22. その他の Java コンパイラを使用して JSP をコンパイルする方法を教えてください。
javaccmd init パラメータを global-web-application.xml に追加することで、その他のコンパイラを使用して JSP をコ
ンパイルできます。
<init-param>
<param-name>javaccmd</param-name>
<param-value>/your-compiler-home/javac</param-value>
</init-param>
注意: サポートされている JDK のみがテストされ証明されます。
23. JSP ページで(グローバリゼーション用に)コンテンツ・タイプをセットする方法を教え
てください。
JSP ページのグローバリゼーション・コンテンツ・タイプは、静的(変換中)にまたは動的(実行時)にセット
できます。
JSP ページ・ディレクティブを使用すると、コンテンツ・タイプを静的にセットできます。ページ・ディレクテ
ィブは、変換および実行時に使用する命令を JSP エンジンに渡します。ページ・ディレクティブにはコンテン
ツ・タイプのほか、ページの言語、インポートするクラス、バッファ・サイズ、その他の様々な種類の命令など
が含まれます。詳細は、『OC4J JavaServer Pages Developer's Guide』の第 9 章を参照してください。
次に例を示します。
<%@ page ... contentType="text/html" %>
キャラクタ・セットも指定する場合は、次のようになります。
<%@ page ... contentType="text/html; charset=UTF-8" %>
いずれの場合も、実行時だけでなく変換時も機能します。
次の例のように、HTTP レスポンス・オブジェクトの setContentType()を(JSP scriptlet で)呼び出すことで、コン
テンツ・タイプを動的にセットできます。
<%
response.setContentType("text/html");
%>
キャラクタ・セットも指定する場合は、次のようになります。
<%
String s = "EUCJIS"; // or any other dynamic value
response.setContentType("text/html; charset=" + s);
%>
いずれの場合も実行時にのみ機能します。その場合、グローバリゼーション・キャラクタは変換時に解釈できな
いため、JSP ページ自体には、JVM のデフォルト・エンコーディングにあるグローバリゼーション・キャラクタ
以外のものを含むことはできません。なお、値をセットするときは実行時式が使用できます。ディレクティブは
変換時にも機能しますが、変換時には実行時式が算出されないため、ページ・ディレクティブでは実行時式は使
用できません。
注意: setContentType()コールはできるだけ JSP ページの先頭の近くに置き、バッファ・フラッシングに先行する
必要があります。
コンテンツ・タイプおよびその他のグローバリゼーションの考慮事項の詳細は、『OC4J JavaServer Pages 開発者
ガイド』の第 9 章を参照してください。
11
24. OC4J JSP コンテナは、JSP ページ内で動的に生成された XML の XSL 変換をサポートし
ますか。
はい、OC4J JSP コンテナは、JML 変換タグ(または同等の JML styleSheet タグ)を介してこの機能をサポートし
ます。
次に例を示します。
<?xml version="1.0"?>
<%@ page session = "false" %>
<%@ taglib uri="/WEB-INF/jmltaglib.tld" prefix="jml" %>
<jml:transform href="style/hello.xsl" >
<page>
<title>Hello</title>
<content>
<paragraph>This is my first XML/XSL file!</paragraph>
</content>
</page>
</jml:transform>
(jmltaglib.tld ファイルは、JSP トランスレータが適切な Java クラスを呼び出して変換タグを処理し、適切なプロ
セスをトリガーするために必要な情報を持つタグ・ライブラリ記述ファイルです。)
『OC4J JSP タグ・ライブラリおよびユーティリティ・リファレンス』の第 5 章の「XML and XSL tag Support」を
参照してください。
JSP トラブルシューティング
25. 使用中の OC4J のリリースをプログラムで確認する方法を教えてください。
特定の環境で使用する OC4J JSP コンテナのリリースを確認するには、次のように、JSP ページの暗黙アプリケー
ション・オブジェクトからリリース番号を検索します。
<%= application.getAttribute("oracle.jsp.versionNumber") %>
この他にバージョン番号を確認できる場所は、readme.txt ファイルまたは OC4J の起動時に表示される出力です。
バージョン番号は、バグの報告やサポートのために必要になることがよくあります。
26. JSP アプリケーション用にロギングを有効にする方法を教えてください。
application.log()(JSP 暗黙アプリケーション・オブジェクトの log()メソッド)を使用することにより、JSP のロギ
ングを有効にできます。これにより、サーブレット・エンジン・ログ・ファイルへのロギングが開始されます。
『OC4J User's Guide』の「Oracle 診断ロギング」の項も参照してください。
27. 問題が JSP コンテナにあるのかその他のコンポーネントにあるのかを実際に確認する方法
を教えてください。
サーブレットに同等のコードを書きます。問題がサーブレットで引き続き発生する場合、根本的な原因は JSP コ
ンテナではなく、サーブレット・コンテナまたは基礎のレイヤーにあります。
12
28. javax.servlet.ServletException 例外、"Unable to reload page"(たとえば、"Unable to
reload page: /jvv/jsppages/abc.jsp because not at top level")の原因は何ですか。その
修正方法を教えてください。
動的に含まれるページの再コンパイルおよび再ロードには制限があります。これに対処するには、最初に、含め
るページに直接アクセスする必要があります(ブラウザから直接開きます)。たとえば、def.jsp が jsp:include を
使用して abc.jsp を含める場合、最初にブラウザから直接 abc.jsp にアクセスすることで問題を回避できます。
29. 生成された Java メソッド・コードが 65535 バイトを超えます。対処方法はありますか。
この問題は、Java 仮想マシンの仕様限界です。一般に、小さい JSP を作成するのはよい考えです。JSP がタグ・
ライブラリを使用している場合、9.0.x の reduce_tag_code 構成パラメータも試すことができます。これにより、
タグ・ライブラリ呼出し用に生成されるコードの量は減少しますが、パフォーマンスに対し効果的です。
30.
OC4J(9.0.x)を使用している場合、JSP ページに重複するページ・ディレクティブがあ
ると「Attribute defined twice」というエラーが報告されます。これを回避する方法を教え
てください。
一連の J2EE 1.3 準拠テストは、ページ・ディレクティブの重複を認めていません。準拠するために、JSP コンテ
ナのデフォルト動作はページ・ディレクティブの重複を認めません。ただし、下位互換性の維持のために config
オプション、forgive_dup_dir_attr を追加しました。これを global-web-application.xml で true にセットして、重複デ
ィレクティブ属性のチェックを無効にできます。
31. OC4J 9.0.2/9.0.3 と一緒に JDK 1.4 を使用している場合、「Error: Invalid class file
format in D:\ProgramFiles\Java\j2re1.4.1_01\lib\rt.jar(java/lang/Object.class)
(major.minor バージョン '48.0' は最新版のため、このツールは理解できません)」と出
力されます。これを回避する方法を教えてください。
このエラーが出力される原因は、OC4J 9.0.2/9.0.3 で tools.jar の場所が、MANIFEST.MF のクラスパス
([OC4J_HOME]/jdk/lib/tools.jar を指す)にハードコードされているためです。JDK 1.4 から JVM と一緒に OC4J が
起動されると、OC4J は JDK 1.3 tools.jar から javac を使用しようとします。JDK 1.3 javac は JDK 1.4 ライブラリ
(たとえば、java.lang.Object)を理解できないため、先のエラー・メッセージが出力されます。この問題を回避す
る方法は、次のとおりです。
-
[OC4J_HOME]/jdk ディレクトリの名前を[OC4J_HOME]/jdk1.3 に変更します。
-
JDK 1.4 を[OC4J_HOME]/jdk にインストールします。
注意: jdkディレクトリは[OC4J_HOME]下で名前を指定する必要があります。
また、次の行を含めるために、jdk/jre/lib/security/java.security ファイルを編集する必要があります。
# Oracle specific definitions
auth.policy.provider=oracle.security.jazn.spi.PolicyProvider
login.configuration.provider=oracle.security.jazn.spi.LoginConfigProvider
OC4J JSP ドキュメント
Oracle Application Serverドキュメント・ライブラリ
http://otn.oracle.co.jp/document/products/as10g/index.html
13
Oracle Application Server 10g FAQ
2005 年 11 月
著者: Dana Singleterry
Oracle Corporation
World Headquarters
500 Oracle Parkway
Redwood Shores, CA 94065
U.S.A.
海外からのお問合せ窓口:
電話: +1.650.506.7000
ファックス: +1.650.506.7200
http://www.oracle.com/
Copyright © Oracle Corporation 2005. 無断転載を禁ず。
この文書はあくまで参考資料であり、掲載されている情報は予告なしに変更されることがあります。
オラクル社は、本ドキュメントの無謬性を保証しません。また、本ドキュメントは、法律で明示的または暗
黙的に記載されているかどうかに関係なく、商品性または特定の目的に対する適合性に関する暗黙の保証や
条件を含む一切の保証または条件に制約されません。オラクル社は、本書の内容に関していかなる保証もい
たしません。また、本書により、契約上の直接的および間接的義務も発生しません。本書は、事前の書面に
よる承諾を得ることなく、電子的または物理的に、いかなる形式や方法によっても再生または伝送すること
はできません。
Oracle はオラクル社またはオラクル社の関連会社(あるいはその両方)の登録商標です。その他の名前は、
各社の商標です。