CGIとJavaサーブレットの主な違いは何ですか?
サーブレットは1つのプロセス(サーブレットコンテナと呼ばれる追加機能を備えたHTTPサーバー)で実行され、そのプロセスが存在する限り存在します。
CGIは、クライアントリクエストがあるたびに、HTTPサーバーがこのリクエストを処理するプロセスの新しいインスタンスを作成することを意味します。これはパフォーマンスキラーです。さらに、リクエストごとに新しいプロセスがあるため、CGIはサーブレットのようにメモリ内の複数のリクエストからデータを集約できず、外部の永続ストレージ(ファイルまたはDB)に頼る必要があります。これもパフォーマンスキラーです。
最大の違いは、CGIが10年以上前に死亡したことです。
サーブレットは標準であり、Java CGIは実際にはそうではありませんでした。
Javaサーブレットは、要求を処理するために実行する必要があるある種のコンテナ(Tomcat、JBoss、Glassfish、Jettyなど)で実行されます。
CGIは通常、リクエストごとに新しいプロセスを生成しますが、これは(JVMの起動にいくらか費用がかかることを考えると)Javaにとって最適なソリューションではありません。
少なくとも、サーブレットコンテナでJavaサーブレットを使用すると、パフォーマンスが向上するはずです。 Javaで任意のタイプのCGIを使用すると、リクエストごとに新しいJavaプロセスを生成する必要がある可能性が高く、これは理想的とは言えません。 Webからサーバー側でJavaを操作する場合、サーブレットを使用することが実際に最善のアプローチです。