ServletはJavaで書かれたサーバー側プログラムで、Javaの仮想マシン上で実行されます。メモリに常駐し、リクエストごとにスレッドを生成するため高速です。Javaのオブジェクト指向機能を活用でき、大規模システムに適しています。
CGIはCommon Gateway Interfaceの略で、Perl、Python、Shellスクリプトなど様々な言語で実装できます。リクエストごとに新しいプロセスを起動するため処理が重く、シンプルなスクリプトに向いています。汎用的で導入が容易です。
使う場面:Servletは高速処理が必要な大規模Webアプリケーション向けで、CGIはシンプルなスクリプト処理向けです。ニュアンス:Servletは言語がJavaに限定される専門的な技術、CGIは言語自由で汎用的です。対象:Servletはシステム開発者向け、CGIは初心者でも導入可能です。パフォーマンスではServletが優れています。
Javaの専門知識がある場合、大規模でパフォーマンスが重要ならServletを選択します。簡単なスクリプト処理やJavaが使えない環境ならCGIが適切です。最新のWebフレームワークも検討しましょう。