Создание Web-приложений в среде Delphi
Создание Web-приложений в среде Delphi
Эпоха
web-дизайна, когда наиважнейшим считалось возможность запихнуть на страницу как
можно больше графики и поразить пользователя широтой фантазии дизайнера, канула
в лету. В моде - информационный дизайн и всяческие удобности для пользователя.
Плохим тоном уже считается одно только то, что на сайте нет форума или гостевой
книги, и самое ужасное - о, боже - вы до сих пор верстаете каждую страницу
вручную, вместо того, что бы поручить сеё скучное и утомительное занятие
скрипту.
Время
первопроходцев HTML в скором времени закончится и вовсе, и их место займут
профессионалы-программисты. Именно программисты, ибо уже в большей степени от
их умения создать удобный в использование сайт зависит его успех. Кроме
прочего, теперь сайты создают совсем уж как программные продукты: тем кто занят
наполнением содержанием, уже может не опасаться запутаться в html, java, cgi и
прочих ипостасях интернет-технологий - администрирование сайта становится таким
же привычным и удобным, как работа с текстовыми процессорами. Пока, правда,
ощущается явный недостаток законченных продуктов, на плечи которых можно было
бы возложить все функции по поддержанию сайта в актуальном состоянии, оставив
себе лишь вопросы по наполнению его содержанием.
Пока
же тяжкое бремя по созданию данных систем, на основе которых будет
функционировать сайт, ложится на плечи программистов, только вот-вот успевших
изумится возможностями языка Perl или Java. И многие из них, сказать без
преувеличения, вышли, словно из гоголевской "Шинели", из Delphi.
Действительно, данная среда разработчика, предоставляющая удобный интерфейс для
визуального программирования и широкие возможности Object Pascal, столь мила
сердцу российских программистов.
Но,
похоже, что времена меняются, и Delphi из среды создания обычных настольных
приложений, может сгодиться и в другом плане: для написания прикладных
web-программ. И действительно, что может быть лучше: уже знакомая среда
разработки, вдоль и поперек изученный язык, да и достаточно широкий круг
специалистов по программированию в Delphi - это ли не плюсы создания
web-приложений на Delphi. Есть конечно и минусы: созданные программы вряд ли
смогут удовлетворить тех, кто считает, что лучший web-сервер, это сервер не от
Microsoft. Но что поделаешь - версия Delphi под Unix отложена пока до лучших
времен. Зато посудите сами: перенос программ в будущем светлом будущем можно
будет совершить с малой кровью.
Но
отложим пока теорию в сторону, и обратимся к практике. Итак, создание
web-приложения в среде Delphi, что называется шаг за шагом.
Пример из учебника
В
отличие от прочих аспектов создания приложений в Delphi, о создании приложений
для web написано мало. Так ужасающе мало, что из книги в книгу, из учебника в
учебник путешествует один и тот же пример. Не будем оригинальничать и мы - чем
проще, тем лучше.
Вообще,
простейшее web-приложение на Delphi мало чем отличается, а точнее ничем не
отличается от создания программы для старой доброй DOS. Это - простейшее
консольное приложение, запускаемое на стороне сервера и взаимодействующие с
пользователем (в случае необходимости) через броузер.
Создайте
в Delphi новый проект - ту самую уже давно забытую всем Console Application. Вы
получите знакомый со школьной скамьи, текст обычной паскалевской программы:
program primer;
{$APPTYPE CONSOLE}
uses SysUtils;
begin
// Insert user code here
end.
Далее
еще проще. Организуем вывод кода HTML с помощью команды writeln.
writeln ('CONTENT-TYPE: TEXT/HTML');
writeln; writeln (''); writeln (''); writeln (''); writeln ('Delphi the best
facility for making web-publications!'); writeln
(''); writeln (''); writeln
('Hello, world!'); writeln (''); writeln ('');
Обратите
внимание на строку CONTENT-TYPE: TEXT/HTML, которая определяет описание
последующего содержимого, а именно кода HTML. После CONTENT-TYPE: TEXT/HTML,
необходимо вывести пустую строку иначе броузер может выдать сообщение об
ошибке.
Теперь,
когда приложение закончено, осталось его скомпилировать и проверить. Для
проверки работоспособности программы вам понадобиться веб-сервер. Можно особо
не утруждаться, подойдет любой, даже стандартный домашний веб-сервер от
Microsoft. Приложение надо будет разместить в папке публикаций сервера (обычно
это - C:Inetpub wwwroot) и запустить сам сервер. Теперь, если вы перейдете по
адресу http://localhost/primer.exe в броузере, вы должны увидеть результат
действия данной программы - строку Hello, world! Вот и всё, простейшее
web-приложение на Delphi готово.
Передача параметров
На
самом деле нам бы вряд ли понадобилось Delphi, для создания подобных программ.
Конечно, можно генерировать страницы исходя из различных условий, но вопрос в
том, как данные условия передать программе. И здесь оказывается не всё так
сложно, достаточно вспомнить передачу параметров приложению с помощью командной
строки и поступить соответствующе. Хотя это, разумеется, хитрость. Это для
приложения Delphi мы оперируем командной строкой, для пользователя же это
адресная строка в броузере, то есть url.
Попробуем
на примере. Необходимо создать приложение, которое выдает различную информацию
(к примеру, время, дату или то и другое вместе) в зависимости от параметров,
указанных в адресной строке броузера. Как известно, за данные в параметрах
отвечают такие функции, как ParamCount и ParamStr. Их-то мы и будем
использовать.
program
CgiDate;
{$APPTYPE
CONSOLE}
uses SysUtils;
begin
writeln ('CONTENT-TYPE: TEXT/HTML');
writeln;
writeln
('');
writeln
('Cgidate');
writeln
('>');
writeln ('Пример передачи параметров');
writeln ('');
writeln ('
if ParamCount >0 then
begin
if ParamStr (1) = 'date' then
writeln (FormatDateTime('"Сегодня " dddd, mmmm d, yyyy', Now))
else if ParamStr (1) = 'time' then
writeln (FormatDateTime('"Время" hh:mm:ss AM/PM', Now))
else if ParamStr (1) = 'both' then
writeln (FormatDateTime('"Сегодня " dddd, mmmm d, yyyy,'
+ '"
и время" hh:mm:ss AM/PM', Now))
else
writeln ('Ошибка! Неверный параметр:
' + ParamStr (1) + '.')
end
else
writeln ('Параметр отсутствует.');
writeln
('');
end.
Не
правда ли просто? Теперь, если в адресной строке броузера вы наберете, например
http://localhost/cgidate/exe?time, будет сгенерирована страница, отображающая
текущее время, http://localhost/cgidate/exe?date - соответственно дата, а при
передаче параметра both - текущая дата и время. В случае если никакой из параметров
передан не был или он был ошибочен - возникнет сообщение об этом.
Данные
адреса и параметры можно непосредственно указать в коде HTML и генерировать
необходимые изменения на странице либо другие страницы переходя по
соответствующим ссылкам.
Следует
обратить внимание на то, как передавать данные через url. Знак вопроса отделяет
параметр от адреса файла, с помощью знака равенства web-приложению передается
значение данного параметра. Так как в адресной строке нельзя использовать
пробел, он заменяется на шестнадцатеричный код в таблице ASCII, то есть %20.
Но
на самом деле, если некие данные передаются от пользователя web-приложению, то
обычно для этого используют формы, а не url (хотя одно другому не мешает).
Попробуем и мы создать приложение, которое бы получало данные от пользователя,
занесенные им в форму.
Для
начала, естественно, нужно создать сам код HTML в котором бы присутствовала
форма с полями ввода, кнопкой отправки и прочими необходимыми атрибутами. При
этом form action должен содержать адрес программы, которая будет получать
данные. Значение method может быть равно как GET, так и POST. На самом деле GET
- это и есть передача параметров через url, добавляя их к адресной строке, так
как POST передает их приложению посредством стандартного потока ввода. Какой из
них лучше и удобней - решать вам, но чаще всего метод GET используется именно
для генерации страниц (достаточно взглянуть на url который возникает при работе
на поисковых серверах), тогда как второй для - передачи данных, отображать
которые в адресной строке было бы весьма накладно.
Затем
необходимо создать приложение, которое бы адекватно смогло воспринять все эти
данные со стороны пользователя. В случае если данные передавались с помощью
метода GET проблем не будет - можно действовать как в предыдущем примере. Если
же приложение получает данные от пользователя с помощью POST, всё несколько
иначе.
Необходимо
будет считывать данные из переменной окружения, а для этого мы, естественно,
должны знать данные переменные.
Гюльчитай, открой личико
Нет
в мире тайн. Особенно их мало у пользователя от web-приложения. И если мы не
знаем о пользователе кое-что личное, все прочее броузеры с легкостью отдают
web-серверу, нисколько не заботясь о приватности и желаниях того самого
пользователя. Это, конечно, нехорошо для пользователя, но хорошо для
разработчика web-приложения, поскольку для него знания - великая вещь.
Итак,
данные от пользователя web-приложению можно передать через переменные
окружения. Вот список наиболее часто употребляемых:
GATEWAY_INTERFACE
Поддерживаемая
версия CGI.
REQUEST_METHOD
Метод
запроса, может быть как GET так и POST.
HTTP_REFERER
Адрес
страницы (url), активирующей текущее приложение на web-сервере.
PATH_INFO
Путь
переданный приложению расположенный между именем приложения и строкой запроса.
QUERY_STRING
Строка
запроса, если метод - GET, добавляеться к url.
REMOTE_HOST
Имя
хоста удаленного пользователя.
REMOTE_USER
Имя
удаленного пользователя.
REMOTE_IDENT
IP-адрес
удаленного пользователя.
HTTP_USER_AGENT
Имя
и версия броузера удаленного пользователя.
С
помощью данных переменных можно получить исчерпывающую информацию о
пользователе и передаваемых данных для верного проектирования вашего
web-приложения. Конечно, этого хватит в том случае, если вы не собираетесь
подобно Большому Брату следить за каждым телодвижением пользователя.
Но
вернемся к поставленной задаче - передаче данных приложению от пользователя
через форму. Данные, которые передаются через QUERY_STRING в приложение с
помощью метода POST, достаточно просто извлечь для использования.
Ниже
листинг программы, выдающий список некоторых переменных окружения и их
значения. Узнайте кое-что о своем броузере и web-сервере.
program
CgiVars;
{$APPTYPE CONSOLE}
uses
Windows;
сonst
VarList: array [1..17] of string
[30] =
('SERVER_NAME', 'SERVER_PROTOCOL',
'SERVER_PORT', 'SERVER_SOFTWARE',
'GATEWAY_INTERFACE',
'REQUEST_METHOD',
'PATH_TRANSLATED', 'HTTP_REFERER',
'SCRIPT_NAME', 'PATH_INFO',
'QUERY_STRING', 'HTTP_ACCEPT',
'REMOTE_HOST', 'REMOTE_USER',
'REMOTE_ADDR', 'REMOTE_IDENT',
'HTTP_USER_AGENT');
var
I: Integer;
ReqVar: string;
VarValue: array [0..200] of Char;
begin
writeln('Content type: text/html');
writeln;
writeln('');
writeln('CGI
Variables');
writeln('');
writeln('CGI Variables');
writeln('');
for I := Low (VarList) to High
(VarList) do
begin
ReqVar := VarList[I];
if (GetEnvironmentVariable
(PChar(ReqVar),
VarValue, 200) > 0) then
else
VarValue := '';
writeln (VarList[I] + ' = ' +
VarValue);
end;
writeln('');
end.
За кадром
В
этой статье мы не коснулись другой и уж наверняка более обширной и сложной
темы, как создание ISAPI-приложений на Delphi. Вышеприведенные способы создания
приложений годны лишь в том случае, если вам необходимо быстрое, компактное и
не слишком сложное web-приложение. Если же вам необходим, к примеру, доступ к
базам данным, то подобный путь неприемлем.
Для
создания полномасштабных приложений для интернета в Delphi существует
специальный помощник - Web Server Application. С его помощью можно создать
приложение генерируещее динамические web-страницы, основанные на CGI, NSAPI или
ISAPI. Единственное накладываемое ограничение - непосредственно web-сервер
должен работать на базе Windows.
Одним
из главных преимуществ создания подобных приложений именно в среде Delphi
является то, что вы продолжаете работать с визуальными компонентами - это
значительно проще, чем создание приложений в других средах - возможность ошибки
в больших проектах, где используется визуальное проектирование меньше, чем в
тех, где всё описывается исключительно кодом. Кроме того, средства создания
web-приложений позволяют импортировать уже существующие приложения в
интернет-среду, что, согласитесь, немаловажно. Пока, конечно, Delphi не
обладает большим набором компонентов для web-приложений, но, видимо, уже
следующая версия этой среды обзаведется необходимыми. Но и сейчас Delphi можно
считать достаточно удобным инструментом для создания приложений,
взаимодействующих с интернетом.
Список литературы
Для
подготовки данной работы были использованы материалы с сайта http://www.hostmake.ru/