Подробнее о приложении WapMail.wml
Подробнее о приложении WapMail.wml
Когда вы запустите приложение WapMail, дека WapMail.wml отобразит пользователю приглашение ввести адрес для ответа, электронный адрес получателя, темусообщения и сам текст сообщения. После того как пользователь введет всю этуинформацию, приложение запустит сценарий языка Perl WapMailWML.pl, которыйи перешлет это сообщение электронной почты. Дека WapMail.wml имеет следующий исходный код:
<?xml version="1.0"?> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head>
<meta http-equiv="Cache-Control" content="max-age=0" forua="true"/>
</head>
<card id="WAPMail" title="WAP Mail">
<onevent type="onenterforward">
<refresh> <setvar name="SendTo" value="" /> <setvar name="MsgSubject" value="" /> <setvar name="MsgText" value="" /> </refresh>
</onevent>
<onevent type="onenterbackward">
<refresh> <setvar name="SendTo" value="" /> <setvar name="MsgSubject" value="" /> <setvar name="MsgText" value="" /> </refresh>
</onevent>
<do type="accept"> <go href="#Confirm" /> </do>
<p align="center">
WAP Mail<br/>
</p>
<p align="left">
Reply To: <input name="ReplyTo" type="text" format="*m" />
</p>
<p align="center">
WAP Mail<br/>
</p>
<p align="left">
Send To: <input name="SendTo" type="text" format="*m" />
</p>
<p align="center">
WAP Mail<br/>
</p>
<p align="left">
Subject: <input name="MsgSubject" type="text" format="*M" />
</p>
<p align="center">
WAP Mail<br/>
</p>
<p align="left">
Message: <input name="MsgText" type="text" format="*M" />
</p>
</card>
<card id="Confirm">
<do type="accept" label="Send"> <go method="post" href="../waplibcgi/WapMailWML.pl"> <postfield name="ReplyTo" value="$(ReplyTo)&"/> <postfield name="SendTo" value="$(SendTo)&"/> <postfield name="MsgSubject" value="$(MsgSubject)&"/> <postfield name="MsgText" value="$(MsgText)"/> </go> </do>
<p align="center">
WAP Mail
</p>
<p align="left" mode="wrap">
Reply-To: $(ReplyTo) <br/>To: $(SendTo) <br/>Subject: $(MsgSubject) <br/>Text: $(MsgText)
</p>
</card>
</wml>
Так же как и во всех деках формата WML, первые два ее элемента сообщают браузеру, какую из версий спецификации WAP поддерживает данное приложение. Внашем случае WML-страница поддерживает версию 1.0 языка XML и версию 1.1описания типа документа (DTD), разработанного ассоциацией WAP Forum.
<?xml version="1.0"?> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
Далее, за информацией о версиях, каждый WML-файл начинается с тега <wml>. Вконце каждого файла вводят </wml>, что означает окончание исходного кодаприложения.
За <wml> следуют теги <head> и </head>, внутри которых находитсяинформация о самом исходном коде, включая метаданные и информацию обуправлении доступом. Многие программисты называют метаданные «данными оданных». Другими словами, в этом случае метаданные, которые считывает и обрабатывает браузер, сообщают ему, как трактовать данные.
<head>
<meta http-equiv="Cache-Control" content="max-age=0" forua="true"/>
</head>
Элемент <meta> позволяет точно определить метаинформацию для исходногофайла. В нашем случае строка http-eguiv="Cache-Control" сообщает браузеруWAP, что эта часть метаинформации используется системой кэширования памяти. Аналогично, строка content=max-age=0 сообщает браузеру, что максимальноевремя, в течение которого будет кэшироваться этот файл, равно нулю секунд;значит, браузер не будет кэшировать данные, а загружать данные с сервера каждый раз, когда они будут запрошены. Для этой книги значение нуля было выбрано для содействия процессу обучения читателя. При выборе нуля каждый раз,когда будут происходить изменения, они будут передаваться на телефон. В реальном приложении статическое меню, подобное этому, можно использовать поумолчанию в течение 30 дней. Последняя строка forua="true" определяет, чтозначение Cache-Control предназначено для телефона и не может быть измененокаким-либо промежуточным агентом.
Для отслеживания пользовательской информации приложение использует четыре переменные: ReplyTo, SendTo, MsgSubject, MsgText. За информацией заголовка деки следуют два элемента <onevent> для очистки значений переменныхSendTo, MsgSubject, MsgText в случае, если пользователь будет двигаться впередили назад по приложению, используя команды <до> и <prev>. Приложение считает адрес ReplyTo неменяющимся и поэтому не производит очистку соответствующей переменной каждый раз.
Как вы уже поняли по Главе 9, событие Onenterforward происходит, когдапользователь перемещается к карте деки с помощью команды <до>.
Аналогично,когда пользователь использует команду <prev>, происходит событие
пользователь использует команду <prev>, происходит событие Onenterbackward. После того как приложение передает сообщение сценарию языка Perl, сценарийиспользует элемент <до> для возврата в начало для того, чтобы пользовательсмог, если желает, послать еще одно сообщение.
Далее, в исходном коде деки следуют элементы <input> для определения формата четырех описанных выше переменных. Элементы <input> внутри деки записаны в том же порядке, в котором они появляются на дисплее. Заметьте также,что элементы <input> определяют формат для каждой из переменных. Формат*М позволяет вводить алфавитно-цифровые знаки смешанного регистра, числаили имена, начинающиеся, по умолчанию, со знака в верхнем регистре. Вообще,оба форматы *М и *т позволяют вводить имена, числа и алфавитно-цифровыезнаки, причем М - по умолчанию первый символ верхнего регистра, m - по умолчанию первый символ нижнего регистра.
После ввода пользователем всех данных, приложение передает управление картеConfirm (Подтверждение), которая отображает сообщение о данных, предназначенных для пересылки. После выбора пользователем опции Send, карта пересылает данные сценарию языка Perl WapMailWML.pl.