| Oracle Containers for J2EE JavaServer Pages開発者ガイド 10g(10.1.3.1.0) B31860-01 |
|
この章では、JSPページをJavaサーブレット・コードに変換する、OC4J内部のJSPトランスレータの操作について説明します。次の各項では、JSPトランスレータの全般的な機能について、Oracle Application Serverでのオンデマンド変換の動作を中心に説明します。
OC4JのJSPトランスレータは、JSPページ実装クラスの標準Javaコードを生成します。このクラスは、基本的に、JSP機能が追加されたサーブレット・クラスです。
この項では、JSPトランスレータによってJSPソース(通常は.jspまたは.jspxファイル)から生成されるページ実装クラス・コードの一般的な機能について説明します。
JSPトランスレータは、ページ実装クラスのサーブレット・コードを生成するとき、標準のプログラミング・オーバーヘッドの一部を自動的に処理します。オンデマンド変換モデルと事前変換モデルの両方について、生成されたコードには、自動的に次の機能が含まれます。
javax.servlet.jsp.HttpJspPageインタフェースを実装したWebコンテナから提供されるラッパー・クラスを拡張します。これによって、より汎用的なjavax.servlet.jsp.JspPageインタフェースが拡張され、さらにjavax.servlet.Servletインタフェースが拡張されます。
HttpJspPageインタフェースで指定される_jspService()メソッドを実装します。このメソッドは、サービス・メソッドと呼ばれ、ページ実装クラスの中心的なメソッドです。Javaスクリプトレットからのコード、式、およびJSPページ内のJSPタグは、このメソッド実装に組み込まれます。
pageディレクティブでsession="false"を特に設定しないかぎり、HTTPセッションをリクエストするコードが含まれます。
ページ実装クラスのサービス・メソッドの_jspService()には、JSPページの静的なテキストを出力するための出力文(out.print()または暗黙的なoutオブジェクトにある同等のコール)が含まれます。JSPトランスレータは、静的なテキスト自体をページ実装クラス内の一連のメンバー変数に格納します。サービス・メソッドのout.print()文は、テキストを出力するために、これらのメンバー変数の属性を参照します。
|
注意
|
JSPトランスレータは、一貫した一連の規則に従って、出力クラス、パッケージ、ファイルおよびディレクトリのネーミングを行います。ただし、この一連の規則と他の実装の詳細は、リリースによって変更される場合があります。
しかし、JSPページのベース名に特殊文字が含まれていなければ、ベース名がそのまま出力クラス名とファイル名に含まれるという点は、変更されません。たとえば、MyPage23.jspを変換すると、文字列「MyPage23」は常に、ページ実装クラス名、Javaソース・ファイル名およびクラス・ファイル名の一部になります。
ベース名の前にはアンダースコア(_)が付きます。MyPage23.jspを変換すると、ページ実装クラスの_MyPage23がソース・ファイルの_MyPage23.javaに作成され、_MyPage23.classにコンパイルされます。
同様に、Javaパッケージ名の作成でパス名が使用されている場合は、そのパスの各コンポーネントの前にアンダースコアが付きます。たとえば、/jspdir/myapp/MyPage23.jspを変換すると、_MyPage23クラスは次のパッケージ内に含まれます。
_jspdir._myapp
パッケージ名は、出力の.javaファイルと.classファイルのディレクトリの作成で使用されるため、出力ディレクトリ名にもアンダースコアが付きます。たとえば、webapp/testというディレクトリにあるJSPページを変換すると、JSPトランスレータは、デフォルトで、ページ実装クラス・ソースに対してwebappdeployment/_pages/_testというディレクトリを作成します。「生成されるファイルとその格納場所」で説明するように、すべての出力ディレクトリは、標準の_pagesディレクトリの下に作成されます。
JSPページ名またはパス名に特殊文字を使用している場合、JSPトランスレータは、出力クラス名、パッケージ名およびファイル名に不正なJava特殊文字が含まれていないことを確認します。
たとえば、My-name_foo2.jspを変換すると、_My_2d_name__foo2という名前のクラスがソース・ファイルの_My_2d_name__foo2.javaに作成されます。ハイフンは、英数字の文字列に変換されます。(「foo2」の前には追加のアンダースコアも挿入されます。)
この場合、JSPページ名の英数字部分のみが、出力のクラス名とファイル名にそのまま含まれます。この例では、「My」、「name」または「foo2」が含まれます。
.jspxファイルの場合に生成されるソース・ファイルとクラス・ファイルの名前も同様ですが、名前には_jspxが追加されます。たとえば、MyPage.jspを変換すると、ソース・ファイルが_MyPage_jspx.javaとなり、これが_MyPage_jspx.classにコンパイルされます。
これらの規則の例は、この章で後述します。
JSP仕様には、JSPテキストを解析して変換するための統一プロセスが定義されていますが、生成されるクラスの命名方法は説明されていません。クラスの命名方法は、各JSP実装によって異なります。
この項では、変換時にコードを生成するとき、OC4JのJSPトランスレータが行うパッケージ名とクラス名の作成方法について説明します。
オンデマンド変換の場合は、ユーザーがJSPページのリクエスト時に指定するURLパス(具体的には、ドキュメント・ルートまたはアプリケーション・ルートに対して相対的なパス)によって、生成されるページ実装クラスのパッケージ名が決定します。URLパス内の各ディレクトリは、パッケージ階層のレベルを表します。
ただし、生成されるパッケージ名は、URL内の文字の大小に関係なく、常に小文字になります。
次のURLの例を考えてみます。
http://host:port/HR/expenses/login.jsp
この結果、現行のOC4JのJSP実装における、生成されたコードのパッケージ仕様は次のとおりです。
package _hr._expenses;
(実装の詳細は、今後のリリースで変更される場合があります。)
JSPページがアプリケーション・ルート・ディレクトリにある場合、パッケージ名は生成されません。この場合のURLは、次のとおりです。
http://host:port/login.jsp
.jspファイルのベース名によって、生成されるコード内のクラス名が決定します。
次のURLの例を考えてみます。
http://host:port/HR/expenses/UserLogin.jsp
現行のOC4JのJSP実装における、生成されたコードのクラス名は次のとおりです。
public class _UserLogin extends ...
(実装の詳細は、今後のリリースで変更される場合があります。)
ユーザーがURLに指定する文字は、実際の.jspファイル名と大/小文字が一致する必要があります。たとえば、実際のファイル名がUserLogin.jspまたはuserlogin.jspである場合、エンド・ユーザーは、それぞれの名前をそのまま指定できますが、実際のファイル名がUserLogin.jspの場合、userlogin.jspは指定できません。
現在のトランスレータは、ファイル名の大/小文字に従ってクラス名の大/小文字を区別しています。次に例を示します。
UserLogin.jspは、クラスでは_UserLoginになります。
Userlogin.jspは、クラスでは_Userloginになります。
userlogin.jspは、クラスでは_userloginになります。
クラス名の大/小文字を区別する場合は、それに従って.jspファイル名を付ける必要があります。ただし、ページ実装クラスはエンド・ユーザーに表示されないため、通常は問題になりません。
この項では、オンデマンド変換の場合にJSPトランスレータで生成されるファイルとその格納場所について説明します。(プリコンパイルの場合は、ojspcによるファイルの格納方法が異なり、固有の関連オプションがあります。詳細は、第4章「ojspcによるJSPページのプリコンパイル」を参照してください。)
ファイル名の例では、変換されるファイルの名前として、Foo.jspを使用します。
ソース・ファイル
バイナリ・ファイル
.classファイルは、Javaコンパイラによって、ページ実装クラスに対して作成されます。デフォルトでのJavaコンパイラはJDK javacですが、JSP javaccmd構成パラメータを使用して別のコンパイラを指定できます。javaccmdパラメータは、Oracle Containers for J2EE 10g(10.1.3.1.0)では推奨されていません。
.res Javaリソース・ファイル(_Foo.resなど)は、external_resource JSP構成パラメータが有効な場合、静的なページのコンテンツに対して必要に応じて作成されます。JSPトランスレータは、生成された出力ファイルを_pagesディレクトリに格納します。このディレクトリは、JSPキャッシュ・ディレクトリの下に作成されます。JSPキャッシュ・ディレクトリは、global-web-application.xmlファイルまたはアプリケーションのorion-web.xmlファイルの<orion-web-app>要素のjsp-cache-directory属性に指定されます。jsp-cache-directoryのデフォルトの./persistence値を想定している場合は、一般的に、次の場所が基本になります。
ORACLE_HOME/j2ee/home/app-deployment/app-name/web-app-name/persistence/_pages/...
スタンドアロンOC4Jでは、次の場所がOC4Jがインストールされた場所に対して相対的になります。
j2ee/home/app-deployment/app-name/web-app-name/persistence/pages/...
次の点に注意してください。
app-deploymentディレクトリはOC4Jのデプロイ・ディレクトリで、OC4Jのserver.xmlファイルに指定されています。(スタンドアロンOC4Jでは、一般的には、application-deploymentsディレクトリです。)
app-nameはアプリケーション名で、server.xmlの<application>要素に従います。
web-app-nameは対応するWebアプリケーション名で、OC4J WebサイトのXMLファイル(通常、Oracle Application Serverではdefault-web-site.xmlファイル、スタンドアロンOC4Jではhttp-web-site.xmlファイル)内の<web-app>要素のアプリケーション名にマッピングされます。
_pagesディレクトリ下のパスは、アプリケーション・ルート・ディレクトリ下の.jspファイルのパスによって決まります。
たとえば、スタンドアロンOC4Jで、スタンドアロンOC4JのデフォルトのWebアプリケーション・ディレクトリの下のexamples/jspサブディレクトリにあるwelcome.jspページについて考えてみます。このページへのパスは次のようになり、OC4Jがインストールされた場所に対して相対的です。
j2ee/home/default-web-app/examples/jsp/welcome.jsp
デフォルトのアプリケーション・デプロイ・ディレクトリの場合、JSPトランスレータは、出力ファイル(_welcome.javaおよび_welcome.class)を次のディレクトリに格納します。
j2ee/home/application-deployments/default/defaultWebApp/persistence/_pages/_examples/
_jsp
.jspソース・ファイルは、アプリケーション・ルート・ディレクトリ下のexamples/jspサブディレクトリに格納されているため、JSPトランスレータは、パッケージ名として_examples._jspを生成し、出力ファイルを_pagesディレクトリ下の_examples/_jspサブディレクトリに格納します。
OC4JのWebコンテナでは、グローバル・インクルードと呼ばれる機能が提供されています。この機能によって、仮想のJSP includeディレクティブを使用して、指定のディレクトリ内またはディレクトリ下のJSPページに静的にインクルードする1つ以上のファイルを指定できます。変換時に、Webコンテナは、インクルード・ファイルとディレクトリをページに指定する構成ファイル/WEB-INF/ojsp-global-include.xmlを検索します。
この機能は、以前のOracle JSPリリースでglobals.jsaまたはtranslate_params機能を使用していたアプリケーションを移行する場合に、特に便利です。
Oracleのグローバル・インクルード機能は、JSP 2.0仕様以前のものです。この機能は仕様に盛り込まれたため、移植性を考慮して、新規開発ではJSP仕様のメカニズムを使用することを強くお薦めします。
将来のリリースではOracleのグローバル・インクルード機能が推奨されなくなる可能性があります。
グローバルにインクルードされたファイルは、次の場合などに使用できます。
この項では、ojsp-global-include.xmlファイルの概要およびいくつかの例を示します。
ojsp-global-include.xmlファイルは、インクルードするファイルの名前、ファイルのインクルード先(JSPページの最上部または最下部)、およびグローバル・インクルードを適用するJSPページの場所を指定します。この項では、ojsp-global-include.xmlの要素について説明します。
ojsp-global-include.xmlファイルのルート要素です。属性はありません。
<ojsp-global-include>のサブ要素は次のとおりです。
<include>
<ojsp-global-include>の<include>サブ要素を使用して、インクルードするファイル、およびインクルード先がJSPページの最上部かまたは最下部かを指定します。
<include>のサブ要素は次のとおりです。
<into>
<include>の属性は次のとおりです。
file: /header.htmlや/WEB-INF/globalbeandeclarations.jsphなどのインクルードするファイルを指定します。ファイル名の設定は、必ずスラッシュ(/)で始まります。つまり、ファイル名はページ相対ではなく、アプリケーション相対であることが必要です。
position: ファイルのインクルード先がJSPページの最上部かまたは最下部かを指定します。サポートされている値は、top(デフォルト)とbottomです。
<include>のこのサブ要素を使用して、指定ファイルのインクルード先JSPページの場所(ディレクトリ、場合によってはサブディレクトリ)を指定します。この要素にサブ要素はありません。
<into>の属性は次のとおりです。
directory: ディレクトリを指定します。このディレクトリ内(必要に応じてそのサブディレクトリ内)にあるJSPページは、<include>要素のfile属性に指定されているファイルを、静的にインクルードします。directoryの設定値は、/dirのように、スラッシュ(/)で始まる必要があります。また、/dir/のように、設定値のディレクトリ名の後にスラッシュを付けることができます。付けない場合は、変換時に内部で追加されます。
subdir: directoryのすべてのサブディレクトリ内にあるJSPページに、ファイルの静的なインクルードが必要かどうかを指定します。サポートされている値は、true(デフォルト)とfalseです。
この項では、グローバル・インクルードの例を示します。
次のojsp-global-include.xmlファイルの例を考えてみます。
<?xml version="1.0" standalone='no'?> <!DOCTYPE ojsp-global-include SYSTEM 'ojsp-global-include.dtd'> <ojsp-global-include> <include file="/header.html"> <into directory="/dir" /> </include> <include file="/footer.html" position="bottom"> <into directory="/dir" subdir="false" /> <into directory="/dir/part/" subdir="false" /> </include> <include file="/footer2.html" position="bottom"> <into directory="/dir/part2/" subdir="false" /> </include> </ojsp-global-include>
この例には、次の3つの目的があります。
header.htmlファイルは、dirディレクトリ内またはその下にあるJSPページの最上部にインクルードされます。結果は、このディレクトリ内またはその下にある各.jspファイルのページの最上部に次のincludeディレクティブがある場合と同じになります。
<%@ include file="/header.html" %>
footer.htmlファイルは、dirディレクトリまたはそのpartサブディレクトリにあるJSPページの最下部にインクルードされます。結果は、これらのディレクトリ内にある各.jspファイルのページの最下部に次のincludeディレクティブがある場合と同じになります。
<%@ include file="/footer.html" %>
footer2.htmlファイルは、dirディレクトリのpart2サブディレクトリにあるJSPページの最下部にインクルードされます。結果は、このディレクトリ内にある各.jspファイルのページの最下部に次のincludeディレクティブが含まれている場合と同じになります。
<%@ include file="/footer2.html" %>
次のojsp-global-include.xmlファイルの例を考えてみます。
<?xml version=".0" standalone='yes'?> <!DOCTYPE ojsp-global-include SYSTEM 'ojsp-global-include.dtd'> <ojsp-global-include> <include file="/WEB-INF/nls/params.jsf"> <into directory="/" /> </include> </ojsp-global-include>
params.jsfに、次のコードが含まれていると仮定します。
<% request.setCharacterEncoding(response.getCharacterEncoding()); %>
params.jsfファイル(基本的に、setCharacterEncoding()メソッド・コール)は、アプリケーション・ルート・ディレクトリ内またはその下にあるJSPページの最上部にインクルードされます。つまり、このファイルは、アプリケーション内のJSPページにインクルードされます。結果は、このディレクトリ内またはその下にある各.jspファイルのページの最上部に次のincludeディレクティブがある場合と同じになります。
<%@ include file="/WEB-INF/nls/parms.jsf" %>
|
![]() Copyright © 2007 Oracle Corporation. All Rights Reserved. |
|