ヘッダーをスキップ

Oracle Containers for J2EE サーブレット開発者ガイド
10g(10.1.3.1.0)

B31859-01
目次
目次
索引
索引

戻る 次へ

1 サーブレットの概要

Oracle Containers for J2EE(OC4J)を使用すると、標準J2EE準拠のアプリケーションを開発およびデプロイできます。アプリケーションは、標準Enterprise Archive(EAR)デプロイメント・ファイルにパッケージされており、Webモジュールをデプロイするための標準Web Archive(WAR)ファイル、リソース・アダプタ用のResource Adapter Archive(RAR)ファイル、ならびにアプリケーション内のEnterprise JavaBeans(EJB)およびアプリケーション・クライアント・モジュール用のJava archive(JAR)ファイルが含まれます。

Oracle Application Server 10g(10.1.3.1.0)では、OC4Jは、Java 2 Platform Enterprise Editionバージョン1.4に準拠し、OC4Jコンテナ内ではSun社のJavaサーブレット仕様、バージョン2.4に完全に準拠しています。(特に記載のないかぎり、このマニュアルではサーブレット仕様はこのバージョンを指します。)


注意

このリリースのサーブレットは、HTTP/1.1およびJava 2 Standard Edition(J2SE)1.3以上を必要とします。 


この章では、サーブレット・テクノロジの概要を示し、最後にサーブレットの機能を表にまとめます。この章には、次の項が含まれます。

サーブレットの仕様は、次のサイトを参照してください。

http://java.sun.com/products/servlet/reference/api/index.html


注意

サンプルのサーブレット・アプリケーションはOC4Jのデモに含まれています。デモは、Oracle Technology Networkの次のサイトから入手可能です(OTNのメンバーシップ登録が必要ですが、登録は無料です)。

http://www.oracle.com/technology/tech/java/oc4j/demos/index.html
 

サーブレットおよびJ2EEテクノロジのサマリー

次の項では、サーブレットおよびその他のJ2EEテクノロジの概要を説明します。

サーブレットの基礎知識

近年、サーブレット・テクノロジは、動的Webページを使用してWebサーバー機能を拡張する強力な手段として登場しました。サーブレットは、Webサーバーで稼働するJavaプログラムです。一方、アプレットはクライアント・ブラウザで稼働します。通常、サーブレットは、ブラウザからHTTPリクエストを取得し、データベース問合せなどによって動的コンテンツを生成し、HTTPレスポンスをブラウザに返します。または、直接別のアプリケーション・コンポーネントからアクセスされるか、または別のコンポーネントに出力を送信する場合もあります。ほとんどのサーブレットはHTMLテキストを生成しますが、かわりにXMLを生成してデータをカプセル化するサーブレットもあります。

具体的には、サーブレットは、OC4JなどのJ2EEアプリケーション・サーバーで稼働します。サーブレットは、JavaServer Pages(JSP)およびEnterprise JavaBeans(EJB)と同様、J2EEアプリケーションの主要なアプリケーション・コンポーネント・タイプの1つです。JSPやEJBも、サーバー・サイドJ2EEコンポーネント・タイプです。サーブレットは、アプレット(Java 2 Platform, Standard Edition仕様の一部)などのクライアント・サイド・コンポーネントやアプリケーションのクライアント・プログラムとともに使用されます。 アプリケーションは、任意の数のコンポーネントで構成できます。

サーブレット以前は、動的コンテンツの作成に、Common Gateway Interface(CGI)が使用されていました。CGIプログラムは、Perlなどの言語で記述され、WebアプリケーションによってWebサーバーを介してコールされます。しかし、CGIはアーキテクチャやスケーラビリティに制限があるため、理想的なプログラムでないことが実証されました。

サーブレットを使用する理由

Javaレルムでは、サーブレット・テクノロジは、データベースにアクセスするアプリケーションなどのサーバー集中型アプリケーションの場合、アプレット・テクノロジより利点があります。サーバーで実行することの利点の1つは、サーバーが通常多くのリソースを持つ堅牢なマシンであるため、プログラムがよりスケーラブルになることです。サーバーで実行すると、より直接的にデータにアクセスすることもできます。サーブレットが稼働中のWebサーバーは、アクセス対象データと同様に、ネットワーク・ファイアウォールの内側にあります。

サーブレットのプログラミングには、サーバー・サイドのWebアプリケーション開発における初期のモデルと比べると、次のような多くの利点もあります。

サーブレットは、Javaプログラミング言語で記述されているため、Java Virtual Machine(JVM)を持つすべてのプラットフォーム、およびサーブレットをサポートしているすべてのWebサーバーでサポートされます。サーブレットは、再コンパイルせずに別のプラットフォーム上で使用できます。サーブレットをグラフィックス、サウンドおよび他のデータなどの関連するファイルとともにパッケージングして、完全なWebアプリケーションを作成することができます。パッケージングによって、アプリケーションの開発とデプロイが簡素化されます。

さらに、サーブレット・ベースのアプリケーションを他のWebサーバーからOC4Jに簡単に移植できます。J2EE準拠のWebブラウザ用に開発されたアプリケーションの場合、移植の手間は最小限で済みます。

サーブレットのライフ・サイクル

サーブレットには、予測可能で管理可能なライフ・サイクルが存在します。

JSPページおよびその他のJ2EEコンポーネント・タイプ

アプリケーションには、サーブレットに加えて、JSPページやEJBなどのサーバー・サイド・コンポーネントを組み込むことができます。サーブレットは、OC4Jサーブレット・コンテナによって管理されます。一方、EJBはOC4J EJBコンテナ、JSPページはOC4J JSPコンテナによって管理されます。これらのコンテナはOC4Jの中核を形成します。

サーブレットとJSPページは、特に密接に対応しています。 サーブレットとJSPページは、ともに「Webコンポーネント」と呼ばれ、どちらもweb.xmlファイルを使用して構成されます。JSPページの変換時にJSPコンテナによって作成されるJSPページ実装クラスは、実際にはサーブレットであり、他のサーブレットと同じようにjavax.servlet.Servletインタフェースを実装しています。JSPページとサーブレットは、Webアプリケーションを作成する際に、透過的に併用することができます。

サーブレットまたはJSPページは、しばしば、後続の処理を実行するためにEJBをコールします。一般的なJ2EEアプリケーションは、ユーザー・インタフェースやユーザー・リクエストの初期処理にサーブレットまたはJSPページを使用し、EJBをコールしてビジネス・ロジックやデータベース・アクセスを実行します。


注意

このマニュアルでサーブレットに適用する機能について説明している部分はすべて、特に記載がないかぎりJSPページにも同様に適用されます。 


JSPページとEJBの詳細は、次のマニュアルを参照してください。

サーブレット・モデルの主要コンポーネントおよびAPI

この項では、サーブレット・モデルの重要なコンポーネントとプログラミング・インタフェースをまとめます。この項には、次の内容が含まれます。

この項で説明するAPIの詳細は、次のサイトでSun社のjavax.servletおよびjavax.servlet.httpパッケージのJavadocを参照してください。

http://java.sun.com/j2ee/1.4/docs/api/index.html

サーブレット・インタフェースの主要メソッド

Javaサーブレットは、当然javax.servlet.Servletインタフェースを実装しています。このインタフェースは、サーブレットの初期化、リクエストの処理、サーブレットの構成情報や他の基本情報の取得、およびサービスからのサーブレット・インスタンスの削除などを行うメソッドを指定します。

Webアプリケーションの場合は、javax.servlet.http.HttpServlet抽象クラスを拡張して、Servletインタフェースを実装できます。このクラスは、Webサイトに適したHTTPサーブレット用で、Servletインタフェースを実装するjavax.servlet.GenericServletクラスを拡張します。

HttpServletクラスには、次のメソッドが含まれています。これらのメソッドは、サーブレットの実行時に、必要に応じて、OC4Jサーブレット・コンテナによってコールされます(この章の後半を参照)。また、これらのどのメソッドについても、必要に応じて、コードを作成してオーバーライドすることによって、サーブレットで機能を提供することができます。 「サーブレット・インタフェースのメソッドを実装する場面」を参照してください。

次のメソッドもあります。

サーブレット通信: リクエスト・オブジェクトおよびレスポンス・オブジェクト

前の項で説明した、HTTP操作のdoGet()doPost()doPut()およびdoDelete()を処理するサーブレット・メソッドは、HTTPリクエスト・オブジェクト(javax.servlet.ServletRequestインタフェースを拡張するjavax.servlet.http.HttpServletRequestインタフェースを実装するクラスのインスタンス)とHTTPレスポンス・オブジェクト(javax.servlet.ServletResponseインタフェースを拡張するjavax.servlet.http.HttpServletResponseインタフェースを実装するクラスのインスタンス)を入力として取得します。

リクエスト・オブジェクトは、サーブレットにHTTPリクエストに関する情報を提供します。情報には、リクエスト・パラメータ名と値、リクエストを作成したリモート・ホスト名、リクエストを受信したサーバー名などが含まれます。レスポンス・オブジェクトは、レスポンスの送信時に、コンテンツ長とMIMEタイプの指定および出力ストリームの指定など、HTTP固有の機能を提供します。

HttpServletRequestインタフェースの主要メソッド

この項では、HTTPリクエスト・オブジェクトに関係のあるメソッドをまとめます。 いくつかのメソッドの使用例は、「HTMLフォームおよびリクエスト・パラメータの使用方法」を参照してください。

次のメソッドは、HttpServletRequestインタフェースで定義されます。

次のメソッドは、ServletRequestインタフェースから継承されます。

HttpServletResponseインタフェースの主要メソッド

この項では、HTTPレスポンス・オブジェクトに関係のあるメソッドをまとめます。 詳細は、「レスポンスの設定」を参照してください。

次のメソッドは、HttpServletResponseインタフェースで定義されます。

次のメソッドは、ServletResponseインタフェースから継承されます。

サーブレット・コンテナでのサーブレット実行

Javaクライアント・プログラムとは異なり、サーブレットには静的なmain()メソッドがありません。したがって、サーブレットは、外部コンテナの制御下で実行する必要があります。

サーブレット・コンテナは、サーブレット・エンジンとも呼ばれ、サーブレットの実行と管理を行います。サーブレット・コンテナは、サーブレット・メソッドをコールし、サーブレットの実行中に必要なサービスを提供します。サーブレット・コンテナは通常Javaで作成し、Webサーバーに組み込むか(WebサーバーもJavaで作成されている場合)、Webサーバーに関連付けて使用します。OC4Jには、完全な標準準拠のサーブレット・コンテナが組み込まれます。

サーブレット・コンテナにより、サーブレットは、ヘッダーやパラメータなどHTTPリクエストのプロパティに容易にアクセスできます。URLによる指定などでサーブレットがコールされると、Webサーバーは、HTTPリクエストをサーブレット・コンテナに渡します。コンテナは、次に、そのリクエストをサーブレットに渡します。サーブレットの管理で、サーブレット・コンテナは、次のタスクを実行します。

図1-1に、サーブレットがサーブレット・コンテナおよびWebブラウザなどのクライアントとどのように関連するかを示します。

図1-1    サーブレットおよびサーブレット・コンテナ


画像の説明

JavaオブジェクトおよびEnterprise JavaBeans(EJB)をリレーショナル・データベースに格納、およびJavaオブジェクトとXML文書(JAXB)の間の変換用メカニズムを提供するJavaのオブジェクトとリレーショナル間の永続性アーキテクチャであるOracle TopLinkを使用することにより、サーブレットでJ2EE永続性を使用できます。 TopLinkを使用して、永続性およびオブジェクト変換をアプリケーションに統合する方法の詳細は、『Oracle TopLink開発者ガイド』を参照してください。

サーブレット構成オブジェクト

サーブレット構成オブジェクトには、サーブレットの初期化および起動パラメータが含まれます。このオブジェクトは、javax.servlet.ServletConfigインタフェースを実装するクラスのインスタンスです。このクラスは、任意のJ2EE準拠のWebサーバーにより提供されます。

サーブレット構成オブジェクトの取得

サーブレットは、サーブレットのgetServletConfig()メソッドを使用して、サーブレット構成オブジェクトを取得することができます。このメソッドはjavax.servlet.Servletインタフェースで指定されており、javax.servlet.http.HttpServletクラスでデフォルトが実装されています。

サーブレットのinit()メソッドは、入力としてServletConfigオブジェクトを取得します。このため、init()メソッドをオーバーライドすると、サーブレットは、サーブレット・コンテナがサーブレットの実行時に作成して渡すサーブレット構成オブジェクトにアクセスします。

サーブレット構成の主要メソッド

ServletConfigインタフェースは、次のメソッドを指定します。

サーブレット・コンテキスト: アプリケーション・コンテナ

サーブレット・コンテキストは、単一JVM内のWebアプリケーションの全インスタンス(つまり、Webアプリケーションに含まれる全サーブレットとJSPページ・インスタンス)に関する情報を保持するために使用します。任意のJVM内で稼働するWebアプリケーションごとに1つのサーブレット・コンテキストがあります。これは常に1対1の設定です。サーブレット・コンテキストは、特定のアプリケーションのコンテナと考えられます。

サーブレット・コンテキストの基本

サーブレット・コンテキストは、javax.servlet.ServletContextインタフェースを実装するクラスのインスタンスです。このクラスは、サーブレットをサポートするWebサーバーに含まれています。

ServletContextオブジェクトは、サーブレット環境に関する情報(サーバー名など)を提供し、単一JVM内のグループのサーブレット間でリソースを共有できるようにします。(同時に複数のJVMをサポートしているサーブレット・コンテナの場合、リソース共有の実装は一様ではありません。)

サーブレット・コンテキストは、アプリケーションの実行インスタンスに対してスコープを設定します。このメカニズムによって、各アプリケーションは別個のクラスローダーからロードされ、その実行時オブジェクトは他のアプリケーションのオブジェクトとは明確に区別されます。特に、ServletContextオブジェクトはアプリケーションごとに異なります。これは、各HttpSessionオブジェクトがそのアプリケーションのユーザーごとに異なるのと同じです。

サーブレット仕様のバージョン2.2から、ほとんどの実装で単一ホスト内に複数のサーブレット・コンテキストを設定できます。そのため、各Webアプリケーションが独自のサーブレット・コンテキストを持つことができます。(以前の実装では、任意のホストに設定できるサーブレット・コンテキストは1つのみでした。)

サーブレット・コンテキストの取得

サーブレットは、サーブレット構成オブジェクトのgetServletContext()メソッドを使用して、サーブレット・コンテキストを取得することができます。 「サーブレット構成オブジェクト」を参照してください。

サーブレット・コンテキストの主要メソッド

ServletContextインタフェースは、サーブレットにそのサーブレットを実行するサーブレット・コンテナとの通信を許可するメソッドを指定します。この方法によって、サーブレットはアプリケーション・レベルの環境と状態情報を取得できます。ServletContextでは、次のようなメソッドが指定されます。

サーブレット・セッション(ユーザー・セッション)の使用目的

HTTPプロトコルは、設計上ステートレスです。これは、単にリクエストを取得し、簡単な処理を行って結果を出力した後に消滅するような、ステートレスなサーブレットについては問題ありません。ただし、ほとんどのサーバー・サイド・アプリケーションでは、状態情報を保持してクライアントとの対話を続ける必要があります。このような場合の最も一般的な例は、ショッピング・カートのアプリケーションです。クライアント・ユーザーは、同じブラウザから何度かサーバーにアクセスして、いくつかのWebページを表示します。クライアント・ユーザーは、Webサイトで販売されているいくつかのアイテムの購入を決め、「製品の購入」ボタンをクリックします。各トランザクションがステートレスなサーバー・サイド・オブジェクトで処理されており、各リクエストに対してクライアントから識別情報が提供されない場合、クライアントからの複数のHTTPリクエストに渡ってショッピング・カートの中身を維持することはできません。このケースでは、クライアントをサーバー・セッションに関連付ける手段がないため、ステートレスなトランザクション・データを永続性のある記憶域に書き込んでも問題は解決されません。

セッション・トラッキングは、ユーザー・セッションを識別し、ユーザーのすべてのリクエストをそのユーザーのセッションに適切に関連付けます。このプロセスは通常CookieまたはURLリライティングによって実行されます。

標準サーブレットAPIでは、各ユーザー・セッションは、javax.servlet.http.HttpSessionインタフェースを実装するクラスのインスタンスによって表されます。

詳細は、第3章「サーブレット・セッションの理解および使用方法」を参照してください。

サーブレットのスレッド・モデル

非分散環境のサーブレットでは、サーブレット・コンテナは1回のサーブレット宣言当たり1つのサーブレット・インスタンスのみ使用します。分散環境では、コンテナは各JVMの1回のサーブレット宣言当たり1つのサーブレット・インスタンスを使用します。したがって、OC4Jサーブレット・コンテナを含めたサーブレット・コンテナがサーブレットに対する同時リクエストを処理するには、一般的に複数のスレッドを使用してサーブレットの主要メソッドのservice()を同時に複数実行します。

サーブレットの開発者は、この点を念頭に置き、複数のスレッドによる同時処理用の措置を講じ、共有リソースへのアクセスが同期化または調整されるよう、サーブレットを設計する必要があります。 詳細は、「スレッド・モデルの考慮事項」を参照してください。

サーブレットの機能の表

表1-1は、このマニュアルで説明しているサーブレット開発機能(前述のものを含む)と情報の相互参照をまとめたものです。サーブレット2.4仕様で追加された機能が注記されています。

表1-1    最新リリースのサーブレットの機能 
機能  情報 

リクエスト・オブジェクトおよびレスポンス・オブジェクト 

「サーブレット通信: リクエスト・オブジェクトおよびレスポンス・オブジェクト」 

サーブレット・コンテナ 

「サーブレット・コンテナでのサーブレット実行」 

サーブレット構成オブジェクト 

「サーブレット構成オブジェクト」 

サーブレット・コンテキスト 

「サーブレット・コンテキスト: アプリケーション・コンテナ」 

セッション 

「サーブレット・セッション(ユーザー・セッション)の使用目的」の概要、第3章「サーブレット・セッションの理解および使用方法」の詳細 

インクルードおよび転送 

「インクルードおよび転送による他のサーブレットへのディスパッチ」 

サーブレット・フィルタ 

「前処理および後処理のためにフィルタを使用する場面」の概要、第4章「サーブレット・フィルタの理解および使用方法」の詳細

注意: インクルードまたは転送ターゲットとともにフィルタを使用する機能は、サーブレット2.4仕様で追加されました。 

イベント・リスナー 

「サーブレット通知にイベント・リスナーを使用する場面」の概要、第5章「イベント・リスナーの理解および使用方法」の詳細

注意: (サーブレット・コンテキストやセッション・リスナーとは異なる)リクエスト・リスナーのサポートは、サーブレット2.4仕様で追加されました。 

JDBCおよびデータソースの使用 

「サーブレットでのJDBCの使用方法」 

EJBの使用 

「Enterprise JavaBeansの概要」 


戻る 次へ
Oracle
Copyright © 2006 Oracle Corporation.

All Rights Reserved.
目次
目次
索引
索引