9章 ウェブ アプリケーション (Web Applications)

 

ウェブ アプリケーションとは、サーブレット、HTMLページ、クラス、および他のバンドル可能な資源の集まりであり、複数のベンダの複数のコンテナ上で走る。ウェブ アプリケーションはウェブ サーバのなかの特定のパスのルート化される。例えば、カタログのアプリケーションは、http://www.mycorp.com/catalogなるパスに配置され得る。このプレフィックスで始まる全ての要求はカタログのアプリケーションを代表するServletContextへ転送される。

 

サーブレットコンテナはまた、ウェブ アプリケーションの自動生成のルールを確立することも可能である。例えば、~user/ マッピングは/home/user/public_html/にベースがあるウェブ アプリケーションにマッピングするのに使える。

 

デフォルトとしては、ウェブ アプリケーションのインスタンスはどの時刻においてもひとつのVM上でしか走ってはいけない。この振舞いは、そのアプリケーションがそのデプロイメントディスクリプタで「配布可能(distributable)」とマークされていればそれにオーバライドされる。あるアプリケーションが配布可能とマークされているとき、開発者は通常のウェブアプリケーションで課せられているよりももっと厳しい制約の規則のセットに従わねばならない。これらの特定の規則は本仕様書のなかの各所に記されている。

 

 

9.1 ServletContextとの関係 (Relationship to ServletContext)

 

サーブレットコンテナはウェブアプリケーションとServletContextとの11の対応をとらねばならない。ServletContextオブジェクトはそのアプリケーションへのサーブレットから見た投影図と見ることが出来る。

 

 

9.2 ウェブ アプリケーションの要素 (Elements of a Web Application)

 

ウェブ アプリケーションは以下のアイテムからなる:

 

-     サーブレット

-     JavaServerページ1

-     ユーティリティのクラス

-     スタティックなドキュメント(HTML、イメージ、サウンド、等)

-     クライアント側へのアプレット、ビーンズ、およびクラス

-     上記の全ての要素をともにつなぐ記述型メタ情報

 

1http://java.sun.com/products/jspから得られるJavaServerページの仕様を参照のこと

 

 

9.3 リプレゼンテーション間の区別 (Distinction Between Representations)

 

本仕様書では、オープンなファイル システム、アーカイブ ファイル、あるいは導入の目的のための幾つかの他の形式に存在可能なような階層構造を定義している。サーブレット コンテナは、ランタイムのリプレゼンテーションとしてこの構造をサポートすることを勧告するが、これは要求事項ではない。

 

 

9.4 ディレクトリ構造 (Directory Structure)

 

ウェブ アプリケーションは、構造化階層のディレクトリとして存在する。この階層のルータは、このコンテキストの部分である支援ファイルとしてのドキュメントのルートとなる。例えば、ウェブ サーバの/catalogに配置されたウェブ アプリケーションはでは、ウェブ アプリケーション階層のベースに配置されたindex.htmlファイルは、/catalog/index.htmlへの要求を満足させる。

 

特別なディレクトリとして、”WEB-INF”と名づけられたディレクトリがそのアプリケーションの階層に存在する。このディレクトリは、そのアプリケーションのドキュメント ルートに存在しない、そのアプリケーションに関連する全てが含まれる。WEB-INFノードはそのアプリケーションのパブリックなドキュメントのトリーの部分ではないことに注意することが大切である。WEB-INFディレクトリに含まれるどのファイルも直接クライアントに使われることは無い。

 

WEB-INFディレクトリの中身は:

 

-     /WEB-INF/web.xml デプロイメントディスクリプタ

-     /WEB-INF/classes/* サーブレットとユーティリティのクラス。このディレクトリ内のこれらのクラスは、アプリケーション クラス ローダがそこからクラス ファイルをロードするのに使われる。

-     /WEB-INF/lib/*.jar Javaのアーカイブ ファイルのエリアで、サーブレット、ビーンズ、および他のそのアプリケーションに有用なユーティリティ クラスを含める。全てのこれらのアーカイブ ファイルはウェブ アプリケーション クラス ローダがそこからクラスをロードするのに使われる。

 

 

9.4.1 ウェブア プリケーション ディレクトリ構造の例 (Sample Web Application Directory Structure)

 

ここに示したのは、同じウェブ アプリケーション内の全てのファイルのリストである:

 

/index.html

/howto.jsp

/feedback.jsp

/images/banner.gif

/images/jumping.gif

/WEB-INF/web.xml

/WEB-INF/lib/jspbean.jar

/WEB-INF/classes/com/mycorp/servlets/Myservlet.class

/WEB-INF/classes/com/mycorp/util/MyUtils.class

 

 

9.5 ウェブ アプリケーション アーカイブ ファイル (Web Application Archive File)

 

ウェブ アプリケーションは標準のJavaのアーカイブ ツールを使ってウェブ アーカイブ フォーマット(war)のファイルにパッケージングされサインすることが出来る。例えば、問題追跡(issuue tracking)なるアプリケーションは、issuetrack.warなるファイル ネームのアーカイブで配布できる。

 

そのような形式でパッケージングされたとき、Javaアーカイブ ツールに有用な情報を含むMETA-INFなるディレクトリが現れる。このがディレクトリ生じたときは、サーブレット コンテナはそれをウェブ クライアントの要求へのコンテンツに使ってはならない。

 

9.6 ウェブ アプリケーション設定ディスクリプタ (Web Application Configuration Descriptor)

 

以下の種類の設定と導入の情報が、ウェブ アプリケーションデプロイメントディスクリプタ(ウェブ アプリケーション組入れ記述ファイル)のなかに存在する:

 

-     ServletContextInitパラメタ

-     セッションの設定

-     サーブレット/JSP定義

-     サーブレット/JSPマッピング

-     MIMEタイプ マッピング

-     ウエルカム ファイル リスト

-     エラー ページ

-     セキュリティ

 

全てのこれらの種類の情報はデプロイメント ディスクリプタで伝達される。(第13章「デプロイメント ディスクリプタ」を参照)

 

 

9.7 ウェブ アプリケーションの置換 (Replacing a Web Application)

 

アプリケーションは改善がなされるので、随時置換されねばならない。継続して走っているサーバにおいては、コンテナをリスタートすることなく新しいウェブ アプリケーションをロードし、古いアプリケーションをシャット ダウン出来ることが理想的である。アプリケーションが置換されたときは、コンテナはそのアプリケーション内でのセッションのデータを保存する堅固なアプローチを提供しなければならない。

 

 

9.8 誤り処理 (Error Handling)

 

ウェブ アプリケーションはエラーが発生したらそのアプリケーションの他のリソースを使うよう指定してもよい。これらのリソースはデプロイメントディスクリプタに規定されている(第13章「デプロイメントディスクリプタ」を参照)。もしも誤りハンドラの場所がサーブレットまたはJSPのときは、以下の要求の属性がセットされうる:

 

-     javax.servlet.error.status_code

-     javax.servlet.error.exception_type

-     javax.servlet.error.message

 

これらの属性により、サーブレットはステータ スコード、例外タイプ、およびエラー メッセージに基づいて特別のコンテンツを発生させることが出来る。

 

 

9.9 ウェブ アプリケーションの環境 (Web Application Environment)

 

Java 2プラットホーム エンタープライズ版v1.2では、外部情報がどのように名前付けされ組織化されているかの明示的な知識を必要としないで、アプリケーションが容易にリソースや外部情報をアクセスできるよう、名前付けの環境を定めている。

 

サーブレットはJ2EEの統合コンポネントのタイプで、サーブレットがリソースやエンタープライズ ビーンへの参照を取得することが出来るようにする情報を指定するウェブ アプリケーションデプロイメントディスクリプタの中で設定はなされている。この情報を含むデプロイメントエレメントは:

 

-     env-entry

-     enj-ref

-     resource-ref

 

env-entryエレメントは、java:comp/envコンテキストに相対な基本的な環境エントリ名、期待されるJavaタイプの環境エントリ値(JNDIルックアップ法で返されるオブジェクトの型)、及び付加的な環境エントリ値、をセットアップする情報を含む。enj-refエレメントは、サーブレットがエンタープライズ ビーンのホーム インターフェイスを見つけるのに必要な情報を含む。resource-ref要素はリソース ファクトリをセットアップするのに必要な情報を含む。

 

環境のセットアップに関するJ2EE環境の要求事項はJava 2プラットホーム エンタープライズ版v1.2の仕様書の第5章に記されている1J2EE対応の実装の一部ではないサーブレット コンテナにおいてはJ2EE仕様書に記されたアプリケーション環境機能を実装することは必要とはしないが推奨はされる。

 

1J2EEの仕様はhttp://java.sun.com/j2eeから入手できる。