Internet Server Application Program Interface (ISAPI) – технология разработки серверов приложений от компании Microsoft, предназначенная для использования в рамках сервера IIS (см. рисунок). Основным преимуществом ISAPI перед CGI является тот факт, что «удаленная функциональность» в ISAPI реализована в виде динамически подгружаемых библиотек (DLL). При первом обращении к удаленной процедуре IIS загружает DLL с процедурой в свое адресное пространство. При всех последующих обращениях DLL уже загружена, следовательно, нет необходимости вызывать дорогие с точки зрения времени системные функции по загрузке модуля в память. Кроме того, DLL может хранить состояние сервера приложений в своих переменных.
Как часто бывает, решение одних проблем породило другие. Во-первых (в полном соответствии с желаниями Microsoft), мы из многоплатформенной среды попали в мир Windows и только Windows. Во-вторых, появились некоторые сложности при использовании этой технологии с некоторыми web-серверами, а именно: для замены одной DLL на другую (в том числе и на более новую версию), а также в случае каких-либо проблем в коде приходится останавливать сервер и перезапускать его заново. Этого не требуется в CGI, так как web-сервер и сервер приложений (CGI-скрипт) работают в разных адресных пространствах. Если это вас не пугает, то ISAPI, конечно, более подходящее решение, чем CGI.
Сервлетом (Servlet) называется класс Java, вызов методов которого производится не клиентским приложением, а специальным сервером сервлета (обычно это web-сервер). В некотором смысле Servlets похожи на ISAPI DLL – как и в случае с ISAPI, сервлет загружается web-сервером один раз и выполняется в отдельном потоке. При запуске сервлета web-сервер вызывает у последнего метод init, передавая ему параметры инициализации. Далее, Web-сервер формирует объект-запрос и передает этот запрос методу service сервлета. Сервллет выполняет свою работу и возвращает объект-результат web-серверу.
На рисунке представлена последовательность вызовов при работе с сервлетом. При первом обращении сервлет еще не загружен и web-server загружает его, после чего передает сервлету запрос клиента (service). При втором обращении инициализация уже не нужна и web-server просто передает сервлету запрос клиента (service).
С точки зрения философии сервлеты представляют собой те же ISAPI DLL. Разница между двумя этими технологиями заключается в том, что сервлеты пишутся на Java, а следовательно, могут быть использованы на любых платформах, как Win32, так и отличных.