10.Библиотека URL; функции escapeString, unescapeString и loadString
o тази библиотека съдържа функции, с които се проверява съдържанието, валидността и параметрите на отонсителен или абсолютен URL адрес
Стр. 16 от 25
WAP/WML 9
o функцията escapeString прекодира зададен низ към URL формат, така че управляващите символи в него се кодират в шестнадесетичен код (т.е. %hh), подходящ за предаване към CGI програми и Java сървлети (с използване на методите GET и POST)
o резюме:
синтаксис escapeString(url)
параметър typeof(url) = String
стойност на
функциятаString или invalid
var a = URL.escapeString("http://courses.fmi.uni-
пример
sofia.bg/WAP_WML/ex.html");
// a = "http%3a%2f%2fcourses.fmi.uni- sofia.bg%2fWAP_WML%2fex.html"
o функцията unescapeString прекодира зададен низ от URL формат, така че шестнайсетично кодираните управляващи символи со представени в обичаен вид
o резюме:
синтаксис unescapeString(url)
параметър typeof(url) = String
стойност на
функциятаString или invalid
var a = URL.escapeString("http%3a%2f%2fcourses.fmi.uni-
пример
sofia.bg%2fWAP_WML%2fex.html");
// a = "http://courses.fmi.uni-sofia.bg/WAP_WML/ex.html"
o функцията loadString връща съдържанието на посочения като първи параметър URL адрес; типът на зареждания документ трябва да е текстов и се специфицира като втори параметър на функцията във формат “text/”
o документът трябва да е от текстов тип, съответстващ на спецификатора;
впротивен случай (както и при невалиден URL адрес) резултатът е invalid o резюме:
синтаксис loadString(url, contentType)
параметри typeof(url, contentType) = String
стойност на
функциятаString или invalid
var a = String.replaceAt("Piue", "Pi", "Ze"); // a = "Zeue"
примери
o пример:
var b = String.replaceAt("Piue", "", "Ze"); // b = invalid var c = String.replaceAt("Piue", "pi", "Ze"); // c = "Piue"
"http://www.wapforum.org/DTD/wml_1.1.xml">
URL.escapeString: $(result1)
Стр. 17 от 25
WAP/WML 9
URL.unescapeString: $(result2)
URL.loadString: $(result3)
WMLScript код във файла ex7-09_10.wmls:
extern function codeIt(result) {
var a = URL.escapeString("test.pl?length=123");
// a = "test.pl%3flength%3d123" WMLBrowser.setVar(result,a); WMLBrowser.refresh();}
extern function decodeIt(result) {
var a = URL.unescapeString("test.pl%3flength%3d123");
// a = "test.pl?length=123" WMLBrowser.setVar(result,a); WMLBrowser.refresh();}
extern function loadIt(result) {
var a = URL.loadString("http://www.ietf.org/iesg/1rfc_index.txt","text/plain");
// Variable a now includes the whole/part_of 1rfc_index.txt. WMLBrowser.setVar(result,a);
WMLBrowser.refresh();
}
11. Библиотека URL; функции resolve, getFragment, getHost, getPath, getParameters,
getPort, getQuery, и getScheme
o функцията resolve връща пълен URL адрес от зададените сърверен адрес и локален адрес; обикновено се използва в комбинация с други функции от URL
o резюме:
синтаксис resolve(url1, url2)
параметри typeof(url1, url2) = String
стойност на
функциятаString или invalid
var a = URL.getPath(“http://courses.fmi.uni-sofia.bg”,
пример
“/WAP_WML/ex7-09_07.wmls");
// a = "http://courses.fmi.uni-sofia.bg/WAP_WML/ex7-
09_07.wmls");
o функцията getFragment връща фрагмент (предхождан от #) от зададен URL адрес; обикновено това е функция от съответнаия WMLScript компилационене модул – когато не е специфициран фрагмент, резултатът е празен низ
o резюме:
синтаксис getFragment(url)
параметър typeof(url) = String
стойност на
функциятаString или invalid
примерvar a = URL.getFragment("http://courses.fmi.uni- sofia.bg/WAP_WML/ex7-09_07.wmls#elements"); // a = "elements"
o функцията getHost връща сърверната част от зададен URL адрес; когато адресът е относителен и не съдържа сърверна част, резултатът е празен низ
o функцията getParameters връща параметрите от зададен URL адрес с параметри (които са част от адреса при обръщание към CGI програма с използване на метода GET и се отделят с ;); при отсъствие на параметри, резултатът е празен низ
o резюме:
синтаксис getParameters(url)
параметър typeof(url) = String
стойност на
функциятаString или invalid
примерvar a = URL.getParameters("cgi-bin/WAP/tel.pl;3;2?x=1&y=3");
// a = "3;2"
o функцията getPort връща локалния порт на сървера от зададен URL адрес (когато е зададен, порта се отделят с : и обикновено е 8080 или 80); при отсъствие на порт, резултатът е празен низ
o резюме:
синтаксис getPort(url)
параметър typeof(url) = String
стойност на
функциятаString или invalid
var a = URL.getPort("http://courses.fmi.uni-
пример
sofia.bg:80/WAP_WML/ex.htm");
// a = "80"
o функцията getQuery връща локалния порт на сървера от зададен URL адрес (когато е зададен, порта се отделят с : и обикновено е 8080 или 80); при отсъствие на порт, резултатът е празен низ
o резюме:
Стр. 19 от 25
WAP/WML 9
синтаксис getQuery(url)
параметър typeof(url) = String
стойност на
функциятаString или invalid
примерvar a = URL.getQuery("cgi-bin/WAP/tel.pl;3;2?x=1&y=3");
// a = "x=1&y=3"
o функцията getScheme връща протоколния спецификатор от зададен URL адрес; при отсъствие на протокол, резултатът е празен низ
o резюме:
синтаксис getScheme(url)
параметър typeof(url) = String
стойност на
функциятаString или invalid
var a = URL.getSceme("ftp://courses.fmi.uni-
пример
sofia.bg:80/WAP_WML/ex/ex1.zip");
// a = "ftp"
12. Библиотека URL; функции getReferer, getBase и isValid
o функцията getReferer връща кратка форма на относителния URL адрес, от който е извършено обръщнието към текущия WMLScript компилационен модул – обикновено това е името на заредения WML документ
o резюме:
синтаксис getReferer()
стойност на функцията String пример var a = URL.getReferer(); // a = "ex7-09_07.wml#card2"
o функцията getBase връща абсолютния URL адрес на текущия WMLScript компилационен модул
o резюме:
синтаксис getBase()
стойност на функцията String
примерvar a = URL.getBase(); // a = "http://courses.fmi.uni- sofia.bg/WAP_WML/ex7-09_07.wmls"
o функцията isValid проверява дали зададения абсолютен или относителен URL адрес е синтактично верен
o резюме:
синтаксис isValid(url)
параметри typeof(url) = String
стойност на
функциятаBoolean или invalid
Стр. 20 от 25
WAP/WML 9
примери
o пример:
var a = URL.isValid(“http:/courses.uni-sofia.bg/ex.wmls#f1");
// a = false
var b = URL.isValid(“http://courses.uni-sofia.bg/ex.wmls#f1");
var a = URL.getBase(); WMLBrowser.setVar(result,a); WMLBrowser.refresh();}
extern function giveReferer(result) {
var basic = URL.getBase();
var caller = URL.getReferer(); WMLBrowser.setVar(result,caller); WMLBrowser.refresh();}
extern function validate(result) {
var a = URL.isValid("http://wap.acta.fi/scr1.wmls#someFunction()");
// a = true
a += ", " + URL.isValid("../test.wmls#test()");
// a = true
a += ", " + URL.isValid("Yahoo!://wap.acta.fi/test");
// a = false WMLBrowser.setVar(result,a); WMLBrowser.refresh();
}
13. Библиотека WMLBrowser; функции getCurrentCard, getVar, setVar, newContext, prev,
refresh и go
o тази библиотека съдържа функции, с които се проверява или установява съдържанието на променливите в даден WML документ и да се извършва обмен между документите в браузера
o функцията getCurrentCard връща URL адреса на WML картата, която която текущо се интерпретира от браузера; адресът е абсолютен когато WML документа и компилационния модул със скрипт кода са разположени на различни сървери, а когато са на един сървер, адресът е относителен (спрямо WMLSсript файла)
o резюме:
синтаксис getCurrentCard()
стойност на
функциятаString или invalid
примерvar a = WMLBrowser.getCurrentCard(); // a = "ex07-
09_13.wmlc#card1"
Стр. 21 от 25
WAP/WML 9
o функцията getVar връща конвертираната до низ стойност на зададена променлива, която е дефинирана във викащия функцията WML документ, променливата може и да е текст, въведен в потребителска форма или избол на опция в меню
o резюме:
синтаксис getVar(var_id)
параметър typeof(var_id) = String
стойност на
функциятаString или invalid
пример var a = WMLBrowser.getVar(“URL”); // a ="ex07-09_13.wmlc#card1"
o функцията setVar записва нова стойност на зададена променлива, която е дефинирана във викащия функцията WML документ като връща стойност true ако операцията е изпълнена успешно
o резюме:
синтаксис setVar(var_id,value)
параметър typeof(var_id, value) = String
стойност на
функциятаBoolean или invalid
пример var a = WMLBrowser.setVar(varname,result); // a = "true"
o функцията newContext изтрива стека на заредените карти и установява начални стойности на променливите т.е. представлява семантичен аналог на атрибута necontext в WML командата ; предходни задания за преход като go() и prev(), които са в процес на зареждане, не се влияят от тази функция. Функцията връща празен низ
o резюме:
синтаксис newContext()
стойност на
функциятаString или invalid
пример var a = WMLBrowser.newContext(); // a = ""
o функцията prev предизвиква зареждане на предходната карта от стека на браузера в момента на връщане от WMLScript интерпретатора към режим браузер, което семантично дублира WML командата
; когато в програмния блок на скрипт функцията са декларирани обръщения към prev и go функциите, след връщане в режим браузер се изпълнява последната от тях. Функцията връща празен низ
o резюме:
синтаксис prev()
стойност на
функциятаString или invalid
пример var a = WMLBrowser.prev(); // a = ""
o функцията refresh предизвиква опресняване на потребителския интерфейс на браузера като се отразява новото състояние на контекста. Тя обикновено се ползва
Стр. 22 от 25
WAP/WML 9 като последна команда в програмния блок на скрипт функциите и е семантичен аналог на WML командата . Функцията връща празен низ при успешно изпълнение или низ с кратко съобщение за грешка, а когато микробраузера не поддържа тази функция - invalid
o резюме:
синтаксис refresh()
стойност на
функциятаString или invalid
пример var a = WMLBrowser.refresh(); // a = ""
o функцията go предизвиква зареждане и преход към зададен URL адрес в момента на връщане от WMLScript интерпретатора към режим браузер, което семантично дублира WML командата ; при няколко функции за преход (prev и go) след връщане в режим браузер се изпълнява последната от тях. Функцията връща празен низ
o резюме:
синтаксис go(url)
параметър typeof(url) = String
стойност на
функциятаString или invalid
пример var a = WMLBrowser.go(U_R_L); // a =""
o пример:
"http://www.wapforum.org/DTD/wml_1.1.xml">
Choose the target URL:
WMLBrowser.getCC: $(result1)
WMLBrowser.go (URL): $(targetURL)
WMLBrowser.go (rslt): $(result2) ^^
WMLScript код във файла ex7-09_13.wmls:
extern function examineCard(result) {
var myCard = WMLBrowser.getCurrentCard(); WMLBrowser.setVar(result,myCard); WMLBrowser.refresh();}
o функцията alert изобразява съобщение на екрана и изчаква позитивна потребителска реакция – натискане на бутон с етикет ОК; тя се използва най-често за обратна връзка при интерпретация на текст и стойности, въведени от потребителя. Функцията връща празен низ
o резюме:
синтаксис alert(msg)
параметър typeof(msg) = String
стойност на
функциятаString или invalid
пример var a = Dialogs.alert(“Must be non-negative”); // a =""
o функцията confirm изобразява съобщение на екрана и изчаква позитивна или негативна потребителска реакция – натискане на бутони със съответен етикет, чиято семантика е OK или Cancel. Функцията връща true ако потребителят избере позитивната опция и false в противен случай
функциятаBoolean или invalid
пример var a = Dialogs.confirm(“Delete?”, “Yes”, “No”); // a = false
o функцията prompt изобразява диалогов прозорец, в който потребителят може да въвежда или да редактира текст; първият параметър се интерпретира като етикет на прозореца, а вторият като текст, който се изобразява в прозореца и може да бъде редактиран. Функцията връща потребителския низ
o резюме:
синтаксис prompt(label, defaultInput)
параметри typeof(label, defaultInput) = String
стойност на
функциятаString или invalid
пример var a = Dialogs.prompt(“Age?”, “18..35 Years”); // a = 22
o пример:
"http://www.wapforum.org/DTD/wml_1.1.xml">
Your input:
Opening Dialog ...$(result2) ^^
Opening Prompt ...$(result3) ^^
Стр. 24 от 25
WAP/WML 9
WMLScript код във файла ex7-09_14.wmls:
extern function openAlert(input) {
for (var i = 0; i < String.length(input); i++) {
if (String.charAt(input,i) == ":") { Dialogs.alert("Don't use colon"); return;
}
}
}
extern function openDialog(result) {
var doContinue = Dialogs.confirm("Continue?", "Yes","No");
// Yes is OK,
// No is Cancel if (doContinue) {
WMLBrowser.setVar(result," we continued");
}
else {
WMLBrowser.setVar(result," we didn't continue");
} WMLBrowser.refresh();
}
extern function openInput(result) {
var length = Dialogs.prompt("Length:"," cm"); WMLBrowser.setVar(result,length); WMLBrowser.refresh();
}
Стр. 25 от 25
X. Програмиране в CGI 1. Приложение на CGI
WAP/WML 10
o CGI (Common Gateway Interface) е често използвана интерфейсна технология за разработване на WWW приложения, която се прилага аналогично в програмирането за WAP устройства и микробраузери
o основното различие при двата типа CGI програми – за WWW и за WAP – е само кодиращия MIME тип – text/html в WWW среда и text/vnd.wap.wml при WAP, което прави приложенията за WWW лесно преносими за WAP среда
o предимствата на CGI се състоят в
o разработването на динамични документи, т.е. документи с променящо се съдържание – вкл. в интерактивен режим
o обработване съдържанието на потребителските форми – защитен обмен на информацията; логическа обработка и генерация на отговори
o достъп до информация в бази данни
o скриптовете може да са разработени на всякакъв език – най-често Perl и С/С++
o независимост на изпълнението от потребителската платформа или браузер, тъй като CGI скрипта се изпълнява от сървера (а зависимостта от текущото натоварване на сървера е недостатък не само при интрепретирането на CGI заявки но и при зареждането на WMLScript код за локално изпълнение от микробраузерите)
o основен програмен език в CGI среда е Perl поради
o богатите му средства за работа с низове при синтактичен анализ и обработка на формите в WML и HTML
o преносимост на кода (което е характерно за интерпретаторите) – програмите се изпълняват обикновено по един и същи начин на Unix/Linux, Windows и McIntosh сървери
o удобна обарботка на входно-изходни файлове
o [свободно разпространяван продукт]
o инсталирането на CGI приложения обикновено е допустимо на повечето сървери, но изпълнението на приложенията евентуално би изисквало права за запис във файлове
o сърверните системи, с чиято помощ се подготвят и настройват CGI програми, са
Apache (http://www.apache.org/) и Xitami (http://www.xitami.com/)
2. Характеристика на CGI
o CGI е универсален интерфейсен стандарт (въведен през 1993. от NCSA – National Center for Supercomputing Applications и CERN – Conseil Européen pour la Recherche Nucléaire), който дефинира машиннонезависим интерфейс между приложението (CGI- приложение) и сървера
o за целта са стандартизирани:
o набор от абстрактни параметри и променливи на средата
o В/И канали за обмен
o характеристики на сървера и обслужвания браузер, които се интерпретират от приложението
o CGI позволява създаването на програми за динамична и интерактивна генерация на HTML и WML документи в съответствие с потребителските реакции (което е невъзможно само със средствата на markup езиците)
Стр. 1 от 6
WAP/WML 10
3. CGI приложения
o CGI-приложението се изпълнява от сървера и представлява програма, процедура или библиотечна функция, която комуникира с WWW браузера (или с WAP документ) по този интерфейсен стандарт
o то често се нарича просто скрипт, тъй като обикновено е скрипт на командния език
(shell script) или текстов файл с програма за интерпретация на съответния програмен език (макар че може за бъде и компилиран т.е. изпълним двоичен код)
o разработени са много безплатни Perl и С библиотеки, с които се улеснява програмирането на приложенията
o съхранението на данните се осъществява чрез достъп до бази данни, които също така се използват за обслужване на заявки за достъп до информация
o интерактивното генериране на документи и достъпа до бази данни позволява чрез CGI приложенията да се реализират (често в реално време) системи с многопотребителски игри, системи за обслужване на клиенти, чат приложения, страници с обяви и др.