Шаг 4.
Создание Internet-приложений в среде Delphi. Динамическое создание документов Web с помощью Delphi

    На этом шаге мы рассмотрим общие вопросы, связанные с динамическим созданием документов Web с помощью Delphi.

Динамически создаваемые Web-документы создаются сервером в процессе обработки клиентского запроса. Сервер не возвращает уже готовые документы. Вместо этого, в ответ на запрос клиента серверное приложение выполняет соответствующий программный код, и создает то, что нужно послать клиенту. Эти серверные программы можно разделить на два различных типа. Web-сервер может вызывать исполняемую программу, которая формирует возвращаемый сервером документ. Либо ответ сервера создает вызываемая процедура из библиотеки динамической загрузки.

    Delphi поддерживает все четыре типа интерфейса приложений, выполняемых на сервере, которые позволяют создавать динамические документы HTML:


Рис.1. Типы интерфейсов

    Исполняемые на сервере приложения CGI, WIN-CGI и динамически загружаемые библиотеки DLL, использующие программный интерфейс ISAPI или NSAPI, имеют свои преимущества и недостатки.

    Приложения CGI, использующие стандартный шлюзовой интерфейс - Common Gateway Interface, были первыми прикладными программами, которые использовались для создания динамических документов HTML. Когда Web-сервер получает запрос для обработки его CGI-приложением, он передает этому приложению полученную от пользователя информацию через стандартный ввод и переменные окружения. Формируемый CGI-приложением документ HTML, который должен быть послан пользователю, как правило, помещается в стандартный вывод. Реально процесс обработки более сложен, чем представленное описание. Чтобы увидеть, как работает CGI-приложение, необходимо написать обычное консольное приложение, которое можно использовать как простую прикладную программу CGI. Программа, приведенная ниже, приветствует клиента и сообщает ему текущее время.

    Чтобы создать эту программу вам нужно в Delphi выполнить команду меню File | New | Other... и в появившемся диалоговом окне New Items на странице New выбрать тип приложения Console Application.


Рис.2. Выбор Console Application

    Остается просто добавить в программный модуль пять операторов writeln, сохранить проект под именем timer1 (команда меню File | Save Project As...) и выполнить команду Project | Compile timer1 (или нажать на клавиатуре Ctrl+F9). После того, как программа будет откомпилирована и собрана, нужно поместить ее в каталог на Web-сервере, который имеет права исполнения Web-приложений (каталог этот может называться CGI-BIN или SCRIPTS). Затем в браузере задается URL, который указывает на данную прикладную программу, как это показано на рисунке 3, т.е. в строке запроса указать имя Web-сервера, и через "слэш" имя каталога, в котором находятся исполняемые файлы и имя исполняемой программы.


Рис.3. Результат выполнения консольного приложения

    Текст программы следующий:

program timer1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

begin
  { TODO -oUser -cConsole Main : Insert code here }
  writeln ( 'Content-Type:text/html');
  writeln;
  writeln('<H1> Привет! </Н1> <HR>');
  writeln('<B> Простое консольное приложение</В><HR>');
  writeln('Текущее время: '+TimeToStr(Time));
end.
Текст этого приложения можно взять здесь (27,4 Кб).

    Эта прикладная программа посылает данные пользователю, помещая их в стандартный вывод при помощи последовательности операторов writeln.

    Этот простой метод создания прикладных программ CGI используется только для примера. Для всех приложений Web-сервера следует использовать стандартный оконный интерфейс, который Delphi предлагает для разработки прикладных программ сервера Интернет. Интерфейс Delphi для приложений Web-сервера, может использоваться для разработки как исполняемых программ, так и для приложений, использующих динамически загружаемые библиотеки.

    Одно из основных преимуществ прикладных программ CGI над ISAPI-приложениями (использующими API сервера Интернет) или NSAPI-приложениями (использующими API сервера Netscape) состоит в том, что такую исполняемую программу можно использовать почти на каждом Windows-сервере Web. Но в том случае, когда эффективность работы является важным параметром, использовать CGI-приложение не стоит. Не стоит потому, что каждый раз, когда браузер пользователя вызывает программу CGI, Web-сервер должен создать новый процесс, загрузить и выполнить CGI-программу, результаты работы возвратить пользователю и, в заключение, освободить использовавшиеся ресурсы. Это может вызвать замедление в работе Web-сервера, если он обслуживает большое количество запросов.

    Программные интерфейсы ISAPI и NSAPI Web-сервера выполняют задания внутри существующего пространства процессов (или потоков), а не порождают новый процесс в результате каждого нового динамического запроса. ISAPI - это версия API фирмы Microsoft для своего Web-сервера, a NSAPI - версия Netscape для Web-сервера Netscape.

    Когда поступает HTTP-запрос к библиотеке динамической загрузки ISAPI DLL, Web-сервер выделяет поток из своего потокового пула и начинает в нем выполнение библиотеки DLL. Пул потоков, это набор рабочих процессов, которыми управляет Web-сервер. Этот пул может динамически расширяться или сокращаться, в зависимости от загрузки сервера. После того, как полученный результат отправлен клиенту, поток возвращается в пул и будет использоваться для обработки последующих запросов. Такой вариант использования системных ресурсов намного эффективнее, чем порождение нового процесса. Но есть один недостаток использования ISAPI - такой код сложнее писать и трудно отлаживать. Другой недостаток состоит в том, что если DLL уже загружена сервером, необходимо остановить сервер для того, чтобы заменить библиотеку DLL.

    Со следующего шага мы начнем рассматривать интерфейс Web-сервера, предлагаемый Delphi.




Предыдущий шаг Содержание Следующий шаг