web-dev-qa-db-ja.com

Java CGIとサーブレット

CGIとJavaサーブレットの主な違いは何ですか?

16
Jakub Mach

サーブレットは1つのプロセス(サーブレットコンテナと呼ばれる追加機能を備えたHTTPサーバー)で実行され、そのプロセスが存在する限り存在します。

CGIは、クライアントリクエストがあるたびに、HTTPサーバーがこのリクエストを処理するプロセスの新しいインスタンスを作成することを意味します。これはパフォーマンスキラーです。さらに、リクエストごとに新しいプロセスがあるため、CGIはサーブレットのようにメモリ内の複数のリクエストからデータを集約できず、外部の永続ストレージ(ファイルまたはDB)に頼る必要があります。これもパフォーマンスキラーです。

27
Victor Sorokin

最大の違いは、CGIが10年以上前に死亡したことです。

サーブレットは標準であり、Java CGIは実際にはそうではありませんでした。

6
Dave Newton

Javaサーブレットは、要求を処理するために実行する必要があるある種のコンテナ(Tomcat、JBoss、Glassfish、Jettyなど)で実行されます。

CGIは通常、リクエストごとに新しいプロセスを生成しますが、これは(JVMの起動にいくらか費用がかかることを考えると)Javaにとって最適なソリューションではありません。

3
Roger Lindsjö

少なくとも、サーブレットコンテナでJavaサーブレットを使用すると、パフォーマンスが向上するはずです。 Javaで任意のタイプのCGIを使用すると、リクエストごとに新しいJavaプロセスを生成する必要がある可能性が高く、これは理想的とは言えません。 Webからサーバー側でJavaを操作する場合、サーブレットを使用することが実際に最善のアプローチです。

2
ziesemer