Каковы основные различия между CGI и Java-сервлетами?
Java CGI против сервлетов
Ответ 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 на стороне сервера из Интернета использование сервлета - действительно лучший подход.