• Партнер

  • Привет, перец! Сегодня мы будем
    учиться писать CGI на Delphi, ведь тебе надоели
    скучные статические страницы на твоем
    сайте, и ты решил написать свой собственный
    скрипт, но не знаешь, как, - тогда эта статья
    для тебя. Для этого нам понадобится Delphi,
    желательно, 5-ой версии.

    Создание заготовки Web-модуля

    Для этого запустим мастера
    командой File->New->Web Server Application. Далее
    мастер нам предложив выбор:

    • ISAPI/NSAPI Dynamic Link Library. Создание
      библиотеки .DLL, которая автоматом
      загружается сервером по необходимости.
      Данные для обработки передаются в
      библиотеку, а возвращаются сервером в
      виде специальной  формы с помощью
      интерфейса ISAPI фирмы Microsoft или NSAPI фирмы
      Netscape.

    • CGI Stand-alone executable. Создание
      серверного консольного приложения. По
      мере надобности загружается сервером.
      Приложение получает параметры и передает
      результаты работы напрямую.

    • Win-CGI Stand-alone executable. Создание
      приложения в формате Windows. Единственное
      отличие, что оно получает инфу через INI
      файл.

    Параметры и результаты. Модули
    получают от сервера запрос (параметры),
    указанные пользователем вручную или
    сгенерированные броузером автоматически.

    Допустим, что у нас есть модуль
    Test.exe, а расположен он на www.my-site.ru в каталоге,
    для которого установлены права на запуск CGI(например,
    cgi-bin). Данный модуль будет вызван обращением:

    http://www.my-site.ru/cgi-bin/Test.exe/PARAM1?f7

    Здесь:

    http://www.my-site.ru - адрес веб-узла;
    cgi-bin- каталог;
    Test.exe-модуль;
    /PARAM1-название параметра;
    ?-символ, отделяющий параметр от значения;
    f7- значение параметра.

    Модуль можно запускать и без
    параметров, а также со значением,
    указываемым модулю без названия параметра.

    Пример создания Web-модуля.

    Суть примера будет в том, что при
    запросе с параметром /DAY со значение name, отображается название текущего дня недели,
    если значение full, отображается полная дата.
    Если параметр /TIME, то показывается текущее
    время, а если нет параметра, то отображается
    короткое приветствие.

    Веб-модуль создается с помощью
    мастера. Выберем консольный тип приложения
    CGI Stand-alone executable. Откроется окно WebModule1. Пока
    список действий пуст. Чтобы его добавить
    надо выбрать строку Actions, кликнуть правой
    кнопкой мыши и в появившейся менюшке
    выбрать пункт Add Item. Добавится новая строка.
    В Object Inspector появятся свойства объекта:

    Default- имеет значение true, если
    данное действие выполняется по умолчанию,
    когда в ответ на запрос не выполнено ни одно
    из других действий.
    Enabled- имеет значение true, если сервер имеет
    право использовать данное действие.
    MethodType-тип обрабатываемого запроса.
    PathInfo- имя параметра.
    Producer- имя поставщика Web, формирующего
    результат работы

    Основное свойство - это PathInfo, в
    котором надо писать /TIME, /DAY или ничего. Итак,
    надо подготовить три объекта в списке Actions.
    У первого (DefaultAction) в свойство PathInfo пустое, у
    второго(DayAction)- строка /DAY, а у третьего (TimeAction)-строка
    /TIME.

    Чтобы объект DefaultAction реагировал
    на запрос, на вкладке Events надо выбрать
    свойство OnAction и щелкнуть на нем два раза.

    procedure TWebModule1.WebModule1DefaultActionAction(Sender: TObject;
    Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
    Begin
    Respose.Content:=’<body bgcolor=white><center>’+’<h3>Привет!</h3></center></body>’;
    End;

    Обработка запросов с параметрами
    чуть сложнее. Чтобы сформировать название
    дня недели, надо узнать его номер с помощью
    функции DayOfWeek, которая принимает значения
    от 1(суббота) до 7(пятница). Текущий день
    можно получить командой Now. DateToStr-возвращается
    текущая дата. Процедура при параметре /DAY
    выглядит вот каким образом:

    procedure TWebModule1.WebModule1DayActionAction(Sender: TObject;
    Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
    Const DAY_NAMES: array[1..7] of string =(‘воскресенье’,
    ‘понедельник’,’вторник’,’среда’,’четверг’,’пятница’,’суббота’);
    Begin
    If Request.Query=’name’
    then Respose.Content : = ‘<center>сегодня ‘+ DAY_NAMES[DayOfWeek(Now)]+’</center>’
    else if Request.Query=’full’
    then Respose.Content : = ‘<center> ‘+DateToStr(Now)+ ’</center>’;
    end;

    А вот обработчик запроса с
    параметром /TIME. В нем используется функция
    TimeToStr.

    procedure TWebModule1.WebModule1TimeActionAction(Sender: TObject;
    Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
    Begin
    Respose.Content : = ‘<center> сейчас ‘+TimeToStr(Now)+ ’</center>’;
    End;

    Запуск и отладка.

    Для отладки и запуска CGI скриптов
    нам нужен www сервер, поддерживающий CGI
    скрипты. Например Personal Web Server от Microsoft или
    Apache Web Server. Если у Вас на компьютере не
    установлен ни один из подходящих серверов,
    а Вам не хочется захламлять свой компьютер
    огромными программами, то можно
    воспользоваться крохотным www-сервером TinyWeb.
    Эта программа вполне удовлетворяет
    требованиям, которые предъявляются к www
    серверу, необходимому для отладки CGI
    приложений. Найти ее можно на сайте
    производителя: http://www.ritlabs.com/tinyweb
    .

    Установка сервера предельно проста: нужно
    разархивировать все файлы из архива в какую-либо
    директорию и запустить модуль Tiny.exe, указав
    в качестве параметра командной строки
    полный путь к корневому каталогу сервера.
    Нужно помнить, что в этом каталоге должен
    располагаться файл с именем index.html. Надо также создать подкаталог с именем CGI-BIN в
    который мы будем помещать скомпилированные
    CGI скрипты.

    Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии