DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> WEB網站前端 >> 關於網頁技巧 >> 構建動態 WAP 站點
構建動態 WAP 站點
編輯:關於網頁技巧     

  二十一世紀是信息的世紀,以IP技術為核心的Internet在全球范圍內後的了空前規模的商業化應用,它幾乎滲透到了人們生活的每一個角落,特別是以Web為核心的信息檢索業務取得了巨大的成就。如今,要隨時隨地的獲取信息,通過使用移動電話連上互聯網將是一種非常可行的方案,而WAP就是實現這一方案的技術工具。現在,移動電話上網數量的增長速度要比PC上網數量的增長速度更快。這也就意味著不久以後,大多數新的移動電話都將配有WAP浏覽器。 

  在現實生活中,為了能使人們隨時隨地的通過移動電話獲取最新的股票行情信息,我們可以把WAP技術和後台的數據庫技術相結合,通過移動電話的WAP浏覽器,把數據庫中的股票當前行情顯示給用戶。我們的這套教程,就是用這樣的一個實例程序,講解了如何構建一個動態的 WAP 站點。當然,在數據庫和數據來源方面,我們都做了很大的簡化,只是祈禱一個講清原理的作用,讀者可以根據教程自己深入研究一下。 

Charpter 1 Server 端的設置 

  在這裡,我們先用最為典型的IIS服務器作為例子: 

  為了使IIS支持WAP(WML)頁面的發布,在IIS的Web站點的屬性 / HTTP信息中設置WAP的MIME屬性,添加如下的MIME類型: 

  擴展名   內容類型(MIME)   
  .wml    text/vnd.wap.wml   
  .wbmp    image/vnd.wap.wbmp   
  .wmlc    application/vnd.wap.wmlc   
  .wmls    text/vnd.wap.wmls   
  .wmlsc   application/vnd.wap.wmlsc   

  重啟 IIS 使其支持 WAP 頁面的發布。 

  如果你使用的是 Apache 作為Web服務器的話,找到conf/httpd.conf這個配置文件,然後在裡面添上MIME類型。在httpd.conf中加入如下幾行: 

  AddType text/vnd.wap.wml .wml 
  AddType image/vnd.wap.wbmp .wbmp 
  AddType application/vnd.wap.wmlc .wmlc 
  AddType text/vnd.wap.wmls .wmls 
  AddType application/vnd.wap.wmlsc .wmlsc 

  重啟 Apache Server 使其支持 WAP 頁面的發布。 

  這樣,你的Server就支持 WAP(WML) 站點的發布了。 
Chapter 2 編寫你的第一個 WML 頁面 

  在上一章中,我們配置好了支持 wml 的服務器,現在,我們新建一個虛擬目錄(例如 http://127.0.0.1/wml ),把我們編寫的 wml 頁面放在這個目錄中發布。這樣我們安裝好 WAP 模擬器後,就可以輸入 http://127.0.0.1/wap浏覽自己做的 WAP 頁面了。在這裡我推薦大家使用 Nokia 的 WAP Toolkit 模擬器,這個比較真實。大家可以到 Nokia 的站點上去下載。 

  WML 其實是 XML 的一種特殊應用,讓我們來看一個最簡單的 WML 頁面: 

以下是引用片段:
  <?xml version="1.0"?> 
  <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"> 
  <wml> 
   <template> 
    <do type="options" label="back"> 
     <prev/> 
    </do> 
   </template> 
   <card id="card1"> 
     <p>Hello World !  
     </p> 
     <do type="accept" label="Start"> 
      <go href="#Welcome"/> 
     </do> 
   </card> 
   <card id="Welcome"> 
     <p>You are welcome!  
     </p> 
     <do type="accept" label="Back"> 
      <go href="#card1"/> 
     </do> 
   </card> 
  </wml> 

  第一行是說明這個文件是 xml1.0 標准的。我們可以看到,<wml> 和 </wml> 括起了整個 WML 頁面的內容,我們成為一個 DECK ,在這個 DECK 中,又可以分成幾個 <CARD> 和 </CARD> 括起的內容。記住,一個WML頁面只能有一個 DECK ,一個 DECK 中可以由一個或多個 CARD ,而手機的一次就只顯示一個 CARD 中的內容。 

  以上面的這個頁面為例,打開這個頁面時,只顯示 Hello World ! 和一個 Start 的超連接,選擇 Start 這個超連接後,就跳轉到 id 為 Welcome 的那個 CARD ,屏幕上顯示 You are welcome! 和一個 Back 連接,選擇 Back 連接,則又跳回一開始顯示的 id 為 card1 的那個 CARD 。 

  在這裡,起連接作用的是這段代碼: 

以下是引用片段:
     <do type="accept" label="Back"> 
      <go href="#card1"/> 
     </do> 

  <do> 中的 label 項,則是連接顯示的內容,而連接指向則由 <go href=> 來指定。href 的值以 # 開頭的話,則是頁面中的 CARD 名(類似於 HTML 中的錨的概念);如果 href 的只是一個頁面的地址,例如 <go href="a.wml"/> 則這個連接將指向另一個 WML 頁面。 

  WML 的語法是遵循 XML 的,可以說 WML 是 XML 的一個子集,XML 是 WML 的超集。 

  在 WML 中其他常用的元素有: 

以下是引用片段:
   <img src="1.wbmp" alt="1"/> 插入圖像1.wbmp(在 WAP 中,只能使用 wbmp 格式的圖像) 

   <option value="up" onpick="a.wml"> 選擇,選中這一項後跳轉到a.wml 

   <input type="text" name="id" format="*N"/> 
   <do type="accept" label="Check"> 
    <go href="fivedays.asp"> 
      <postfield name="id" value="$id"/> 
    </go> 
   </do>    上面的這一整段代碼是一個表單,先由 <input> 標簽負責將擁護輸入的數字( format="*N" 只允許輸入數字) ,放到變量 id 中,再當用戶按下 Check 連接時,<postfield name="id" value="$id"/> 發生作用,把變量 id 中的值以 POST 方式傳送給 fivedays.asp。$id 即代表變量 id 的值。這個連接相當於:fivedays.asp?id=$id 。 

  其他的一些常用的 WML 元素用戶可以自行參考一下 WML 語法手冊,在這裡我就不多說了。
Chapter 3 數據庫的輸出 

  在我們的這個例子中,由於每支股票有價格,名字,號碼等信息,所以要由一個數據庫來保存維護。我們的主要功能有查詢某股票的當前價位,五天來的收盤價,今天的漲降幅前五名,所以,數據庫中除了每支股票的號碼和名字外,還得有前四天來的收盤價及當前價格。考慮到值試舉個例子而已,所以只設計了一個簡單的數據庫,名為money ,該數據庫設計了一張表,名為stock,該表包含了以下屬性:num(主鍵) , name , price1 , price2 , price3 , price4 , price5 , temp 。 分別表示股票號碼,名字,前四天收盤價,前三天收盤價,前天收盤價,昨天收盤價,現在價格,現在相對於昨天的漲降幅(百分比)。我們輸入了大約50支股票的信息。 

  根據查詢的需要,需從數據庫中找到相關的數據,我們采用ASP編程,用ODBC連接數據庫money,設置的數據源名為money。下面以查詢當前價格為例,說明怎樣與數據庫連接。 

以下是引用片段:
<% 
 number=Request.QueryString("id") 
 Set conn=Server.CreateObject("adodb.connection") 
 conn.Open"dsn=money;uid=;pwd=;database=money.mdb" 
 sql0="select num,name,price5 from stock where num='"&number&"'" 
 Set rs0=Server.CreateObject("adodb.recordset")  
 rs0.Open sql0,conn   
%> 
  上面的這段ASP代碼相信大家都應該看懂了吧,這是一段查詢代號為id的股票的紀錄的代碼。 

  考慮到返回給客戶的WAP頁面必須是當時的股票信息,所以我們必須通過後台程序讀取當時的數據庫中的數據,即時生成WAP頁面(WML頁面)返回給WAP客戶。由於IIS本身支持ASP,而且ASP開發周期較小,所以采用ASP作為後台語言,生成WML頁面,通過向客戶端發送 WML的HTTP頭實現向客戶端傳送WML頁面。如下列程序所示: 

以下是引用片段:
<% Response.ContentType="text/vnd.wap.wml" %><?xml version="1.0"?> 
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" http://www.wapforum.org/DTD/wml_1.1.xml > 
<wml> 
<card> 
………… 
</card> 
</wml> 

  注意:<% Response.ContentType="text/vnd.wap.wml" %>和<?xml version="1.0"?>之間不能有空格或空行。 

  由於 Nokia Toolkit 不支持中文,所以,所有的漢字都只能做字符的實體引用,因此,用ASP編寫了一個c2u的函數,進行漢字和字符實體之間的轉換,程序如下: 

以下是引用片段:
<% 
Function c2u(text) 
  For i=1 to Len(text) 
  c=Mid(text,i,1) 
  c2u=c2u&"&#x" & Hex(AscW(c)) & ";" 
  Next 
 End Function 
%> 
  要在WML中輸出漢字的時候,只需 <%=c2u("中文字符")%> 即可。 

  在WML中,采用不同card間的跳轉來實現功能選擇的步驟。采用<postfield/>標記給ASP頁面傳遞客戶端的選擇信息。在ASP程序中,使用 Request.QueryString("")來獲得客戶端傳遞來的信息。 

  下面就是完整的一個顯示頁面的例子: 

以下是引用片段:
<%@ LANGUAGE="VBScript" %> 
<% 
dim j 
j=0 
%> 
<% 
Function c2u(text) 
  For i=1 to Len(text) 
  c=Mid(text,i,1) 
  c2u=c2u&"&#x" & Hex(AscW(c)) & ";" 
  next 
 End Function 
%> 
<% 
 set conn=server.createobject("adodb.connection") 
 conn.open"dsn=money;uid=;pwd=;database=money.mdb" 
 sql0="update stock set temp=(price5-price4)/price4*100" 
 set rs0=server.createobject("adodb.recordset")  
 rs0.open sql0,conn 
 sql="select num,name,temp from stock where temp<0 order by temp ASC" 
 set rs=server.createobject("adodb.recordset")  
 rs.open sql,conn  
%> 以下是引用片段:
<% Response.ContentType="text/vnd.wap.wml" %><?xml version="1.0"?> 
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"><wml> 

<card id="ShowCurrent"> 
<p> 
  <%=c2u("跌幅前五名:")%><br/> 
<% 
while j<5 and not rs.eof 
%> 
  <%=rs(0).Value%>-<%=c2u(rs(1).Value)%>&nbsp;<%=rs(2).Value%>% 
<br/> 
<% 
rs.movenext 
j=j+1 
wend 
%> 
</p> 
<do type="accept" label="<%=c2u("返回")%>"> 
 <go href="index.asp#Welcome"/> 
</do> 
<p align="center"> 
(c) 501 Studio, 2001<br/> 
All rights reserved ! 
</p> 
</card> 
</wml>  
<% 
rs.close 
%> 

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved