在上一節中,我講解了最基本的WAP和WML的概念,這一節我們就來看看ASP和WAP是如何結合的.
第四節:另一種預訂你電影票的方法
現在在奧斯陸,電影院提供了一種基於電話系統的來銷售門票,這個系統是很復雜的,還必須給用戶一些說明才能指導用戶買票,
而且用戶還必須在報紙上找到某種電影的代碼,這個很煩,我們來介紹另一種方法。
這裡這將給你展示一個簡單的讓手機用戶訂票的WAP應用:一個肯定讓人叫好的服務。用戶不必記住那些煩人的代碼,他們能夠直接
從菜單中選取電影和電影院,並且用戶也不需要認證。在這個例子中用戶被要求在電影開始前40分鐘交費,但是在真正的生活中,
用戶同樣可以通過手機來結帳.
此應用程序想像的條件是一個電影能夠在同一時間在多個電影院上映,一個電影院不同的時間上演不同的電影。
這裡我沒有過多的考慮錯誤處理的問題,因為這不是本章節的重點,你喜歡你可以自己加上.
為了簡單,我使用了Access 97來做為數據庫,當然真正的系統不會用它了,其它的數據庫如SQL Server,也不必改動多少代碼.
數據庫圖表
數據庫圖表
.MovIE 和Theater表是顯然需要的。Show表用於追蹤現在還有多少空位可以出售。
怎樣調試這個程序
為了訪問這個WAP服務,你需要一個WAP仿真器,這個程序主要是在Nokia Toolkit 1.2上調試,詳細情況請查看上一章節。
選擇電影
在list表中選擇一個電影:
這裡是代碼:
<!--#include file="conn.ASP" --><%
'send the right MIME type
Response.ContentType = "text/vnd.wap.wml"
第一件事就是聲明wml,仿真器如何不在正確的地方聲明XML,它是不會接受WML的盡管Nokia 7110可以忽略這一點,但是不能保證
其它的手機也行,所以你不得不做這事。同樣你也得設置好MIME類型。
<?XML version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.XML">
<wml>
在進入下一個card以前會有一個閃爍的屏幕來顯示一個圖片WBMP一種新的格式。這個事件是由timer屬性決定的,這裡我們設置的
時間為5秒.ontimer事件引發後將帶你去另一個card.(wmbp的Photoshop插件可以從網上免費下載).
<card id="splash" ontimer="#card1" title="Welcome to">
<timer value="50"/>
<p align="center">
<br />
<img src="pix/logo.wbmp" alt="WAP movIEs"/>
</p>
</card>
<card id="card1" title="choose a film">
<%
sqlQuery = "SELECT [Movie_ID], [title] FROM MovIE"
set rsMovIEs = conn.Execute(SQLquery)
:
%>
<p>
<select name='movIE'>
<%
Do while not rsMovIEs.eof
response.write("<option value='" & rsMovies("Movie_ID") & "'>" & rsMovIEs("title") & "</option>" & vbcrlf)
rsMovIEs.MoveNext
loop %>
</select>
這一部分是本文的焦點。從數據庫中讀出需要的數據顯示出來,作為一個ASP程序員,這個沒有什麼特別的,但是就是這個簡單的程
序現在被用於一種全新的服務器就顯得不一樣了。這也使得我更加認為在基於WML的商業站的網絡編程ASP更勝於Java servlet.
<small>
<anchor title="next!">Next
<go href="step2.ASP" method="get">
<postfield name="movie" value="$(movIE)" />
</go>
</anchor>
</small>
</p>
表單的提交也可以通過軟開關函數(do 和 anchor)來完成。在這裡,我是通過簡單的內嵌鏈接來完成的,因為我覺得這樣能夠使用
戶感覺直觀和友好。PostfIElds大至和HTML中的hidden差不多,但是wml的變量不像Html中的那樣需要在Javascript中傳送,它
可以直接寫在wml中,這一點上一節已經講解了.在這裡的傳遞的方法是get,post方法在WAP的規范也是被支持的,仿真器也能識別
它,但是很不幸,在Nokia 7110中,這個post不被支持,所以你沒得選擇.