Ах, это возвращает меня обратно. Да, самые первые веб-приложения требовали написания собственного веб-сервера. первые, такие как CERN HTTPd , где довольно простые программы: они прослушивали порт для базовых запросов на соединение, анализировали путь к файлу и возвращали статический файл.
Довольно скоро после этого люди выяснили, как создать / выполнить программу из демона HTTP, который сгенерировал HTML-файл, вместо того, чтобы обслуживать его из статического файла. Некоторые из них были простыми программами на Си; Perl также стал популярным. Но что-то вроде банковской системы (я работал над одним из них) будет запускать программу при запуске сеанса, затем подключаться к существующему бэкэнду через что-то вроде CICS для получения данных, а затем генерировать вывод, используя что-то как fprintf для отправки текста в сокетное соединение.
Серверы приложений действительно прибыли, когда люди поняли, что они пишут повторяющиеся фрагменты кода, которые должны были взаимодействовать с внутренним «уровнем данных» или «постоянным уровнем» и с интерфейсным веб-сервером.