Существует достаточно большое количество технологий решающих задачу коммуникации веб-приложения и клиента (связка веб-сервер+CGI только одна из них). Я могу выделить три класса таких технологий (кто-то может по другому их разделить, это не для спора):
— CGI-like, когда сервер перенаправляет запросы в экземпляр приложения, которое запускается как отдельный процесс в системе, и использует результат выполнения для отдачи клиенту;
— Fast-CGI-like, когда приложение работает как демон и обслуживает запросы веб-сервера;
— Сервера приложений, которые в собственном контексте выполняют код и обслуживают запросы.
Отдельно можно поставить комплексные сервера-приложения, которые сами выполняют все функции, как приложения, так и сервера.
Выбор технологии зависит от языка и уровня навыков.
CGI прост, но почти по всем параметрам уступает FCGI. Обе технологии используются, в основном, при работе с скриптовыми языками (Perl, PHP).
Сервера приложений — это преимущественно Java мир. Много специфики.