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

         

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



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

Как было сказано выше, каждый раз, когда пользователь вводит символ акции,приложение вызывает сценарий языка Perl, который и отображает информациюо выбранной акции. На самом деле для отображения информации о конкретнойакции сценарий загружает другой файл, относящийся непосредственно к выбранной акции. Например, для отображения информации об акциях Nokia (символ NOK), сценарий загружает файл NOK.wml. Сценарий StockQouteWML.pl имеетследующий исходный код: #!/usr/bin/perl print "Content-type: text/vnd.wap.wml\n\n"; $Buffer = $ENV{'QUERY_STRING'}; if ($Buffer eq "AIRO") { $FileName = "../StockQuote/AIRO.wml"; } elsif ($Buffer eq "PHCM") { $FileName = "../StockQuote/PHCM.wml"; } elsif ($Buffer eq "PCS") { $FileName = "../StockQuote/PCS.wml"; } elsif ($Buffer eq "NOK") { $FileName = "../StockQuote/NOK.wml"; } elsif ($Buffer eq "*") { $FileName = "../StockQuote/ShowAll.wml"; } else { $FileName = "../StockQuote/BadSYM.wml"; } open (StockInfo, $FileName); while (<StockInfo>) { print; } close (StockInfo);
В нашем случае сценарий распознает только несколько символов. В реальномприложении вы не сможете разместить информацию о каждой из акций в отдельной карте формата WML. Вы будете должны размещать информацию в базеданных. После этого сценарий должен извлечь нужную информацию из базыданных и создать карту с интересующими вас сведениями в режиме реальноговремени.
Первая строка сценария представляет собой комментарий, сообщающий интерпретатору командной строки, где находится интерпретатор языка Perl. Во второйстроке сценарий помещает информацию для браузера (который перехватываетвывод сценария), какой тип данных будет отображаться. В третьей строке сценарий выделяет параметр, который ему передает исходная дека. В нашем случаеэто имя символа: $Buffer = $ENV{'QUERY_STRING'};
Далее, сценарий использует последовательность конструкций if-else для определения имени символа. Например, если пользователь выбрал символ NOK, сценарий будет использовать деку из файла NOK.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="Quote"> <do type="accept" label="Back"> <prev /> </do> <p align="center"> Stock Quotes<br/> </p> <p align="left" mode="nowrap"> <table align="left" columns="2"> <tr> <td>NOK</td> <td>Nokia Corp</td> </tr> <tr> <td>Last:</td> <td>141 3/4</td> </tr> <tr> <td>Change:</td> <td>+1 3/4</td> </tr> <tr> <td>Volume:</td> <td>4.074 mil</td> </tr> <tr> <td>Open:</td> <td>138</td> </tr> <tr> <td>High:</td> <td>143</td> </tr> <tr> <td>Low:</td> <td>138</td> </tr> <tr> <td>52 High:</td> <td>151.62</td> </tr> <tr> <td>52 Low:</td> <td>47.81</td> </tr> </table> </p> </card> </wml>
Как видите, в деке жестко указана информация об акциях. Это значит, что дляизменения информации о них, вам (или другому программисту) необходимо внести изменения непосредственно в файл. В идеале приложение должно получатьэти значения из базы данных, содержащей реальную информацию об акциях наданный промежуток времени и затем использовать эту информацию для создания новых дек в процессе работы.
Для облегчения восприятия выходной информации она организуется в таблицу.Как было сказано выше, если пользователь вводит звездочку в ответ на запрос овводе символа акции, приложение отобразит список всех доступных символов,как показано на Рис. 7.3. Чтобы обработать введенную звездочку, сценарий языкаPerl вызывает деку из файла ShowAll.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> <do type="accept"> <go href="../StockQuote/StockQuote.wml"/> </do> <p align="left" mode="nowrap"> Known Symbols<br/> <a href="../StockQuote/AIRO.wml" title="AIRO">AIRO</a> <a href="../StockQuote/NOK.wml" title="NOK">NOK</a> <a href="../StockQuote/PCS.wml" title="PCS">PCS</a> <a href="../StockQuote/PHCM.wml" title="PHCM">PHCM</a> </p> </card> </wml>
В деке используется тег <а> для отображения имен символов и определения, какую деку загружать после того как пользователь ввел выбранный символ.
Так как пользователь имеет возможность самостоятельного ввода имени символаакции, возможны ошибки при наборе имени или набор имени, несуществующегов базе данных приложения. Когда сценарий не может определить введеное имя(внутри последовательности конструкций if-else), он загружает деку из файлаBadSYM.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> <do type="accept"> <go href="../StockQuote/StockQuote.wml"/> </do> <p align="center"> Stock Quotes<br/> </p> <p align="left" mode="wrap"> Unknown stock symbol. Try again. <br/><br/>For this demo the only valid sybmols are: <br/>AIRO <br/>NOK <br/>PCS <br/>PHCM </p> </card> </wml>
Как вы видите, файл BadSYM.wml отображает сообщение для пользователя о том,что введенный символ неверен. Далее отображается список доступных имен символов.



Содержание раздела