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