比較表
比較基準 | CGI | サーブレット |
---|---|---|
基本 | プログラムはネイティブOSで書かれています。 | Javaを使ったプログラム |
プラットフォーム依存 | プラットフォーム依存 | プラットフォームに依存しない |
プロセスの作成 | 各クライアント要求は独自のプロセスを作成します。 | クライアント要求の種類に応じてプロセスが作成されます。 |
スクリプトの変換 | 実行可能ファイルの形式で存在します(サーバーOSに固有)。 | Javaバイトコードにコンパイルされています。 |
走る | 別工程 | JVM |
セキュリティ | 攻撃に対してより脆弱です。 | 攻撃に抵抗することができます。 |
速度 | もっとゆっくり | もっと早く |
スクリプトの処理 | 直接 | スクリプトを実行する前に、翻訳とコンパイルが行われます。 |
移植性 | 移植できない | ポータブル |
CGIの定義
CGI(Common Gateway Interface)は、Webサーバー上の外部プログラム(CGIスクリプト)を処理して対話型Webページの実行を可能にするインターフェースです。 CGIは、1993年にNCSA(国立スーパーコンピューティングアプリケーションセンター)によって開発されました。これは、サーバー側にあり、WebブラウザがWebサーバー上のプログラムと対話できるようにします。 例えば、Webページがデータベースを照会したり、その時点でユーザーがサーバーにフォーム情報を送信したりしている場合は、CGIスクリプトが呼び出されます。 サーバーはその情報をGETまたはPOSTの 2つの方法でアプリケーションに渡します。その後、アプリケーションはサーバーに応答してブラウザーに返します。 このようにして、ブラウザはユーザにいくつかの結果をもたらします。
CGIはCGIスクリプトを実行する方法を記述し、それらの特定のプログラムのためにサーバーに結果を返すための規定です。 CGIの機能は、ブラウザから受け取った情報をスキャンし、タスクの完了後にCGIスクリプトを終了させることです。 Common Gateway Interfaceでは、共通とは、あらゆるオペレーティングシステムまたはプログラミング言語で問題なく動作することを意味します。
以前は、UNIXシェルスクリプトとPERLがCGIプログラムの作成に使用されていたため、CGI 「スクリプト」と呼ばれていました。 しかし、今ではC、C ++、Perl、Visual Basic、Pythonなど、どの言語でも使用できます。 ただし、Webサーバーは実行可能ファイルを特定のディレクトリ内のCGIプログラムとして扱うこともできるため、CGIは潜在的なセキュリティ問題を引き起こす可能性があります。 CGIは各クライアントの要求を別々のプロセスで処理するため、サーバーの負荷が増大して遅くなります。
サーブレットの定義
サーブレットはJavaベースのWebコンポーネントで、WebブラウザまたはHTTPクライアントとHTTPサーバー間の対話を容易にする中間プログラムとして機能します。 CGIと同様に、サーブレットを使用してWebページフォームによって情報を収集し、データベースからレコードを表示し、コンテナを使用して動的Webページを生成することもできます。 サーブレットは、プラットフォームに依存せず、さらにプラットフォームに依存しないバイトコードにコンパイルされたJavaクラスです。 プラットフォームに依存しないバイトコードは、Java Webサーバーによって動的に格納および実行できます。 サーブレットはソケットとRMIメカニズムを使用して、アプレット、データベース、または他のデータベースプログラム間の接続を確立します。
サーブレットコンテナは、 HTTPおよびHTTPSプロトコルをサポートするWebサーバの一部です 。 Webクライアントとのやり取りを可能にするために、HTTPおよびHTTPSプロトコルを使用した要求/応答方式を採用しています。 CGIとは異なり、サーブレットはWebサーバーのアドレス空間内で実行されます。各クライアントは必ずしも別々に扱われるわけではありません。 サーブレットでは、サーバー上のリソースを保護するために、一連の制約がサーバーに適用されます。
CGIとサーブレットの主な違い
- CGIスクリプトはネイティブOSで書かれ、特定のディレクトリに格納されています。 一方、サーブレットプログラムは通常、Javaバイトコードにコンパイルされ、JVMで実行されるJavaで書かれています。
- CGIはプラットフォーム固有であるため、オペレーティングシステム間の切り替えが困難です。 反対に、サーブレットはJVMをインストールしたどのオペレーティングシステムでも実行できるため、プラットフォームに依存しません。
- CGIでは、サーブレット、プロセスが不必要に作成されずにJVMのメモリ空間を共有している間、クライアントからのリクエストが到着するたびに別々のプロセスを生成できます。
- CGIスクリプトは、サーバーのネイティブOSで書かれた実行可能プログラムです。 対照的に、サーブレットはJVM上で動作するJavaバイトコードにコンパイルされます。
- サーブレットはJavaを使用するため、CGIよりも安全です。
- サーブレットの速度、パフォーマンス、効率はCGIより優れています。
- CGIスクリプトは直接処理できます。 反対に、サーブレットは最初にプログラムを翻訳してコンパイルし、次にそれを処理します。
- 移植性に関しては、サーブレットは移植性がありますが、CGIはそうではありません。
結論
CGIとサーブレットは同じように機能しますが、サーブレットは高速で安全、プラットフォームに依存せず、簡単に開発でき、いくつかのAPIからアクセスでき、さまざまなWebサーバーでサポートされるため、サーブレットの使用はCGIよりも有利です。