Разлика между CGI и Servlet

CGI срещу Servlet

CGI (Common Gateway Interface) е първият опит за предоставяне на динамично съдържание на потребителите. Тя позволява на потребителите да изпълняват програма, която пребивава в сървъра, за да обработват данни и дори да имат достъп до бази данни, за да произвеждат съответното съдържание. Тъй като това са програми, те се записват в естествената операционна система и след това се съхраняват в конкретна директория. Сервлет е реализация на Java, която има за цел да предостави същата услуга като CGI, но вместо програми, компилирани в родната операционна система, тя се компилира в байта кода на Java, който след това се стартира във виртуалната машина на Java. Въпреки че Java програми могат да бъдат компилирани в родния код, те все още предпочитат да се компилират в Java байт код.

Първото предимство на сервлетите пред CGI е в неговата независимост на платформата. Сервлетите могат да работят на всяка операционна система, стига да е инсталиран JVM, което означава, че няма да имате проблем, дори ако решите да превключите на операционни системи. С CGI превключването на операционната система е труден и трудоемък процес, тъй като ще трябва да прекомпилирате програмите в новата операционна система.

Тъй като пускате независими програми в CGI, те създават свой собствен процес, когато се изпълняват, нещо, което не се случва със сервлетите, тъй като те просто споделят в паметта на JVM. Това може да доведе до проблеми, свързани с режийните разходи, особено когато увеличавате броя на потребителите експоненциално. Освен това създава проблеми с уязвимостта, тъй като програмата не се контролира по никакъв начин, след като се стартира на сървъра.

По-късно по-често срещаният метод при използване на CGI е чрез скриптове. Това намалява времето, необходимо за създаване на програми и като цяло е по-сигурно. С CGI можете да стартирате скриптове веднага, докато сървлетите ще трябва да преведете скрипта в Java и да го компилирате в сервлет, което добавя малко към времето за зареждане.

Резюме:
1.CGI обикновено са изпълними файлове, които са собствени на операционната система на сървъра, въпреки че сервлетите могат да бъдат компилирани и в основната операционна система, могат да бъдат компилирани в байт код на Java, който след това се изпълнява на JVM
2.CGI програмите зависят от платформата, докато сървлетите са независими от платформата
3.CGI програмите се изпълняват като отделни процеси на компютъра, докато сървълите се изпълняват на JVM
4.CGI може да бъде по-уязвим от атаки, отколкото сървлети
5.CGI може директно да обработва скриптове, докато те трябва да бъдат преведени и компилирани, преди да могат да се изпълняват като сървлет