# отпечатайте съдържанието на другите скалари от списъка
print ".
\n";
print "
\n"; print "\n"; print "\n";
2. Библиотека с WWW функции LWP
o LWP – Library for WWW access in Perl – е библиотека с функции за достъп до уеб- съдържание по протоколите http, https, gopher, ftp, news, file и mailto; когато функциите ú не се поддържат от инсталирания интерпретатор, тя може да бъде заредена (заедно с други полезни модули и информация) например от http://www.perl.com/CPAN/ (по-конкретно от http://www.perl.com/CPAN/modules/by- module/LWP/)
o функциите от тази библиотека поддържат механизма заявка-отговор, характерен за НТТР – заявките на браузера, които ползват LWP, се оформят като обект request (от класа HTTP::Request) по синтаксис, напомнящ Java, съответно отговорите на сървера се трансформират също в обектната форма response (от класа HTTP::Responce)
o атрибути на request са method (със стойности GET и POST) и url; атрибут на response e
content
o класът LWP::UserAgent поддържа интерфейса между браузера и WWW сървера и приложението обикновено декларира само един обект от този клас
3. Елементи на обектното програмиране в Perl
o декларация на клас, чиито методи се ползват в програмата, се прави с командата use
в началото на кода:
#! c:\perl\bin\perl use LWP::UserAgent;
o функцията new се ползва като конструктор на нов обект от даден клас, като го присвоява (заедно с методите и атрибутите му) на идентификатор на скалар, след това елементите на обекта са достъпни по обектен идентификатор и етикет на елемента
(метод или атрибут) с разделител оператора ->
o цикълът на запазване на информация от отдалечен сървер се дефинира приблизително по следния шаблон:
$ua = new LWP::UserAgent;
$ua->agent(“MyAgent/0.07”); #creating a network name for the object in its
#property agent
my $req1 = new HTTP::Request’GET’,’http://www.eurorail.com/railsked.htm’;
#the pair of $req1 attributes (method and url) is
#defined during declaration
$req1->content_type(‘application/x-www-form-urlencoded’); #assigning a property my $resp = $ua->request($rec1); #caching the response obtained via the method
#request() in a local scalar open(FN,”>/rail/schedule/today.txt”);
print FN $res->content; #storing the loaded information locally
Стр. 2 от 7
WAP/WML 12
close(FN);
4. Средства за интерактивни приложения в Perl
o в WAP интерактивност се постига като с познатите средства на WML – формите – потребителя се насочва да въведе или избере определени данни, които след това се предават към CGI скрипта за генерация на адекватно съдържание
o за да се даде възможност на потребителя да дефинира собствени стойности на аргументите в WML картата се използват командите и
o N.B.: интерфейсът към скрипт приложението се базира на услугите на HTTP сървер, чиято задача е да предаде заявките съгл. CGI стандарта и да стартира съответния скрипт
o в случая на Apache сървер е необходимо предварително сърверът да бъде стартиран; приложенията се разполагат в директорията Apache\cgi-bin\ и при локална работа обръщенията към тях са на адрес http://localhost:port/cgi-bin/my_script.pl; при работа с отдалечени заявки се използва адекватен адрес на сървера вместо localhost
5. Обслужване на интерактивните заявки в Perl
o в зависимост от метода на предаване, потребителските данни се разполагат или в системната променлива QUERY_STRING или в стандартния вход с индикатор на дължината в CONTENT_LENGTH
o четенето на информацията от стандартния вход – както и от всеки канал – става с командата read(_pipe_, _string_, _length_) – напр:
read(STDIN,$cache_string,$ENV{CONTENT_LENGTH}); #caching user data; method POST
o потребителските данни са във формàта име=стойност с разделител &, което налага разделянето им на съставни компоненти в асоциативен масив
o за целта входния низ най-напред се разделя по двойки име-стойност [step1], след това се разделят двата компонента на двойките [step2], прекодират се специалните символи от формат %hh към xhh [step3] и накрая получените стойности се съхраняват в асоциативен масив [step4]:
read(STDIN, $save_string, $ENV{CONTENT_LENGTH});
@prompts = split(/&/,$save_string); #step1: array of pairs foreach (@prompts) {
($tmp1, $tmp2) = split(/=/,$_); #step2: split each pair by =
\n";
o пример 2 – карта за събиране на персонални данни на потребителите и съпоставяне с регистрираните средни стойности (регистрирането на данни изисква права на запис – променете файла при необходимост):
"http://www.wapforum.org/DTD/wml_1.1.xml">
Стр. 4 от 7
WAP/WML 12
скрипт код във файла ex9-12_005.pl
#! c:\perl\bin\perl use CGI qw(:standard);
# Reading from the form
read(STDIN, $save_string, $ENV{CONTENT_LENGTH});
@prompts = split(/&/, $save_string);
foreach (@prompts) {
($tmp1, $tmp2) = split(/=/,$_);
$tmp2 =~ s/\x2b/\x20/g;
$tmp2 =~ s/%2C/\x2c/g;
$tmp2 =~ s/%28/\x28/g;
$tmp2 =~ s/%29/\x29/g;
$fields{$tmp1}=$tmp2;
}
$age = $fields{'age'};
$sex = $fields{'sex'};
$systol = $fields{'systol'};
$diastol = $fields{'diastol'};
# Which file should be opened:
if ($sex eq "Man") { $file = "vman".$age.".dat"; }
o поради необходимостта от съответствие между заявката и функциите на скрипт приложенията, понякога е целесъобразно самото скрипт приложение да генерира WML картата, с която става обръщението към него (т.е. да генерира както картите с отговора, така и картите с формите за заявка)
o възможно е заявката и отговора да бъдат комбинирани в една карта, при което скриптът следи дали е постъпила нова заявка и я обслужва, като актуализира съдържанието на отговора си
o пример – мобилен телефонен указател със съдържание, дефинирано от потребителя; обръщението към скрипта предизвиква генерация и зареждане на карта с таблица за въведените данни – ако има такива – и също (в долната част на екрана) форма за добавяне на нови записи (във файла telmemo.txt); след добавяне на нов запис таблицата се пресортира и картата се зарежда отново чрез “рекурентно” обръщение към същия скрипт (променете кода така че зарежданата таблицата да съдържа само определено от потребителя подмножество записи):
#! c:\perl\bin\perl use CGI qw(:standard);
Стр. 6 от 7
WAP/WML 12
# User input (form data):
read(STDIN, $save_string, $ENV{CONTENT_LENGTH});
@prompts = split(/&/, $save_string);
foreach (@prompts) {
($tmp1, $tmp2) = split(/=/,$_);
$tmp2 =~ s/\x2b/\x20/g;
$tmp2 =~ s/%2C/\x2c/g;
$tmp2 =~ s/%28/\x28/g;
$tmp2 =~ s/%29/\x29/g;
$fields{$tmp1}=$tmp2;
}
$name = $fields{'name'};
$name =~ s/%(..)/pack("c",hex($1))/ge;
$tel = $fields{'tel'};
$tel =~ s/%(..)/pack("c",hex($1))/ge;
# If fields are not empty values are saved:
XIII. Публикуване на WAP съдържание. Разширения на WAP
технологията
1. Документи и директории
o картите и скриптовете за WAP могат да се разработват с елементарни тeкстови редактори, но е наложително да бъдат тествани преди публикация – с емулатори и реални устройствa от различен тип и от различни поколения
o съответните програми се съхраняват в текстов формат и имената на файловете имат стандартни разширения - .wml за картите, .wmls за компилационните модули, .pl за Perl скриптовете и .java за сървлетите
o тъй като някои редактори като Notepad и WordPad автоматично слагат разширение .txt за текстовите файлове, е необходимо името на файла да се цитира в двойни кавички (при което се приема без корекция) и изобщо да се проверява коректонстта на инфраструктурата
o свързаните карти се разполагат в една директория, тъй като това опростява декларирането на преход от типа
Go next
и същевремнно се опростява мигрирането на съдържанието към друг сървер
o графичните изображения се записват в отделна директория – това създава по-ясна и достъпна за промени структура особено при по-големи проекти
o при разгърната структура на директориите в главната директория се разполага файла
o за .wml картите и .wmls компилационните модули съществува още един формат - .wmlс и .wmlsс – в който кода конвертиран до двоичен формат; този код може да бъде предаван директно до микробраузера без да се използва шлюз (в режим на работа на настройка или за код, който се съхранява и интерпретира от джобни преносими устройства без зареждане от сървер)
o публикуваните WAP документи трябва да имат права за четене и изпълнение
o при запис на документите в сървера (обикновено с FTP клиент) трансфера трябва да е настроен за текстов режим за документите и в двоичен режим за файловете с компилиран (двоичен) код и за графиката
2. Графични документи
o стандарта за графика в WAP е Wireless Bitmap (.wbmp) но повечето нови устройства поддържат също GIF и JPEG компресиите; за съвместимост обаче е препоръчително публикуваната графика да е конвертирана до .wbmp
o размера има значение: екраните на първите мобилните телефони с WAP поддържат графика с размери 95х65 пиксела (65 реда), като обикновено се допуска само вертикално плъзгане, а прекомерните десни колони не се изобразяват
o налични са свободно разпространявани програми за конверсия на графичните стандарти до .wbmp – включително WAP модула на Nokia, използван в упражненията
3. Типове документи
o една от настройките на сървера е деклариране на типовете на файловите разширения
– съгл. MIME стандарта – тази настройка се прави от системния администратор на сървера
o .wmlsc application/vnd.wap.wmlscript o .wbmp image/vnd.wap.wbmp
4. Настройка на сървера – вж. упр.9.
5. WTA
o WTA – Wireless Telephony Applications – е разширяване стандартните WAP функции на мобилните терминали (т.е. допълнение към WML/WMLScript) с възможности за обслужване на конвенционални заявки през WAP и също push-технологията за предаване на WAP съдържание към микробраузерите по инициатива на сървера, вместо по заявка на клиента
o WTA стандартизира обслужването в реално време на асинхронни заявки (напр.
позвъняване) докато потребителя работи с микробраузера
o повечето от функциите на WTA се контролират не от потребителя на устройството, а от мобилния оператор; някои от функциите обаче се поддават на потребителска настройка
6. WTA библиотеки и услуги
o WTA се състои от стандартни библиотеки и интерфейси; библиотеките са три:
o мрежовоНЕзависими функции – за процедурите на приемане или иницииране на телефонни обаждания (които могат да се интегрират в WML/WMLScript кода)
o мрежовозависими функции – специфични за всяка мрежа
o настройки – за персонална настройка на WTA функциите
o списъкът библиотеки включва:
o Public WTAI (wp) – общодостъпни функции
o Voice Call (vc) – обаждания и статус на заявките
o обръщение с протоколния спецификатор wtai://_url_ в команда за обобщено събитие + (в WML карта)
o обръщение към функция от библиотеката WTAPublic (от WMLScript функция)
o WTA услугите (и мрежово-независимите и специфичните) са ориентирани към персоналните комуникации – като поддържане на телефонен указател и текстови съобщения
o синтактични примери:
Pick a call:
extern function deal_nmbr(number) { WTAPublic.makeCall(number); WMLBrowser.refresh(); }
Стр. 2 от 5
WAP/WML 13
extern function new_nmbr(number,name) { WTAPublic.addPBEntry(number,name); WMLBrowser.refresh(); }
7. WTA сървер
o WTA услугите се разполагат на WWW сървер и комуникират с устройствата посредством шлюзове по схемата на WAE (WML/WMLScript съдържание)
o за WTA се ползва обаче отделен порт на локалните устройства и съдържанието се буферира локално, преди да бъде интерпретирано от устройството; шлюзът идентифицира и проверява надеждността ан сървера, осигуряващ WTA (или push) съдържанието
o публичната WTA библиотека е достъпна на адрес wtai:/// (;
)* [! ]
8. Push технология
o push технологията дава възможност за изпращане на съдържание без заявка от клиента, което разширява възможностите за:
o рекламна дейност (респ. финансиране на мрежата и съдържанието)
o услуги от тип бюлетини или друга потребителски-ориентирана (тематична)
информация
o технологията се осигурява от специализирани протоколи: Push OTA и PAP (Push Access Protocol), както и от добавъчна инфраструктура: сървер-инициатор (origin server, push initiator) и push-шлюз
9. Push архитектура
o push операциите се стартират от сървер-инициатор;
o съдържанието се предава до push-шлюз по протокола PAP/НТТР и е в XML формат; след това съдържащия се в него WML документ се предава до терминала по протокола Push OTA в двоичен формат (поради което винаги се прилага протоколна конверсия)
o Push OTA е минимален по функции протокол, който добавя данни в WSP хедъра
o за контролиране на процеса на приемане push архитектурата предвижда изпълнението на специално приложение от мобилния терминал – SIA (Session Initiation Application) – което приема ОТА заявките за специфична информация и установява отделна WSP сесия със шлюза за приемане на push съобщения
o освен това приети push съобщения не се представят от терминала без да е активиран
o освен SIA се изпълнява и диспечерска програма, която прави разбор на контролните данни от push съобщението и го предава на интрпретатора (обикновено браузера)
12. Push – клиентски цикъл
o цикълът на предаване на push съобщение към терминала включва следните стъпки:
o шлюзът заявява на SIA предаването на ново съобщение
o SIA стартира WSP сесия с шлюза
o шлюзът предава съобщението към диспечера
o диспечерът предава съобщението към интерпретатора
o когато интрепретатора (браузера) се активира (или е активен) push съобщението се изобразява на екрана