用於WAP的標記語言就是WML(Wireless Markup Language)。 WML的語法跟XML一樣,WML是XML的子集。 HTML、XML和WML的文件有很多相似之處,這樣網頁開發者在過去10年中所學的東西今天依然適用。 WML頁面文件的後綴是 *.WML,就象HTML的 *.HTML後綴。 XML規定定義了一個規范的XML文件的規格。任何違反這個規定的WML文件會出錯。WML文件通常使用XML解釋器起來解釋。 建立網頁制作環境 WML文件本身就是文本文件,所以編輯不成問題,順手的編輯器都可以用。 當然,由於目前的浏覽器還都不能顯示WML頁面,而我們又不能總在手機上進行測試(速度太慢),所以需要模擬器。現在象NOKIA、ERICSSON、MOTOROLA等手機制造商都生產了相應的產品,你只要下載就行了。當然除了模擬器以外,還需要圖形制作轉換器(用來制作WAP格式的圖形文件)、字符轉碼器(漢字<=>UNICODE)等等,本站工具及論壇頁面均有說明。 WML文件結構 WML的頁面通常叫做桌面(DECK),由一組互相鏈接的卡片(CARD)組成。當移動電話訪問一個WML頁面的時候,頁面的所有CARD都會從WAP服務器下載到設備裡。CARD之間的切換由電話內置的計算機處理,不需要再到服務器上取信息了。CARD裡可以包含文本、標記、鏈接、輸入控制、任務(TASK)、圖像等等。CARD之間可以互相鏈接。 文檔的實體包含在
...
標記中。 簡單例子:
Hello world!
顯示結果如下: ------ HELLO ------ Hello World! DECK裡面各個組成部分的具體解釋在本教程的其他部分有說明。 WML字符集 WML是XML的子集,繼承了XML的字符集設置。WML文檔缺省的字符集是UTF-8。 要顯示中文,有兩種辦法。最簡單的辦法就是在文檔頭使用encoding,即把第一行改為: 然而令人喪氣的是,這種方法有些手機和模擬器並不支持(將來會的),所以目前第2種方法更普遍:不改變字符集設置,但是在寫中文的時候采用UNICODE代表中文字符,如: 通訊錄 代表: 通訊錄 WML元素:標記(Tag)和屬性 WML的主要內容是文本,由於標記會降低與手持設備的通訊速度,所以WML標准裡僅僅使用了很少一部分。用於表格和圖像的的標記幾乎都被排除了。 與XML一樣,在WML語言中,所有元素都放在符號"<" 和 ">"中,並且包含一個開始標志、一個結束標志和一個內容標志,或者使用自身結束的控制標記。就象這樣:
Hello World!
或
和
this is data
有了上面的基礎,相信大家已經能夠做不少事情了。現在我們來深入一下,看看如何提高性能和網絡傳輸效率。首先,需要介紹一下http 1.1(RFC2616)的基礎知識。當然,如果你已經很熟悉了,可以跳過第一部分。 一、HTTP 1.1的簡要介紹 HTTP 1.1是一個基於文本的互聯網實體信息交互主流協議,這裡的實體可以是WAP兼容浏覽器之類的用戶終端,可以是WAP網關之類的代理服務器,也可以是Java servlet之類的源服務器程序。它們之間的交互信息就是兩大類:客戶端對服務器端的請求(request)和服務器端對客戶端的響應(response)。一次完整的交互包括一個請求和對它的響應。 所有的請求和響應都采用[RFC822]中定義的標准互聯網消息格式,框架如下: * 消息定義 * 沒有或多個消息頭 * CRLF(空行回車) * 可選的消息本體 其中消息定義不分指定了發送消息的類型。請求和響應都可以包含多個消息頭,用來進一步或者重新定義用戶終端和服務器之間的交互。CRLF僅僅用來將信息定義和消息本體分開。 1、請求 在消息定義部分可以這樣定義請求: 請求類型 URL HTTP/1.1 其中請求類型可以是下面的一種: ①. OPTION:返回請求者和相應者之間可以使用的通信選項,主要用來檢測服務器處理能力; ②. GET:獲得以URL標示的文件內容或者程序執行結果。服務器根據文件名後綴判斷服務內容,比如該URL是靜態文本還是一個程序; ③. HEAD:除了不返回響應的信息本體以外,得到的是跟GET一樣的信息。一般用來測試鏈接的有效性、可達性和近期修改; ④. POST:把消息本體中的消息發送到一個URL或者其他類似的服務器端定義行為。通常用來提交一個HTML表單或者一些數據操作活動; ⑤. PUT:把消息本體中的消息發送到一個URL,跟POST類似,但不常用; ⑥. DELETE:刪除URL指定的資源; ⑦. TRACE:調用一個遠程應用層請求消息回路。發出這個消息的用戶終端除了收到原來的消息內容以外,還得到消息在Internet上的傳送路徑。 最常用的請求類型--也是我們在處理WAP應用時最關心的--是GET和POST。假設有一個WML文檔,我們用UP的浏覽器去浏覽的話,就會向服務器發出如下GET請求: GET www.itsalon.com/wap/index.wml HTTP/1.1 accept-charset: UTF-8 accept-language: ch accept: text/vnd.wap.wml, */*, image/bmp, text/html user-agent: UP.Browser/3.1-UPG1 UP.Link/3.2 host: www.itsalon.net …… 其中粗體的部分是HTTP消息頭,這裡我們忽略了一些與我們關系不大的消息頭。 accept-charset: 用戶終端支持的字符集 accept-language: 用戶終端目前使用的語言 accept: 用戶終端可以接受的MIME文件類型 user-agent: 用戶終端供應商提供的終端描述信息 host: 請求信息發送到的域名 2、響應 響應的消息定義部分一般是這樣的:HTTP/1.1 狀態碼狀態描述在[RFC2616]中定義了近40種不同的狀態碼(分成5組)。其中最常見的是3個: 200 OK 401 Unauthorized 404 Not Found 繼續上面那個例子,如果該URL合法的話,服務器的響應會是這樣的: HTTP/1.1 200 OK Server: www/5.0 Date: Fri, 26 Oct 2000 12:15:23 GMT Connection: Keep-Alive Content-Length: 1211 Content_Type: text/vnd.wap.wml Last-Modified: Mon, 22 Oct 2000 18:19:24 GMT …… 其它內容 …… 這個響應信息裡包括了響應的數字代碼和文本描述,然後是一組消息頭。在一個換行符以後就是消息本體,在這裡,消息本體就是www.itsalon.net/index.wml的源代碼。 Server: 發出響應的服務器 Date: 響應發出的時間 Connection: 指示用戶終端保持連接 Content-Length: 響應信息的長度,從DECK的第一個"<"字符開始計算 Content_Type: 響應的MIME類型 Last-Modified: 響應中DECK的最後修改時間 當用戶終端接收到響應以後,會對其狀態信息和消息頭進行解碼,然後決定對響應做出什麼樣的動作。如果收到OK響應,一般會把消息本體裡的內容顯示在屏幕上。對於桌面終端,通常是HTML,對於WAP浏覽器,則是WML。 HTTP是一種很煩瑣的協議。即使是簡單沒有任何數據的請求和響應都要產生數百字節的消息。WAP通過WAP網關來解決這個問題。WAP網關一個很重要的功能就是把所有的HTTP1.1消息轉換成無線任務協議(Wireless Session Protocol, WSP)的消息格式。這種格式是壓縮的二進制協議,兼容HTTP1.1。它能解析所有的請求和響應消息,並轉換成最精簡的BIT序列。 到這裡我們已經介紹了HTTP1.1的主要內容。當然HTTP1.1還有很多復雜的內容,但是在這裡並不打算多講,如果你有興趣,可以去相關網站查找它的資料。作者只想大家知道一點:用戶終端和服務器之間還有比GET和POST請求更多的互動消息,它們一樣有請求和響應消息頭,並且可以包含一些信號來影響WAP應用程序的執行和性能。這正是提高WAP運行效率的秘密所在。 二、緩存(Caching) 根據[RFC2616]的定義,緩存是:"程序中響應消息的本地儲存區以及控制這些消息儲存、重新獲取和刪除的子系統。緩存保存可以緩存的響應消息以便降低將來的響應時間和網絡帶寬消耗,同樣也適用於請求消息。" 由於WAP信道帶寬的限制,我們在編寫WAP應用的時候都希望最大限度地減少消息的傳送量。要做到這一點,就要盡量地使用緩存,經常地從緩存中獲得以前的消息。幸運的是目前大多數WAP設備都有一定級別的緩存,在默認情況下,會嘗試最大化的緩存。幾乎所有指向URL的響應都會被緩存下來。 當WAP用戶終端緩存一個響應的時候,會保存幾乎所有的信息:URL、響應文本、消息頭以及其他可以驗證響應的內容(參看下一節"驗證和歷史堆棧")。每個被緩存的項目都可以根據它的URL組成部分(域名、路徑、協議、參數、端口等等)唯一的識別。 有兩種HTTP消息頭可以讓你控制WML的DECK緩存,對我們最重要的是Cache-Control消息頭。它能夠直接通過請求/響應鏈來控制所有的緩存實體。所有的緩存機制都必須遵守這些消息頭的定義。Cach-Control消息頭通常用來屏蔽一個設備的默認緩存行為。他們在消息鏈中傳遞時必須直接穿過所有的代理服務器和網關而不被改變。 * Cache-Control: no-cache。設定這個選項的URL不能被緩存,包括用戶終端和所有處於內容服務器和用戶終端之間的其他服務器; * Cache-Control: max-age=
當網關在WML文檔中掃描到元素時,就會把它們轉換成WSP等效的HTTP消息頭,然後用戶終端就可以據此對緩存進行控制了。