Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002) (1160801), страница 154
Текст из файла (страница 154)
Но всЬ-серверы обладают дополнительными возможностями, которые позволяютт пм играть более активную роль. Они могут получать информацию от клиентского браузера (то есть от пользователя) и соответствующим образом менять свое 554 Глава ! 2. Сетевое программирование поведение. Мы, в сущности, используем тчсЬ-сервер для выполнения программ, и программ ированис и сЬ-страниц стало одним из последних измснсний нашей парадигмы программирования. Такие вьшолнясмые ч сЬ-страницы стали известны, как апплеты, или мини-приложения. Нскоторыс из них доступны на всех исЬ серверах. Кампания Эцп Мгсговузссшз разработала язык (ага, предназначенный для выполнения апплстов Анплеты мы обсулим в разделе 12.2.3. Формы. Форма представляет собой метод передачи информации между пользователем и к'сЬ-сервером через браузср.
Информация вводится пользователем на основс встроенных в НТМ1-файл команд. Затем зта информация передается нскоторой программе на сервере. Это так называемый файл оби(его швюзового интерфейса (Сощшоп Сассц ау 1пссг(асс, СС1). На тчсЬ-ссрвсрс обычно имеется специальный каталог с91-Ь!и, содержащий эти Сс'1-программьь Синтаксис элемснта <Тоги> задается как <ГСГЭ Ивгцсб = "Чин" всС1СП ='винсвнивинй СШ -сценарий' > текет <Нсгп> где тип можст быть или ОЕТ, или РО5Т.
При использовании метода ОЕТ данные пере- лаются СС!-сцена!тию чсрез нсремснную окружения ООЕРТ 5ТР1!чб, а в случае, если используется мстол РО5Т, информация переластся через обычный процесс чтения. Сцснарий С61 можст быть программой на С или на )ака, по чаще это вЬе!1-сцснарий, илн программа на языке ТС1 (Тоо! Сошп1апг! Евшйнаяе), или сценарий Рег!. Мы уже обсуждали Рег! как язык сценариев создания процессов с большими возможностями для обработки рггулярных выражсннй (сль главу 3).
Рог! оказался также подходящим языком для обработки данных форм НТМ1.. Мы приводим краткос описаннс сцспарисв Рсг! в разделе 12.2.2. Существует несколько элсментов, которые позволяют передавать информацию программе СС'!. Элсмепт <1прнС Суре = СехС папе="инв" иве = число> в больпншствс браузсров отображает па страницс НТМ1 поле ввода шириной в чиспс символов, заданных в атрибуте в1ге. Пара (имя — заеденный польэователеж в поле ивог)и текст) псредастся программе СС!, когда пользователь отпривляелй зти ланпыс на сервер. Эта пара может быть орг;шизована в Рог! как асс<йцнативный массив элементов данных для ассоциирования указанного имсни и введенного пользователем текста.
Тсг <!прцС Суре=вцбвпг иа1ие = "Отправить "> создаст кнопку с надписью Отправить, щелчок мышью па которой отправляет ввсденныс в форме лапшяе программе СС1 па ссрвсрс. Тсг «прцС Суре = "гевеС" на!це = "сброс" > создает кнопку с надписью сброс, щелчок на которой вызываст очистку вссх введенных в форме ланных и позволяет ввести новые данные до отправки формы на ссрвер. С помощью тога <й прнС>, задавая соответгтвующис значения атрибута Суре, можно создавать в форме другие элемсн ты управления.
Тсг <1прпС Суре = рав висгб> создает также текстовос иоле для ввода пользователем информации с одним отличием: вводимый текст пс отображастся на экранс (но умолчаннхй вмссто любого символа отображается символ «звездочка» (*). Как следует из его названия, он используется для ввода пароля. Тег <в прнС Суре = сцесЕЬсх> создаст элемент управления флажок, который может быть выбран нли сброшсн независимо от других флажков в форме. С помощью тегов <1прцС Суре = гаюо> можно создать группу переключатслсй, из которых можст быть выбран только олин.
Для этого следует при создании нерсключатслсй группы зздать для них одно и то же значение атри- 12.2. Всемирная паутина ЧЧЧДЧ 555 бутапапе.Тег<гехтагеа паве =- "паве" гснз = "пцв1" сс!з = "пэв2">,какитег<!при!>, создает текстовое иоле ввода, но с той разницей, что создаваемое иоле может быть многострочным (значение атрибута гоиз больше единицы). Атрибут со1 з задает ширину текстового поля в символах. Использование форм, сценариев СС! и динамического построения файлов НТМ В позволяет ЮЧуЪЧ функционировать так же, как функционирует любая другая компьютерная среда.
С помощью описанных средств можно разрабатывать поисковые системы, игровые программы и другие приложения, которые значительно повышают популярность ЪЧ~Ч)Ч. 12.2.2. Сценарии С6! На рис. 12.6 показано взанлщдействие между ч сЬ-страницей и сценарием СС1, написанным на языке Рсг!. Это простой пример клиент-серверного взаимодействия.
Ввод 11 М. в адресной строке ч сЬ-браузсра !стрелка 1 на рис 126) инициирует пересылку соответствующего файла НТМ1. с сервера на локальный компьютер, где браузер отображает полученный файл па экране !стрелка 2 иа рис. 12.6). После того как пользователь ввел необходимую информацию в поля формы полученной страницы НТМЕ., кнопка Отправить используется для отправки этой информации на сервер, где она обрабатывается сценарием хас11оп, написанным на языке Рег! (стрелкаЗ).
Сценарий Рег! обрабатывает полученные данные и создает НТМ1.-страницу, которая отображается в окне браузера пользователя. Эта страница Ев нашем примере) содержит информацию, которая была нсрсдапа на сервер!стрелка 4). Фактический код, который осуществляет это взаимодействие, приведен в листинге 12.2. Взаимодействие между чеЬ-страи, написанной па НТМ1., и сценарием СС! определяется элементом <гогв, приведенным в этом листинге. Последовательность действий, опредсляемая в этом листинге, такова. 1.
Атрибут а с!|оп элемента <1огв> указывает, что СС'1-программа хас11оп будет активизирована при передаче данных формы на сервер. 2. Текст, введенный пользователем в первое поле ввода формы, будет ассоциирован с именем х1'1гзЕ первого элемента <1прэт>, а текст, введенный во второе поле, — с именем х!аз1 второго элемента <1прць>, х11гзг и х1аз1 — произвольные имена, выбранные хусЬ-дизайнероы, который создавал данную страницу. 3. Когда пользователь щелкает мышью на кнопке Отправить!в предположении, что были введены имена Магч!и и Хе!!гоч йг в первое и второе поля соотвезствеино), на сервере вызывается программа хэсш оп, которая читает переменную окружения ООЕЙУ >ТЙ!НО со значением хЕ1гзг=иагн1п7х!аз1=7е1Есн11г.
На сервере Рег1-сценарий хас11оп действует следующим образом: 1. Сначала сценарий информирует опсрапионную систему о том, что он является программой Рог! !первая строка в листинге 12.2, б). 2. Результат работы этой программы посылается обратно хчсЬ-браузеру. Мы хотим, чтобы это была страница НТМ1., которую чей-браузер слщжет отобразить. Выводимая сценарием строка Сопгепт-1уре; Еех17Ьгв! сообщает ч еЬ- браузсру, какие данные будут передаваться далее, — в данном случае это ч еЬ-страница с текстом в формате НТМ1. 556 Глава 12.
Сетевое программирование Каталог св1ньгп Рис. 12.6. Сценарии С61 3. Каждый последуюший оператор рг~п1 языка Рег1 генерирует отображение очередной части страницы НТМЕ.. Программа таким образом динамически создает лчеЬ-страницу, написанную па НТМ1., которую н будет отображать лчеЬ-браузер. 4. Сушественной частью алгоритма программы хает~оп является цикл тогеасЬ.
Первая функция зр1~1 разбивает содержимое параметра ДЖЕКУ ЕТК!И6 среды окружения операционной системы (хэш-массив ФЕНт' в программе Рег1), созданного элементом 1!ТМ) <1огп>, на последовательность строк, используя в качестве разделителя символ а. Тем самым создается массив с двумя элементами (х11гзл = Иагюп. х1азг = Ее!Еогпгз). Оператор 1огеасЬ и функция зр111 могут работать с произвольным количеством имен. 5. Вторая функция зр1~1 разбивает каждый элемент созданного первой функцией зр1~ Е массива надва значения, используя в качестве разделителя символ =, которые присванваются соответственно переменным 1Кеу и луа1.
Таким образом создаются пары значений (х1~ гз1, йагн~ и) и (х1а з1, 1е1 Кои~ тх), которые затем сохраняются в ассоциативном массиве $сер, первое значение пары используется в качестве ключа, а второе — в качестве его значения. В дальнейшем доступ к сохраненным переданным пользователем дан- 12.2. Всемирная паутина)!)Пдд)Ч 557 ным может быть осуществлен с помощью конструкций 5Еир('хт1гат') и 5()пр('х1авт').
Листинг 12.2. НТМЕ-страница и сценарий Рег! а) ччеЬ-страница <НТИЕ> <НЕАО> <Т!ТСЕ>тест счз-сценария</ПТЕЕ </НЕАО> <ВОПЧ> <р> зто припер считывания двух злеиентов данных, введенных пояьзоватспен на ыеЬ-страницу: <Гоги асыоп-"ссп -Ь~ п/хасмоп" Фегцоб=рот> <р Иня = «прц! гуре-техт пане-хгзгвг взде=10> <Ьг>Фаиипия - <)прот дурсеьех! пане=к!азд зые=20> «Ьг> <зпрцг гурегюЬФзт ча1цс=Поспать> <тпрц! Ьуре=гевет ча1це-Сбросить> </Гоге> <ЛЮОТ> </НТНЕ> б) С61-сценарий хасбтоп, написанный на языке Рег! 0'/цзг/Ьтп/рег) рюпь "Сопдепг-Туре: тех!/ьгл)'тптп".
ргзпт "~МФ)>~пеас~)п": ргзпт "<гзт1е>Припер РЕЙС-сценария</ттд1е \п"; ргзп! "</Ьеаб><Ьоцу>)п"; ргзп! "<р>ООЕЙЧ 5ТК!НО ЛЕНЧ('ООЕКЧ 5ТК!НО'))п"; Тогеасц ! вр1здТ /б/. ФЕНЧ('ООЕКЧ 5ТК!НО'))) ( (адеу. Ъча1 ) = вр1тг! /-/, $, 2). абер(адеу) = ача): ) ргтп! "<р> Иня: <Ь>!!ар['х!згвв')</Ь \и"; рг!пт "<р> Фанипия: <Ь>дояр('х1аас')</Ь>)п", рюпд "</Ьоцу></Ьса)>)п" Этот пример показывает только основной механизм )взаимодействия между тчеЬ- страницами и С61-спспарпями. Существуют и другис аспекты: 1. Однажды переданные и дскодпрованные в операторе !ОгеасП параметры формы в дальней)нем могут быть использованы программой па Рсг), напримср, для получения информации из файлов, расположенных на сервере, для оформления заказа пользователя т)(/сЬ на какие-либо товары или лля выполнения какой-либо иной задачи.
2. Представленная в листинге 12.2, б операция выделения из перемснной окружетмтя Я~УЕЕУ ВТЕ11чС переданных данных формы (вторая т(зут)кция вр1) Ь) опредслсна нс полностью. Дело в том, что прп перслачс на сервер данных формы в строкс запроса (метод ОЕТ) вес пробслы во введенных пользователем в поля формы данных заменяются на символы -'. Таким образовт, Пробелы могут зал~сняться нс только на символ И цо и ня шестнадцатеричное значение пробела т20 Замена пробслон, «синопов хыщпн строк и других гпсциатьных символов и строкс запроса ня их шсстнядкпсрнчныс зпнчспин, начин иогцисся с символа т, называется Е)ЙЕ-копи!зонанисм. — /Три- меч. науч, ред. 558 Глава 12.