Java CGI против сервлетов

Каковы основные различия между CGI и Java-сервлетами?

Ответ 1

Сервлеты запускаются в одном процессе (HTTP-сервер с дополнительными функциями, который называется Serlet Container), и они существуют до тех пор, пока этот процесс существует.

CGI означает каждый раз, когда клиентский запрос, HTTP-сервер создает новый экземпляр процесса для обслуживания этого запроса. Это убийца производительности. Кроме того, поскольку в каждом запросе есть новый процесс, это означает, что CGI не может агрегировать данные из нескольких запросов в памяти, как сервлеты, и должен прибегать к внешнему постоянному хранилищу (файлу или БД). Это тоже убийца производительности.

Ответ 2

Самая большая разница в том, что CGI умер decade+ назад.

Сервлеты - это стандарт, Java CGI так и не был.

Ответ 3

Java-сервлеты запускаются в каком-то контейнере (Tomcat, JBoss, Glassfish, Jetty и т.д.), Которые необходимо запустить для обслуживания запроса.

CGI обычно генерирует новый процесс для каждого запроса, который (учитывая, что запуск JVM несколько дорогой) не является лучшим решением для Java.

Ответ 4

Как минимум, использование сервлетов Java в контейнере сервлетов должно обеспечивать лучшую производительность. Использование любого типа CGI с Java, скорее всего, должно порождать новые процессы Java для каждого запроса, что является менее идеальным. При работе с Java на стороне сервера из Интернета использование сервлета - действительно лучший подход.