第1回:Javaの基礎はキーワードを知ることから始まる -1-2-3-4
第1回:Javaの基礎はキーワードを知ることから始まる
CGIとASP.NETの解説

CGIの場合

CGI(Common Gateway Interface)は、Webサーバがクライアントからの要求を受け取った際、Webサーバ上でプログラムを読み込んでそのつど実行する形式を指す。CGIで動作するプログラムの開発環境としてよく使われるのが、PerlやPHPなどのスクリプト言語である。CGIは、個人レベルや小規模なWebアプリケーションの開発に使われることはあっても、業務レベルのWebアプリケーションを構築する場合に使われることは少ない。それはCGIの処理パフォーマンスが悪いからだ。ここで誤解していけないのが、スクリプト言語による実行がパフォーマンスに影響を与えるというわけではない点だ。問題なのはCGIの仕組みであり、スクリプト言語ではない。CGIでは、クライアントから要求を受け付けた際、クライアントごとに1つのプログラムを実行する。簡単に言えば、同時に1000人のユーザーがアクセスすれば同じプログラムがサーバ上で1000個実行される。同時に数万人のアクセスがあれば、数万個のプログラムが実行されることになり、サーバがリソース不足となるのは明らかだ。そのような理由から、多数のクライアントから要求を受ける必要がある場合、CGIを利用するのは適さない。多数のクライアント要求を受けるためには、プログラムを1つ(または数個)だけメモリに用意し、アクセスする要求数分のスレッド構成をする方法がよい。そうすれば、パフォーマンスが劇的に向上するのだ。たとえばApacheでは、PerlやPHPで記述されたプログラムをスレッドで実行させる方法として、mod_perlモジュールやmod_phpモジュールが用意されている。これらのモジュールを使えば、PerlやPHPで記述したプログラムであっても、J2EEや後述するASP.NETに匹敵するパフォーマンスを得ることが可能だ。実際、中規模のWebアプリケーションでは、mod_perlモジュールやmod_phpモジュールを用いて開発することも少なくない。


ASP.NETの場合
ASP.NETは、Windows 2000 Serverに付属するIIS 5.0に.NET Frameworkをインストールした環境、または、2003年に登場予定の.NET Serverで動作するものだ。次世代のWebアプリケーション開発環境である。ASP.NETでは、プログラムが.NET Frameworkという実行環境上で動作するのだ。.NET Frameworkは、JavaでいうJavaVMのようなものである。VB.NETやC#など、.NET環境をサポートするプログラミング言語で開発されたプログラムを実行する環境だ。 ASP.NETでの実行環境はJ2EEと非常によく似ており、Fig.3に示す構成をとる。

ASP.NETの場合はIISと連携して動作するため、IIS自身がコンテナ扱いになる。コンテナという概念はないのだ(強いていえば、IISで設定する仮想ディレクトリがコンテナとしての機能を果たす)。ASP.NETでは、開発したWebアプリケーションのプログラムを拡張子「.aspx」を持つファイル名としてIIS上に配置すれば実行される(もしくはコンパイル済みのバイナリファイルを拡張子.dllをもつファイルとして配置してもよい)。

 Fig.1やFig.2とFig.3を比較するとわかるように、ユーザーインタフェースを提供するものがASP.NET、コンポーネント化されたプログラムがCOM+で管理されるという構成だ。

 ASP.NETは、書式がJSPと非常によく似ており、HTMLのソースファイル中に特定のタグを使ってプログラムを埋め込むという開発スタイルをとる。しかしその一方で、J2EEが提供するサーブレットのように、ユーザーインタフェースとプログラムとを分離して開発する「コードビハインド」と呼ばれる仕組みも用意されている。コードビハインドでは、クライアントに出力するHTML部分を「サーバーコントロール」と呼ばれる仕組みでテンプレート化しておき、プログラムから該当部分を書き換えてクライアントに返すという方法をとる。

 J2EEとASP.NETは、開発言語や利用するAPIの差こそあれ、どちらも実現できる内容には、大差ない。

 しかしJ2EEは、いくつかのOSで動作するのに対し、ASP.NETはいまのところWindows 2000 Serverでしか動作しない。Webアプリケーションは開発したら終わりというわけではなく、その後の運用管理も必要なことから、さまざまなOSで動作させることができるという点から見れば、J2EEのほうが組み合わせることができるシステムの自由度が高い。またJ2EEでは、Java以外で作られたアプリケーションとの連携性も高く、異機種間で動作する既存のシステムを統合してWebアプリケーションを構築したいという目的ならば、J2EEのほうが構成しやすい。

 逆にASP.NETでは、比較的言語仕様が簡単なVB.NETが使えることから習得が容易で、また、Visual Studio .NETのような統合環境での開発がしやすいというメリットもある。

 よくJ2EEとASP.NETとの比較がされ、J2EEのほうが機能的に優れているといわれることも多いが、実際には、そのようなことはない。ASP.NETでもJ2EEと同等もしくはそれ以上のWebアプリケーションを構築することが可能だ。

 なお、ASP.NETよりも前のバージョンであるASPは、スクリプト言語を使った開発環境であり、ASP.NETとはまったく違う。J2EEと(ASP.NETではなく)ASPとを比較し、J2EEのほうが優れているというのは、ある意味正しいと言える。ASPは、実行速度が遅いばかりか、高度な処理ができない。

 ところで、ASP.NETでは、J#を使うとJavaを使った開発もできるが、これはJ2EEとは別物である。ASP.NETにおけるJ#を使ったWebアプリケーションの構築は、言語としてJavaを使うだけであり、J2EEのAPIではなくASP.NETのAPIを用いてプログラミングする。すなわちJ#とJ2EEとはまったく関係ないので、誤解のないようにしたい。