Створення 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
Рядок
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/