三、關(guān)于WAP開(kāi)發(fā)的常見(jiàn)問(wèn)答 1.開(kāi)發(fā)WAP軟件需要哪些工具? 為了開(kāi)發(fā)WAP應(yīng)用程序,需要一個(gè)WAP網(wǎng)關(guān)(注意:這里的網(wǎng)關(guān)可能是指支持WML的服務(wù)器。可以通過(guò)配置WWW服務(wù)器達(dá)到這個(gè)目的)和WAP工具包。工具包應(yīng)當(dāng)包括模擬器和能讓開(kāi)發(fā)者瀏覽WML網(wǎng)頁(yè)。WML頁(yè)面的開(kāi)發(fā)和HTML頁(yè)面的開(kāi)發(fā)一樣,可以使用Notepad或者其他文本編輯器來(lái)進(jìn)行編輯。 2.有哪些公司現(xiàn)在提供這樣的開(kāi)發(fā)環(huán)境? Nokia、Ericsson、UpPhone和Motorola都提供免費(fèi)的WAP網(wǎng)關(guān)和工具包。 Nokia:Nokia Toolkit和Nokia WAP Server。 Ericsson:Ericsson R320和WapIDE。 UpPhone:UpPhone SDK。 Motorola:Motorola ADK。 3.開(kāi)發(fā)WAP應(yīng)用一定要有WAP手機(jī)嗎? 不是,當(dāng)開(kāi)發(fā)WAP應(yīng)用的時(shí)候,不一定需要WAP手機(jī)。模擬器可以幫助開(kāi)發(fā)者解決大部分的問(wèn)題。但是如果是開(kāi)發(fā)商業(yè)網(wǎng)站,特別是想知道各種移動(dòng)電話在顯示WML頁(yè)面上的差別的時(shí)候,最好是配備一個(gè)。目前各種手機(jī)對(duì)WML標(biāo)記的支持和中文的支持狀況大不相同,因此WAP手機(jī)還是必要的。 4.開(kāi)發(fā)者需要一個(gè)WAP網(wǎng)關(guān)嗎? 不是很必要。如果只想進(jìn)行簡(jiǎn)單的WAP內(nèi)容服務(wù),可以使用現(xiàn)有的Web服務(wù)器(只需要修改MIME類型)。移動(dòng)電話會(huì)通過(guò)坐落在本地的網(wǎng)關(guān)連接到你的服務(wù)器上。 但是在網(wǎng)關(guān)上駐留開(kāi)發(fā)者的程序有很多好處。既然開(kāi)發(fā)者的程序是網(wǎng)關(guān)的一個(gè)部分,開(kāi)發(fā)者就可以知道呼叫號(hào)碼、身份、位置等等。 5.可以看到WML的源代碼么? 如果開(kāi)發(fā)者使用SDK瀏覽的時(shí)候?qū)⒛軌蚩吹?/font>WML的代碼。如果只有一個(gè)HTML瀏覽器,可以訪問(wèn)“Fetch Page”服務(wù)(http://www.webcab.de)來(lái)取得代碼。這個(gè)可以顯示在Internet上的任何WML頁(yè)面中。 6.可能在WML中加入applets嗎? 不能。 7.可以使用HTML開(kāi)發(fā)工具來(lái)開(kāi)發(fā)WAP應(yīng)用嗎? 在大多數(shù)情況下開(kāi)發(fā)工具是使用基于PC的瀏覽器。HTML、JavaScript和Java對(duì)于WAP開(kāi)發(fā)來(lái)說(shuō)都沒(méi)有用處。但是,越來(lái)越多的開(kāi)發(fā)工具在加入對(duì)WML的支持。 Allair的Cold Fusion 4.5和 HomeSite已經(jīng)有WML支持,雖然Allair也許需要清除一些BUG。另外PHP和ASP在Coldfusion/HomeSite也能支持。 可以到 Marjolei Katsma的 HomeSite Help site上得到更多的信息。 8.可以通過(guò)WML頁(yè)面來(lái)操作數(shù)據(jù)庫(kù)嗎? 可以,與創(chuàng)建HTML頁(yè)面相同。任何相關(guān)的服務(wù)器端的技術(shù)都可以用來(lái)生成WML頁(yè)面。 9.可以使用CGI生成WML頁(yè)面嗎? 當(dāng)然。可以用創(chuàng)建HTML同樣的方法來(lái)創(chuàng)建WML。如果想書(shū)寫(xiě)一個(gè)CGI來(lái)創(chuàng)建WML,只要記住在頁(yè)面的開(kāi)頭正確設(shè)置MIME類型。具體的形式根據(jù)所使用的語(yǔ)言不同而不同。例如在Perl中: print ("Content-type:application/vnd.wap.wml \n\n\n"); 注意至少要使用2個(gè)換行。 10.如何使用Cold Fusion來(lái)生成頁(yè)面? 使用Cold Fusion只需要加上: <CFCONTENT type="text/vnd.wap.wml"> 11.如何使用PHP來(lái)書(shū)寫(xiě)動(dòng)態(tài)的WML頁(yè)面? PHP(和大多數(shù)其他服務(wù)端腳本語(yǔ)言一樣)可以被用來(lái)書(shū)寫(xiě)動(dòng)態(tài)的WML內(nèi)容。只需要將輸出的標(biāo)記限制在WML微型瀏覽器可接受的范圍內(nèi)。 注意PHP有很多內(nèi)建的HTML功能,特別是錯(cuò)誤功能,這些功能WML微型瀏覽器可能無(wú)法識(shí)別。 PHP同樣可以在一個(gè)HTML文件中編寫(xiě)出既適合于HTML,也適合于WML的內(nèi)容。PHP的源代碼對(duì)于客戶端來(lái)說(shuō)是不可見(jiàn)的。因此可以針對(duì)HTML瀏覽器輸出HTML頁(yè)面,針對(duì)WML瀏覽器輸出WML頁(yè)面。 可以在開(kāi)發(fā)PHP編寫(xiě)的WML頁(yè)面的時(shí)候把以下代碼加在開(kāi)頭: <? // header("Content-type: text/vnd.wap.wml"); echo("<?xml version=\"1.0\"?>\n"); echo("<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" //"http://www.wapforum.org/DTD/wml_1.1.xml\">\n\n"); ?> 基于PC的瀏覽器將忽略這些無(wú)法理解的WML標(biāo)記。但是如果想在WAP設(shè)備或者模擬器上測(cè)試的時(shí)候,只需要將"http://"去掉,頁(yè)面自動(dòng)變成WML頁(yè)面。 12.使用PHP動(dòng)態(tài)輸出WML 這些例子生成一個(gè)非常有用的應(yīng)用叫做:PizzaCalc。它將輸入所有的pizza的帳單和人的數(shù)目,可以算出每個(gè)人的花費(fèi)。 應(yīng)用生成一個(gè)動(dòng)態(tài)的頁(yè)面叫做“calc”或者“input”。注意到所有的轉(zhuǎn)義字符例如雙引號(hào)。該頁(yè)顯示了一個(gè)簡(jiǎn)單的變量處理,和如何傳遞參數(shù)到另外的卡片: 使用WML瀏覽器就可以測(cè)試應(yīng)用程序: http://wap.colorline.no/wap-faq/apps/pizzacalc.html。 或者輸入: http://wap.colorline.no/demos.html選擇應(yīng)用。 <? header("Content-type: text/vnd.wap.wml"); echo("<?xml version=\"1.0\"?>\n"); echo("<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" \"http://www.wapforum.org/DTD/wml_1.1.xml\">\n\n"); echo("<!--The application PizzaCalc was originally made by The Crusaders www.crusaders.no on the Commodore Amiga -->\n"); echo("<!-- It was unfortunately not possible to emulate the crap interger handling of the original program -->\n"); ?> <wml> <? if($action == "calc") { echo("<card id=\"result\" title=\"PizzaCalc\">\n"); echo("<do type=\"prev\" label=\"Back\">\n"); echo("<go href=\"pizzacalc.html#input\"/>\n"); echo("</do>\n"); echo("<p>\n"); echo("The cost per eater will be ".$total / $eaters."<br/>\n"); } else { echo("<card id=\"input\" title=\"PizzaCalc\">\n"); echo("<p>\n"); echo("<anchor>Split Pizza bill <go href=\"pizzacalc.html?total=\$(total)&eaters=\$(eaters)&action=calc\"/> </anchor>\n"); echo("<br/>\n"); echo("Total cost: <input type=\"text\" name=\"total\" format=\"*N\"/>\n"); echo("Eaters: <input type=\"text\" name=\"eaters\" format=\"*N\"/>\n"); } ?> </p> </card> </wml><!--++ plugin_code qcomic begin--> <!--++ plugin_code qcomic end--> |