(* Рассмотрим упрощенную схему информационного взаимодействия *) (* в сети Интернет. Участниками взаимодействия являются: *) (* сервер, пользователь и администратор *) |
(* Пользователь с помощью программы-браузера (IE for Windows) *) (* - посылает на сервер запросы и *) (* - получает на них ответы в виде текстовых html-файлов, *) (* которые браузер разворачивает в экранное изображение. *) (* *) (* Для (формирования и) отправки запроса на сервер *) (* пользователю предоставляются три возможности: *) (* -1- явное указание адреса веб-страницы в окне адреса *) (* браузера: http://www.glossary.ru/pascal.htm, *) (* http://www.test.ru/cgi-bin/dip.cgi и т.п. *) (* -2- активизация гиперссылки щелчком мыши; *) (* -3- ввод данных в некоторую форму с последующей *) (* активизацией кнопки типа ОК, Готово, Записать и т.п. *) (* *) (* Во втором случае html-файл должен содержать конструкцию *) (* вида: <A href="адрес веб-страницы" ..>ССЫЛКА</A> *) (* В третьем случае html-файл должен содержать конструкцию *) (* вида: *) (* <FORM action="адрес веб-страницы" method=...>ФОРМА</FORM> *) |
(* Сервер (программный сервер Apache for OS Linux) : *) (* - развернут на компьютере провайдера; *) (* - однозначно характеризуется доменным адресом; *) (* - располагает некоторым информационным наполнением; *) (* - пребывает в постоянном режиме ожидания запросов; *) (* - способен исполнять запросы пользователя и *) (* передавать ответы в виде html-файлов; *) (* - предоставляет администратору возможности изменения *) (* своего информационного наполнения. *) (* *) (* Информационное наполнение сервера - формально - каталог *) (* файлов, внутри которого, вообще говоря, есть подкаталоги. *) (* Информационное наполнение может изменять администратор. *) (* Среди прочего сервер Apache предоставляет администатору *) (* подкаталог со стандартным именем cgi-bin (или cgi). *) (* Администратор может размещать в этом подкаталоге файлы, *) (* которые являются исполняемыми программными модулями. *) (* (* Обычно информационное наполнение сервера состоит *) (* - из некоторого количества статических веб-страниц, *) (* - из некоторого количества динамических веб-страниц, и *) (* - вспомогательных файлов: изображений, данных и др. *) (* Статическая веб-страница - текстовый файл: *) (* - оформленный в соответствии с соглашениями языка HTML, и *) (* - имеющий расширение .htm или .html *) (* Динамическая веб-страница - программа, которая *) (* выдает символ-за-символом *) (* в стандартный выходной поток *) (* текстовый файл, оформленный в соответствии с *) (* соглашениями языка HTML. *) (* *) (* Соответственно сервер способен различать *) (* статические и динамические запросы пользователей. *) (* Первые исполняются посредством копирования html-файла. *) (* Вторые исполняются посредством запуска программы *) (* (в подкаталоге cgi-bin). *) |
(* Администратор - человек, рабочее место которого позволяет *) (* модифицировать информационное наполнение сервера. *) (* Инструментами администратора являются: текстовый редактор, *) (* компилятор Free Pascal, OS Linux, FTP-программа и др. *) (* *) (* FTP-программа (FAR, absoluteFTP и др.) *) (* позволяет администратору заменять-старые-на-новые или *) (* включать-новые файлы в информационное наполнение сервера. *) |
(* dip1 : простейшая программа, формирующая html-страницу *) (* из единственной строки: *) (* <html><center><b>Привет<br>ВМК</b></center></html> *) program dip1; begin writeln('Content_type: text/html'); (* <== Обязательно *) writeln; (* <== Обязательно *) writeln('<html><center><b>Привет<br>ВМК</b></center></html>'); end. (* Вызов *) http://www.glossary.ru/cgi-bin/dip1.cgi |
(* dip2 : программа, формирующая html-страницу с указанием *) (* серверного времени подготовки ответа на запрос. *) program dip2; (* Free Pascal или Turbo Pascal *) uses DOS; var H,M,S,U : word; X,Y,Z : String; begin GetTime(H,M,S,U); (* Ф-ция библ. DOS *) Str(100+H,X); Delete(X,1,1); (* hh - часы *) Str(100+M,Y); Y[1]:=':'; (* :mm - минуты *) Str(100+S,Z); Z[1]:=':'; (* :ss - секунды *) writeln('Content_type: text/html'); (* <== Обязательно *) writeln; (* <== Обязательно *) writeln('<html><center>Серверное время<br>',X,Y,Z); writeln('<br>Нажмите Refresh (Обновить)</center></html>'); end. (* Вызов *) http://www.glossary.ru/cgi-bin/dip2.cgi> |
(* dip3 : программа, формирующая html-страницу *) (* в которой перечисляются параметры вызова. *) program dip3; (* Free Pascal или Turbo Pascal *) var I : integer; begin writeln('Content_type: text/html'); (* <== Обязательно *) writeln; (* <== Обязательно *) writeln('<html><center>'); writeln('Количество параметров = ',ParamCount,'<br>'); for I:=1 to ParamCount do writeln(I,'-й параметр = ''',ParamStr(I),'''<br>'); writeln('Нажмите Refresh (Обновить)</center></html>'); end. (* Вызов с двумя параметрами 'abc' и 'mn' *) http://www.glossary.ru/cgi-bin/dip3.cgi?abc+mn (* Вызов с одним параметром '041220' *) http://www.glossary.ru/cgi-bin/dip3.cgi?041220 |
(* dip4 и dip5 : программы, принимающие запрос *) (* пользователя, введенный с клавиатуры. *) (* Считаем, что: *) (* - браузер вывел на экран приглашение 'Введите строку:', *) (* окно ввода и *) (* кнопку 'Ввод'; *) (* - пользователь вводит в окне некоторую строку и нажимает Ввод *) (* При обработке букв русского алфавита следует учитывать *) (* перекодировку: а -> %E0, б -> %E1 и т.д. *) |
(* dip4 : Случай, когда приглашение ввода реализуется html-кодом *) (* <FORM method="GET" action="http://www.glossary.ru/cgi-bin/dip4.cgi"> *) (* Введите строку: *) (* <INPUT name="CTP"> *) (* <INPUT value="Ввод" type="submit"> *) (* </FORM> *) program dip4; (* Free Pascal или Turbo Pascal *) uses DOS; var S : String; begin S:=GetEnv('QUERY_STRING'); writeln('Content_type: text/html'); (* <== Обязательно *) writeln; (* <== Обязательно *) writeln('<html><center>'); writeln('dip4: Пользователь ввел = ''',S,'''<br>'); writeln('Нажмите Refresh (Обновить)</center></html>'); end. |
(* dip5 : Случай, когда приглашение ввода реализуется html-кодом *) (* <FORM method="POST" action="http://www.glossary.ru/cgi-bin/dip5.cgi"> *) (* Введите строку: *) (* <INPUT name="CTP"> *) (* <INPUT value="Ввод" type="submit"> *) (* </FORM> *) program dip5; (* Free Pascal или Turbo Pascal *) uses DOS; var S : String; begin Readln(S); writeln('Content_type: text/html'); (* <== Обязательно *) writeln; (* <== Обязательно *) writeln('<html><center>'); writeln('dip5: Пользователь ввел = ''',S,'''<br>'); writeln('Нажмите Refresh (Обновить)</center></html>'); end. |