この章では、JavaServer Pages(JSP)に対するJBossおよびOracle Application Server OC4Jのサポートについて説明します。具体的には、JSP APIについて説明します。
JavaServer Pagesは、Webサーバーで実行されているアプリケーションから動的なコンテンツを生成する方法として、Sun社によって規定されたテクノロジです。このテクノロジは、Javaサーブレット・テクノロジと密接に結びついています。このテクノロジを使用することで、ユーザーは、Javaコード・スニペットおよび外部JavaコンポーネントへのコールをWebページのHTMLコード(またはXMLなどのその他のマークアップ・コード)内に記述できます。
JSPページは、Javaサーブレットに変換されてから実行されます(通常はオンデマンドで変換されますが、事前に変換される場合もあります)。JSPページは、サーブレットとして、HTTPリクエストを処理し、レスポンスを生成します。JSPテクノロジによって、HTMLタグをサーブレットに埋め込まずに、サーブレットを簡単に記述する方法が提供されます。また、JSPページとサーブレットは完全に相互運用できます。つまり、JSPページにサーブレットの出力を含めたり、JSPページの出力をサーブレットに転送すること、およびサーブレットにJSPページの出力を含めたり、サーブレットの出力をJSPページに転送することができます。
通常、JSPページは次のもので構成されています。
ディレクティブ: インポートおよびインタフェース
宣言: クラス全体の変数およびメソッド
式: 戻り値の置換
スクリプトレット: インラインJavaコード
次に、それぞれについて説明します。
ディレクティブは、コンパイル時の制御タグです。これによって、JSPページをJavaサーブレットにコンパイルする方法をカスタマイズできます。ディレクティブには、次の3つのタイプがあります。
pageディレクティブは、JSPページの最上位に配置されます。このディレクティブの属性は、ページ全体に適用されます。
例:
<%@ page language="java" import="com.mycom.*" buffer="16k" %>
taglibディレクティブは、JSPプロセッサで認識されるタグ・セットを拡張します。このディレクティブには、uriおよびprefixの2つの属性が必要です。
例:
<%@ taglib uri="tag-lib-uri" prefix="tag-prefix" %>
uri属性には、タグ・ライブラリTLD(タグ・ライブラリ・ディスクリプタ)ファイルの場所を指定します。
prefix属性には、独自のカスタム・タグで使用するタグ接頭辞を指定します。
例:
<%@ taglib uri="/WEB-INF/tlds/myapp.tld" prefix="custom" %>
JSPコンテナは、JSPファイルとサーブレットの保存、JSPファイルからサーブレットへの変換、サーブレットのコンパイル、およびサーブレットの実行(HTMLの作成)を実行するソフトウェアです。JSPコンテナは、厳密には実装ごとに構成が異なりますが、1つのサーブレットまたはサーブレットの集合で構成されています。JSPコンテナは、サーブレット・コンテナによって実行されます。
JSPコンテナによって、各JSPファイルからサーブレットが作成され、コンパイルされます。また、JSPファイルごとに次の2つのファイルが生成されます。
.java
ファイル: サーブレットのJava言語コードが含まれています。
.class
ファイル: コンパイルされたサーブレットです。
.java
および.class
ファイルは、JSPコンテナによってコンテナ固有のパスに格納されます。.java
と.class
ファイルのファイル名は同じです。各コンテナで、生成される.java
および.class
ファイルに対してネーミング規則が使用されます。たとえば、JBossの場合、simple.jsp
というJSPファイルからは、_simple_xjsp.java
および_simple_xjsp.class
という名前のファイルが生成されます。
ユーザーが、.jsp
ファイル名で終わるURLを使用してJSPページをリクエストします。
URL内の.jsp
ファイル名拡張子が認識されると、Webサーバーのサーブレット・コンテナによってJSPコンテナが起動されます。
JSPコンテナによってJSPページが検索されます。JSPページに対するリクエストが初めての場合は、そのページが変換されます。
この変換では、.java
ファイル内にサーブレット・コードが生成された後、その.java
ファイルがコンパイルされてサーブレットの.class
ファイルが生成されます。
JSPトランスレータによって生成されたサーブレット・クラスによって、javax.servlet.jsp.HttpJspPage
インタフェースを実装するクラス(このクラスは、JSPコンテナによって提供される)がサブクラス化されます。
このサーブレット・クラスは、ページ実装クラスと呼ばれます。このドキュメントでは、ページ実装クラスのインスタンスをJSPページ・インスタンスと呼びます。
JBoss 3.2.6では、JSP 1.0がサポートされています。
Oracle Application Serverには、業界で最速のJSPエンジンの1つが搭載されています。また、Oracle Application Serverでは、グローバリゼーション、SQLJなどの付加価値の高い機能および拡張機能も提供されています。Oracle9iAS 1.0.2.2(Oracle Application ServerのOC4Jを導入した最初のリリース)には、2つのJSPコンテナがありました。オラクル社が開発したコンテナ(旧称OracleJSP)およびIronflare ABからライセンスを付与されたコンテナ(旧称Orion JSPコンテナ)です。
Oracle Application Server 10g では、これらのコンテナがOC4J JSPコンテナと呼ばれる単一のJSPコンテナに統合されています。この新しいコンテナには、両方の旧バージョンの主要機能が継承されています。このコンテナは、OC4Jサーブレット・コンテナ内でサーブレットとして効率的に動作し、他のOC4Jコンテナと密接に統合されています。この統合されたコンテナは、OracleJSPトランスレータ、および簡略化された新しいディスパッチャとOC4J 1.0.2.2のコア・ランタイム・クラスとともに実行されるOrionコンテナ・ランタイムで主に構成されています。その結果、標準のJSP仕様を超える機能を備えた、業界でも最速のJSPエンジンの1つとなりました。
OC4J JSPでは、他のJSP環境に通常は移植可能なカスタム・タグ・ライブラリ、カスタムJavaBeansおよびカスタム・クラスによって、次の拡張機能が提供されています。
有効範囲を指定可能なJavaBeansとして実装される拡張タイプ。
イベント処理用のJspScopeListener
。
カスタム・タグを使用したXMLおよびXSLとの統合。
データ・アクセスJavaBeans
Oracle JSP Markup Language(JML)カスタム・タグ・ライブラリ。これによって、JSPの開発に必要なJavaについての高度な知識は要求されなくなります。
OC4J JSPには、接続プーリング・タグ、XMLタグ、EJBタグ、ファイル・アクセス・タグ、電子メール・タグ、キャッシュ・タグ、OracleAS Personalizationタグ、OracleAS Ultrasearchタグ、およびSQL機能用のカスタム・タグ・ライブラリが含まれています。
コンテンツ配信ネットワークのエッジ・サーバーで動作し、Webコンテンツに最適のキャッシュ・ソリューションを提供するJESI(Edge Side Includes for Java)タグ、Web Object CacheタグおよびAPI(後続の各項を参照)。
関連項目: JSPカスタム・タグ・ライブラリの詳細は、『Oracle Containers for J2EE JSPタグ・ライブラリおよびユーティリティ・リファレンス』を参照してください。 |
OC4J JSPコンテナでは、自動ページ再コンパイルとクラス再ロードのモード切替え機能、JSPインスタンスのプーリング、タグ・ハンドラ・インスタンスのプーリングなどの重要な機能も提供されています。
OC4Jのファイングレイン制御によって、開発者は、JSPページの断片を個々のタグにキャッシュできます。これらの断片は、OracleAS Web Cacheにキャッシュ可能で、JSPが変更されると自動的に無効化およびリフレッシュされます。この機能を支えるテクノロジは、Edge Side Includes(ESI)というW3C標準のXMLスキーマ(マークアップ言語)です。このテクノロジによって、動的コンテンツをWeb Cacheにキャッシュしたり、エッジ・ネットワーク上でアセンブルすることが可能になります。この動的コンテンツをキャッシュすることによって、JSPまたはサーブレットを実行する必要性が低くなるため、パフォーマンスが向上し、アプリケーション・サーバーの負荷が軽減され、待機時間が短縮されます。JESI(JSP用のESI)タグは、Edge Side Includes(ESI)フレームワークの最上位レイヤーに位置し、JSPアプリケーションにESIのキャッシュ機能を提供します。JESIタグを使用すると、JSPページの動的コンテンツをキャッシュ可能なコンポーネントまたは断片に分割できます。
Web Object Cacheは、Oracle Application Serverの機能の1つです。この機能によって、JSPまたはサーブレットによって生成された部分的な中間結果を、Javaで記述されたWebアプリケーションで取得、保存、再利用、後処理および維持することが可能になります。Web Object Cacheでは、プログラミング・インタフェース用としてタグ・ライブラリ(JSPページで使用)およびJava API(サーブレットで使用)が提供されています。キャッシュされたオブジェクトは、HTMLの断片、XMLの断片、XML DOMオブジェクト、またはJavaのシリアライズ可能オブジェクトで構成されます。これらのオブジェクトをメモリー内にキャッシュしておくことで、キャッシュされたオブジェクトに対して次のような様々な操作を実行できます。
ユーザー・プロファイルまたはデバイス特性に基づく異なるXSLTを、格納済のXMLに適用する操作
HTTP以外(クライアントに電子メールを送信するためのSMTPなど)でキャッシュ・オブジェクトを再利用する操作
Oracle JDeveloperは、JSPアプリケーションの開発サイクル全体(編集、ソース・レベル・デバッグおよびJSPページの実行)をサポートするためにOC4J JSPコンテナと統合されています。Oracle JDeveloperでは、広範なデータ対応およびWeb対応のJavaBeans(JDeveloper Web Beans)、および事前定義済のWeb Beansをページに簡単に追加できるJSPエレメント・ウィザードも提供されています。また、開発者にとって非常に有効な独自の機能も提供されています。JDeveloperでは、JSPページ・ソース内にブレーク・ポイントを設定して、JSPページからJavaBeansに対するコールを追跡できます。この方法は、JSPページ内にprint文を追加し、状態をレスポンス・ストリームに出力してブラウザに表示したり、サーバー・ログに記録する方法などの手動によるデバッグ方法よりはるかに有効です。