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