Пособие по написанию WAP-сайтов

         

Необходимость использования приложением сценария языка Perl



Необходимость использования приложением сценария языка Perl

После того как вы познакомились с приложением, вы можете спросить: «Зачемэто приложение использует сценарий языка Perl?» Вместо этого приложение может использовать файлы формата WML для описания каждого кинофильма. Хотявариант использования индивидуальных файлов кинофильмов и работоспособен, разработка приложения будет требовать больше программирования каждыйраз, когда будут происходить изменения в афишах. Поэтому лучшей альтернативой будет ограничить все изменения одним местоположением (в нашем случае всценарии языка Perl), что позволит этому сценарию создавать индивидуальныефайлы каждый раз, когда будут происходить изменения в афишах.

Как вы уже поняли, сценарий языка Perl приложения MovieGuideWML создает впроцессе своей работы новую деку посредством чтения и записи уже существующей исходной деки. Вы можете быть удивлены, зачем приложение используетсценарий Perl, вместо того, чтобы просто создать законченное приложение безиспользования сценария. В идеальном случае реальное приложение будет получать свои данные (или потенциально новую деку) от сервера. В нашем примересценарий языка Perl показывает, хотя и довольно примитивно, симуляцию взаимодействия клиент-сервер.



Отображение кинофильмовв кинотеатре и времени их начала



Рисунок 4.2. Отображение кинофильмовв кинотеатре и времени их начала




Подробнее о приложении MovieGuide.hdml



Подробнее о приложении MovieGuide.hdml

Как и приложение MovieGuide.wml, приложение MovieGuide.hdml отображаетвремя начала кинофильмов в определенном месте. Когда приложение запускается в первый раз, браузер загружает деку MovieGuide.hdml, содержимое которойприведено ниже:

&ltHDML Version=3.0 Markable=True TTL=0&gt

&ltChoice Title=MovieGuide Method=Alpha&gt

&ltCenter&gtSelect Theater

&ltCE Task=GO Method=Post PostData=Cine8 Dest=../waplibcgi/MovieGuideHDML.pl&gtCinema 8

&ltCE Task=GO Method=Post PostData=Fid6 Dest=../waplibcgi/MovieGuideHDML.pl&gtFiddler's 6

&ltCE Task=GO Method=Post PostData=Twin Dest=../waplibcgi/MovieGuideHDML.pl&gtCedar Twin

&lt/Choice&gt

&lt/HDML&gt

Первый элемент внутри деки сообщает браузеру (или другим программистам)какая версия языка HDML используется приложением. Далее, выражение Markable=True сообщает браузеру, что он может установить закладку в исходной деке,a TTL=0 сообщает браузеру о невозможности кэширования.



Для выбора из списка требуемого кинотеатра приложение использует элемент<Choice>. Внутри <Choice> приложение использует элемент <Action> для определения имени и местонахождения сценария языка Perl (и данных, которые приложение передает сценарию), который будет запущен приложением после того,как пользователь выберет определенный кинотеатр.

Далее, для центрирования текста Select Theater (Выберите кинотеатр) на дисплеетелефона приложение использует элемент <Center>. В заключение приложениеснова использует <Choice> для определения названий кинотеатров вместе с элементами <СЕ>. Как и в случае файла формата WML, элемент <Choice> используется пользователем для выбора кинотеатра из приведенного списка. После того какпользователь произведет свой выбор, браузер выполнит специальную операцию,которая в нашем случае будет операцией вызова сценария языка Perl.



Подробнее о приложении MovieGuide.wml



Подробнее о приложении MovieGuide.wml

Когда вы запустите приложение MovieGuide, браузер загрузит деку MovieGuide.wml,которая отобразит список кинотеатров. Эта дека содержит следующий исходный

код:

&lt?xml version="1.0"?&gt &lt!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"&gt

&ltwml&gt

&lthead&gt

&ltmeta http-equiv="Cache-Control" content="max-age=0" forua="true"/&gt

&lt/head&gt

&ltcard title="Movie Guide"&gt

&ltp align="center"&gt

Select Theater

&ltselect&gt

&ltoption onpick="../waplibcgi/MovieGuideWML.pl?Cine8" &gtCinema 8&lt/option&gt &ltoption onpick="../waplibcgi/MovieGuideWML.pl?Fid6" &gtFiddler's 6&lt/option&gt &ltoption onpick="../waplibcgi/MovieGuideWML.pl?Twin" &gtCedar Twin&lt/option&gt

&lt/select&gt

&lt/p&gt

&lt/card&gt

&lt/wml&gt

Так же как и во всех деках формата WML, первые два ее элемента сообщают браузеру, какую из версий спецификации WAP поддерживает данное приложение. Внашем случае WML-страница поддерживает версию 1.0 языка XML и версию 1.1описания типа документа (DTD), разработанного ассоциацией WAP Forum.

&lt?xml version="1.0"?&gt &lt!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"&gt

Далее, за информацией о версиях, каждый WML-файл начинается с тега <wml>. Вконце каждого файла вводят </wml>, что означает окончание исходного кодаприложения. За <wml> следуют теги <head> и </head>, внутри которых находитсяинформация о самом исходном коде, включая метаданные и информацию обуправлении доступом. Многие программисты называют метаданные «данными оданных». Другими словами, в этом случае метаданные, которые считывает и обрабатывает браузер, сообщают ему, как трактовать данные.


&lthead&gt

&ltmeta http-equiv="Cache-Control" content="max-age=0" forua="true"/&gt

&lt/head&gt

Элемент <meta> позволяет точно определить метаинформацию для исходногофайла. В нашем случае строка http-eguiv="Cache-Control" сообщает браузеруWAP, что эта часть метаинформации используется системой кэширования памяти. Аналогично, строка content=maxi-age=0 сообщает браузеру, что максимальное время, в течение которого будет кэшироваться этот файл, равно нулю секунд;значит, браузер не будет кэшировать данные, а загружать данные с сервера каждый раз, когда они будут запрошены. Для этой книги значение нуля было выбрано для содействия процессу обучения читателя. При выборе нуля каждый раз,когда будут происходить изменения, они будут передаваться на телефон. В реальном приложении статическое меню, подобное этому, можно использовать поумолчанию в течение 30 дней. Последняя строка forua="true" определяет, чтозначение Cache-Control предназначено для телефона и не может быть измененокаким-либо промежуточным агентом.

За начальными элементами в исходном коде определяется единственная карта,которая в нашем случае называется MovieGuide.

Далее, в исходном коде используется элемент <select> для показа списка кинотеатров пользователю. Внутри <select> каждый кинотеатр имеет свою собственную опцию, которая определяет для браузера, какие действия выполнять далее. В случае простого приложения, браузер каждый раз загружает сценарийязыка Perl MovieGuideWML.pl, передавая ему имя выбранного кинотеатра как параметр.


Подробнее о сценарии языка Perl MovieGuideHDML.pl



Подробнее о сценарии языка Perl MovieGuideHDML.pl

Когда пользователь произведет выбор кинотеатра в приложенииMovieGuide.hdml, браузер пошлет данные файлу сценария языка PerlMovieGuideHDML.pl, который, в свою очередь, откроет определенный файл формата HDML, основываясь на названии кинотеатра, которое приложение передаетсценарию.

Далее, сценарий языка Perl будет считывать и записывать содержимое файлаформата HDML. Браузер будет перехватывать это содержимое и создавать новуюдеку, основанную на вышеупомянутом содержимом файла формата HDML. Сценарий MovieGuideHDML.pl имеет следующий исходный код:

#!/usr/bin/perl

print "Content-type: text/x-hdml\n\n";

read (STDIN, $Buffer, $ENV{'CONTENT_LENGTH'});

$FileName = "../MovieGuide/" . $Buffer . ".hdml";

open (MovieInfo, $FileName);

while (&ltMovieInfo&gt) { print; }

close (MovieInfo);



Подробнее о сценарии языка Perl MovieGuideWML.pl



Подробнее о сценарии языка Perl MovieGuideWML.pl

Как вы заметили, когда пользователь производит выбор кинотеатра, приложениеMovieGuide вызывает сценарий языка Perl MovieGuideWML.pl:

#!/usr/bin/perl

print "Content-type: text/vnd.wap.wml\n\n";

$Buffer = $ENV{'QUERY_STRING'};

$FileName = "../MovieGuide/" . $Buffer . ".wml";

open (MovieInfo, $FileName);

while (&ltMovieInfo&gt) { print; }

close (MovieInfo);

Когда запускается сценарий языка Perl, он открывает файл формата WML, соответствующий выбранному пользователем кинотеатру. Вы уже знаете, что декаMovieGuide.wml передает сценарию название кинотеатра как параметр. Используя содержимое специальной деки кинотеатра формата WML, сценарий языка Perlсоздает второй файл формата WML, который затем отобразит браузер.

Перед тем как вы узнаете, почему приложение использует второй сценарий,важно, чтобы вы поняли, как работает сценарий MovieGuideWML.pl. Первая строка сценария является просто командой, которая сообщает интерпретатору командной строки, где находится интерпретатор языка Perl. Далее print выводитданные, которые браузер использует для создания новой деки формата WML:

#!/usr/bin/perl

print "Content-type: text/vnd.wap.wml\n\n";

Сценарий использует функцию $ENV для извлечения значения параметра, в нашем случае названия кинотеатра. Далее, сценарий создает путь доступа, например, . .MovieGuide/CineS .wml посредством связи (конкатенации) пути. .MovieGuide/ и имени параметра, например, CineS, а также расширения wml:

$Buffer = $ENV{'QUERY_STRING'};

$FileName = "../MovieGuide/" . $Buffer . ".wml";

Сценарий открывает файл и начинает читать и записывать содержимое файладля создания нового файла сценария. Другими словами, сценарий считывает информацию в формате WML из входного файла, затем записывает информацию настандартное выходное устройство (stdout), откуда браузер эту информацию считывает и создает новую деку формата WML. Для управления входными даннымисценарий использует дескриптор файла, который сохраняется в переменнойMovielnf о.

Приведем операторы, которые используются в цикле while для обеспечения сценарию считывания и записи файла формата WML:

open (MovieInfo, $FileName);

while (&ltMovieInfo&gt) { print; }

close (MovieInfo);

Далее приведем исходный код файла CineS.WML:

&lt?xml version="1.0"?&gt &lt!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"&gt

&ltwml&gt

&lthead&gt

&ltmeta http-equiv="Cache-Control" content="max-age=0" forua="true"/&gt

&lt/head&gt

&ltcard&gt

&ltdo type="accept" label="Back"&gt &ltgo href="../MovieGuide/MovieGuide.wml"/&gt &lt/do&gt

&ltp align="center"&gt

&ltb&gtCinema 8&lt/b&gt &ltbr/&gt1040 South &ltbr/&gtSage Way

&lt/p&gt

&ltp align="center"&gt

.......... &ltbr/&gt&lti&gtThe Blair Witch Project&lt/i&gt &ltbr/&gt4:25, 7:30, 9:15

&lt/p&gt

&ltp align="center"&gt

.......... &ltbr/&gt&lti&gtInspector Gadget&lt/i&gt &ltbr/&gt4:40, 7:35, 9:25

&lt/p&gt

&ltp align="center"&gt

.......... &ltbr/&gt&lti&gtStory of Us&lt/i&gt &ltbr/&gt7:10, 9:30

&lt/p&gt

&ltp align="center"&gt

.......... &ltbr/&gt&lti&gtThree to Tango&lt/i&gt &ltbr/&gt7:25, 9:30

&lt/p&gt

&ltp align="center"&gt

.......... &ltbr/&gt&lti&gtThree Kings&lt/i&gt &ltbr/&gt7:05, 9:20

&lt/p&gt

&ltp align="center"&gt

.......... &ltbr/&gt&lti&gtSuper Star&lt/i&gt &ltbr/&gt7:25, 9:15

&lt/p&gt

&ltp align="center"&gt

.......... &ltbr/&gt&lti&gtMystery Alaska&lt/i&gt &ltbr/&gt7:05, 9:20

&lt/p&gt

&ltp align="center"&gt

.......... &ltbr/&gt&lti&gtRunaway Bride&lt/i&gt &ltbr/&gt7:00, 9:10

&lt/p&gt

&lt/card&gt

&lt/wml&gt

Как вы можете видеть, файл начинается со стандартной информации заголовка.Далее, файл определяет единственную карту, в которой используется серия теговабзаца <р> для вывода времени начала фильмов. Используется также элемент<do>, который позволяет пользователю вернуться к предыдущему экрану, который в нашем случае находится в файле MovieGuide.wml в директории MovieGuide:

&ltdo type="accept" label="Back"&gt &ltgo href="../MovieGuide/MovieGuide.wml"/&gt &lt/do&gt


Подробнее о вновь созданном файле формата HDML



Подробнее о вновь созданном файле формата HDML

Как вы поняли, сценарий языка Perl приложения MovieGuideHDML создает в процессе работы новую деку просто путем считывания и записи существующего содержимого исходной деки. Снова вы можете быть удивлены, зачем приложение использует сценарий языка Perl, вместо того, чтобы просто создать законченное приложение без использования сценария. В идеальном случае реальное приложение будет получать свои данные (или потенциально новую деку) от сервера. В нашемпримере сценарий языка Perl показывает, хотя и довольно примитивно, симуляцию взаимодействия клиент-сервер. Приведенные ниже элементы отображаютсодержимое файла Twin.HDML, который является одним из файлов, созданныхсценарием языка Perl на основании выбора пользователя:

&ltHDML Version=3.0 Markable=True TTL=0&gt

&ltDisplay&gt

&ltAction Type=Accept Task=GO Label=Back Dest=../MovieGuide/MovieGuide.hdml&gt

&ltCenter&gtCedar Twin &ltbr&gt&ltCenter&gt33 North Main St

&ltbr&gt&ltCenter&gt.......... &ltbr&gt&ltCenter&gtTarzan &ltbr&gt&ltCenter&gt5:00, 7:00, 9:00

&ltbr&gt&ltCenter&gt.......... &ltbr&gt&ltCenter&gtBig Daddy &ltbr&gt&ltCenter&gt4:45, 7:10

&lt/Display&gt

&lt/HDML&gt

Как вы видите, в исходном коде используется элемент <Display> для отображения содержимого на дисплее сотового телефона. В коде используется также элемент <Action> для возвращения управления обратно приложениюMovieGuide.hdml в случае, если пользователь выберет кнопку Back, появившуюсяна дисплее телефона.