Московский государственный университет имени М.В.Ломоносова
Опубликован: 01.11.2004 | Доступ: свободный | Студентов: 10555 / 332 | Оценка: 4.12 / 4.01 | Длительность: 19:18:00
ISBN: 978-5-9556-0077-9
Специальности: Программист
Лекция 28:

Серверные приложения

< Лекция 27 || Лекция 28: 1234

Создание приложений, выполняемых на WEB-сервере, в среде проектирования DELPHI

Среда проектирования Delphi также позволяет создавать CGI и ISAPI приложения.

Создание CGI-приложения

Если WEB-броузер посылает в качестве запроса URL-адрес CGI-приложения, то web-сервер запускает это приложение и передает ему параметры запроса через стандартный ввод. Сформированная в результате выполнения CGI-приложения HTML-страница возвращается WEB-серверу через стандартный вывод.

Для того, чтобы создать CGI-приложение, запускаемое на сервере, следует создать проект Web Server Application и в диалоге New Web Server Application (рис. 28.3) выбрать тип серверного приложения (например, CGI Stand-alone executable).

Диалог New web Server Application

Рис. 28.3. Диалог New web Server Application

В результате будет создан проект, содержащий главный файл приложения и модуль Unit1:

{Главный файл приложения}
program Project1;
{$APPTYPE CONSOLE}
uses    WebBroker,  CGIApp,
        Unit1 in 'Unit1.pas' {WebModule1: TWebModule};
{$R *.RES}
begin
  Application.Initialize;
  Application.CreateForm(TWebModule1, WebModule1);
  Application.Run;
end.
{Модуль Unit1.pas}
unit Unit1;
interface
uses     SysUtils, Classes, HTTPApp;
type
  TWebModule1 = class(TWebModule)
  private    { Private declarations }
  public    { Public declarations }
  end;
var
  WebModule1: TWebModule1;
implementation
{$R *.DFM}
end.

Для того чтобы создать код, формирующий HTML-страницу, следует создать объект типа TWebActionItem (например, WebActionItem1 ), а далее создать для данного объекта обработчик события действия OnAction.

При этом автоматически будет сформирован следующий код:

procedure TWebModule1.WebModule1WebActionItem1Action(
                       Sender: TObject;
                       Request: TWebRequest; 
                       Response: TWebResponse; 
                       var Handled: Boolean);
begin
end;

Код HTML-страницы записывается в свойство Content объекта Response.

Например:

//1.
Response.Content:='<I>Результат выполнения </I> '+
                   <P> <B> CGI-приложения </B></P>;
// 2.
var
  aPage : TStringList;
  i: integer;
begin
  aPage:= TStringList.Create;
  aPage.Add('Method = ' +Request.Method + '<BR>');
  aPage.Add('URL = ' + Request.URL+ '<BR>');
  aPage.Add('User Agent = ' + Request.UserAgent+ '<BR>');
  aPage.Add('Remote Address = ' + Request.RemoteAddr+ '<BR>');
  aPage.Add('Remote Host = ' + request.RemoteHost+ '<BR>');
  Response.Content := aPage.Text;
  aPage.Free;

После размещения созданного CGI-приложения в каталог WEB-сервера, предназначенный для исполняемых файлов, web -браузер может формировать запрос, указывая URL-адрес данного CGI-приложения.

Разбор параметров

Для доступа к значению формы из GET-запроса используется метод QueryFields объекта типа TWebRequest.

Например:

var1:=Request.QueryFields.Values["Имя_поля"];
var1:=Request.QueryFields.ValueFromIndex[0];

Для доступа к значению формы из POST-запроса используется метод ContentFields объекта типа TWebRequest.

Например:

var1:=Request.ContentFields.Values["Имя_поля"];
var1:=Request.ContentFields.ValueFromIndex [0]

Для доступа к параметрам самого запроса используется метод GetFieldByName:

Например:

Request.GetFieldByName('URL');
Request.GetFieldByName('METOD');  // Эквивалентно 
                // выполнению Request.Metod;

Применение Cookies

Cookies - это данные, сохраняемые на ПК клиента (web-браузера). Пользователь имеет возможность запретить сохранять Cookies на своем ПК. Если запись Cookies разрешена, то они записываются при каждом получении ответа от web -сервера и передаются обратно с каждым следующим HTTP-запросом.

Для задания Cookies следует в обработчике события действия ввести следующий код:

with Response.Cookies.Add
     do
         Name:='Cook1'';  // Имя данных
         Value:='ValueCook1''; // Значение
      end;

Для запроса Cookies следует в обработчике события действия ввести следующий код:

s1:=Request.CookieFields.ValueFromIndex[0];
// Request.CookieFields.Count  - число полей в Cookies
< Лекция 27 || Лекция 28: 1234
Александр Демьяненко
Александр Демьяненко

Можно ли сдавать один и тот же тест несколько раз?
Или же один и тот же тест можно сдать лишь однажды?

Максим Стогний
Максим Стогний

Добрый день!

Скажите, пожалуйста, если в терминологии объектно-ориентированного программирования функции также называются методами или методами - членами класса, в примере объявления указателя на метод использовали в формальном описании оба названия:

тип_метода (имя_класса::*имя_метода_указателя)
    (список параметров);
тип_функции (*имя_ функции_указателя)
    (список параметров);

при этом можно было  тип_функции во втором описании заменить на тип_метода? Т.е.:

тип_метода (*имя_ метода_указателя)
    (список параметров);

Анатолий Федоров
Анатолий Федоров
Россия, Москва, Московский государственный университет им. М. В. Ломоносова, 1989
Денис Комаров
Денис Комаров
Россия, Москва