一天之內上手.Net+WAP項目


  對WAP感興趣,是從大一上學期剛開通手機wap包聊QQ和玩泡泡吧的時候;後來,又玩了一下wap的網遊。呵呵,真神奇呀。
  
  今天下午纔開始接觸WAP技術,從WAP的基本協議開始,到WAP的基本原理,以及WAP的發展歷史、現狀,哎呀呀,頭都看大了。後來終於看到正題了,大概學了一下WML和WMLScript,並且安裝了EasyPad WAPtor和WinWAP玩,嘿嘿,發現還不錯!好玩,又簡單。

  雖然從中午開始就幾乎沒吃飯,但依舊興致勃勃。天黑了,找到了一個網站,
http://www.wapkf.com,叫“wap開發網”,發現原來wap項目竟然還可以用我熟悉的.net平臺來開發! 哈哈,爽也!我一口氣拜讀完了"wap asp.net開發教程"區內的所有文章,並且自己動手試了很多東西。

  主要有有兩點體會:

  (1 )用.net平臺開發wap項目是相當簡單的,你甚至可以根本不知道什麼是WML! 而且.net平臺可以根據瀏覽器不同生成的返回數據,也就是說,同一個項目,用手機看和用IE看都能看到!這是其他開發平臺無法做到的!(個人猜測:至少用asp和php做的wap項目不行,比如
http://wap.qq.com或者http://wap.wappp.com/,用手機和IE訪問到的是兩套完全不同的程序。) 比如http://wap.sswww.cn/這個網站,它肯定就是.net做的嘛!.net讓wap項目的開發變得如此簡單,我心裏面都開始有點磨刀霍霍了。

  (2 ).net 的wap程序和一般的asp.net程序最大的一個不同點,就是在一個頁面內可以設置多個Form——這樣設計應該是爲了節約網絡傳輸。這是一個相當好玩的功能,酷死了!我甚至在想,會不會一個簡單的wap網站就用一個aspx文件就能夠做出來……

  真是越學越有勁,沒想到.net平臺上的wap這麼容易就可以上手。這時我開始搜尋網上的一些用.net開發的wap程序源碼。我才發現,網上基於.net的wap程序根本就很少。難道這種技術才起步?  而以asp或者php寫的wap程序就相當地多,連論壇、blog、商城這種大型的程序都做出來了,而且相當精緻和完善。.net平臺就似乎受到很嚴重的冷落了。

  好不容易找到了幾套.net的wap程序(估計都把baidu可以搜到東西找完了,一共就七八個這樣的程序源碼吧),其中有些還是編譯好了.dll的,有點兒鬱悶。但是還好了,皇天不負有心人,我還是找到了一套稱心如意的程序源碼——一個留言本程序,而且真的被我猜中的!這套程序果然就只有一個aspx頁面!

  還好我有足夠牢固的.net基礎,雖然程序是用VS2003+VB寫的(現在流行VS2005+C#),而且還有少量的語法錯誤,但是我很快就調試好了~~ 哈哈,激動,然後就開始一個文件一個文件地、一行一行地讀代碼了。

  主要的數據庫操作過程寫在了一個叫“Bikewap”的類裏面,並在index.asp.vb裏面將之實例化。讀取和刪除數據過程沒什麼好說的,很常見。有一個函數比較有創意,就是替換留言裏的非法字符,避免可能遇到的sql注入攻擊等潛在的隱患。摘錄如下:

'替換特殊字符
   
     Public Function ReplaceSpecficChar(ByVal StrSource As String)
        StrSource = Replace(StrSource, "<", "<")
        StrSource = Replace(StrSource, ">", ">")
        StrSource = Replace(StrSource, "'", "&apos;")
        StrSource = Replace(StrSource, """", """)
        StrSource = Replace(StrSource, "&", "&")
        Return StrSource
    End Function

  然後就到精彩部分了!由於該程序一共只有一個aspx頁面,所以作者也利用.net wap頁面的特性,在這個頁面裏使用了三個不同的Form,把留言本的所有操作都囊括在內了,並且很靈活地切換,非常精妙和精悍!

  如下

<%@ Register TagPrefix="mobile" Namespace="System.Web.UI.MobileControls" Assembly="System.Web.Mobile" %>

<%@ Page Language="vb" AutoEventWireup="false" Inherits="BicyleWap.MobileWebForm1" trace="False" CodeFile="index.aspx.vb" CodeFileBaseClass="System.Web.UI.MobileControls.MobilePage" %>

<html>

<HEAD>

<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR"/>

<meta content="Visual Basic .NET 7.1" name="CODE_LANGUAGE"/>

 

</HEAD>

<body><mobile:form id="FrmMain" title="留言列表" Paginate="True" runat="server">

<mobile:Image id="ImageLogo" runat="server" ImageUrl="images/bikelogo.png"></mobile:Image>

<mobile:List id="NewList" runat="server" Decoration="Bulleted" ItemsPerPage="10" onItemCommand="OnItemSelection"></mobile:List>

<mobile:Link id="Link3" runat="server" NavigateUrl="#frmNewMessage">我要留言</mobile:Link>

<mobile:Link id="Link4" runat="server" NavigateUrl="#frmMain">回首頁</mobile:Link></mobile:form><mobile:form id="FrmMessageView" title="查看留言" Paginate="True" runat="server">

  <mobile:Label id="LabMessageTitle" runat="server" Wrapping="Wrap"></mobile:Label>

  <mobile:Label id="LabPersonName" runat="server" Wrapping="Wrap"></mobile:Label>

  <mobile:Label id="LabEmail" runat="server" Wrapping="Wrap"></mobile:Label>

  <mobile:Label id="LabAddTime" runat="server" Wrapping="Wrap"></mobile:Label>

  <mobile:Label id="LabMessageContent" runat="server" Wrapping="Wrap"></mobile:Label>

  <mobile:Link id="Link5" runat="server" NavigateUrl="#frmNewMessage">我要留言</mobile:Link>

  <mobile:Link id="Link1" runat="server" NavigateUrl="#frmMain">返回上級</mobile:Link>

</mobile:form><mobile:form id="FrmNewMessage" title="填寫留言" runat="server">

  <mobile:Label id="Label1" runat="server" Wrapping="Wrap">留言標題</mobile:Label>

  <mobile:TextBox id="TxtMessageTitle" runat="server"></mobile:TextBox>

  <mobile:RequiredFieldValidator id="RFVMessageTitle" runat="server" ControlToValidate="TxtMessageTitle" ErrorMessage="請填寫留言標題"></mobile:RequiredFieldValidator>

  <mobile:Label id="Label2" runat="server" Wrapping="Wrap">留言內容</mobile:Label>

  <mobile:TextBox id="TxtMessageContent" runat="server"></mobile:TextBox>

  <mobile:RequiredFieldValidator id="RFVMessageContent" runat="server" ControlToValidate="TxtMessageContent" ErrorMessage="請填寫留言內容"></mobile:RequiredFieldValidator>

  <mobile:Label id="Label3" runat="server" Wrapping="Wrap">您的暱稱</mobile:Label>

  <mobile:TextBox id="TxtPersonName" runat="server"></mobile:TextBox>

  <mobile:RequiredFieldValidator id="RFVPersonName" runat="server" ControlToValidate="TxtPersonName" ErrorMessage="請留下您的暱稱"></mobile:RequiredFieldValidator>

  <mobile:Label id="Label4" runat="server" Wrapping="Wrap">您的郵箱</mobile:Label>

  <mobile:TextBox id="TxtEmail" runat="server"></mobile:TextBox>

  <mobile:RegularExpressionValidator id="RegularExpressionValidator1" runat="server" ControlToValidate="TxtEmail" ErrorMessage="請正確輸入Email地址"

   ValidationExpression="/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*"></mobile:RegularExpressionValidator>

  <mobile:Command id="CmdSubmit" runat="server" Format="Link">提交留言</mobile:Command>

  <mobile:Link id="Link2" runat="server" NavigateUrl="#frmMain">查看留言</mobile:Link>

</mobile:form><mobile:form id="FrmSuccess" title="留言成功" runat="server">

  <mobile:Image id="Image1" runat="server" ImageUrl="images/bikelogo.png"></mobile:Image>

  <mobile:Label id="Label5" runat="server" Wrapping="Wrap">恭喜您,留言成功!</mobile:Label>

  <mobile:Link id="Link6" runat="server" NavigateUrl="#frmMain">查看留言</mobile:Link>

  <mobile:Link id="Link7" runat="server" NavigateUrl="#frmNewMessage">繼續留言</mobile:Link>

</mobile:form>

</body>

</html>

  注意這樣格式的NavigateUrl :"#frmMain",這便是靈活跳轉Form的方法,並且在index.aspx.vb裏面設置活動Form的頁面屬性,比如ActiveForm = FrmSuccess。很類似一般.aspx頁面裏面的pannel,但是比pannel高級和方便多了,呵呵~

  另外,在index.aspx.vb裏面,作者也定義了幾個對頁面控件操作的函數,和普通的.net項目一樣,沒什麼好說的。
    
  就這樣寥寥幾行代碼,就完成了一個留言本,不僅可以用IE直接瀏覽,而且還是可以在手機上瀏覽的wap程序。
   
  最後附上該程序在winWAP下運行的截圖(注意不是IE哦,winWAP上看到的是手機上看到的效果):     

 

<%@ Register TagPrefix="mobile" Namespace="System.Web.UI.MobileControls" Assembly="System.Web.Mobile" %>

<%@ Page Language="vb" AutoEventWireup="false" Inherits="BicyleWap.MobileWebForm1" trace="False" CodeFile="index.aspx.vb" CodeFileBaseClass="System.Web.UI.MobileControls.MobilePage" %>

<html>

<HEAD>

<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR"/>

<meta content="Visual Basic .NET 7.1" name="CODE_LANGUAGE"/>

 

</HEAD>

<body><mobile:form id="FrmMain" title="留言列表" Paginate="True" runat="server">

<mobile:Image id="ImageLogo" runat="server" ImageUrl="images/bikelogo.png"></mobile:Image>

<mobile:List id="NewList" runat="server" Decoration="Bulleted" ItemsPerPage="10" onItemCommand="OnItemSelection"></mobile:List>

<mobile:Link id="Link3" runat="server" NavigateUrl="#frmNewMessage">我要留言</mobile:Link>

<mobile:Link id="Link4" runat="server" NavigateUrl="#frmMain">回首頁</mobile:Link></mobile:form><mobile:form id="FrmMessageView" title="查看留言" Paginate="True" runat="server">

  <mobile:Label id="LabMessageTitle" runat="server" Wrapping="Wrap"></mobile:Label>

  <mobile:Label id="LabPersonName" runat="server" Wrapping="Wrap"></mobile:Label>

  <mobile:Label id="LabEmail" runat="server" Wrapping="Wrap"></mobile:Label>

  <mobile:Label id="LabAddTime" runat="server" Wrapping="Wrap"></mobile:Label>

  <mobile:Label id="LabMessageContent" runat="server" Wrapping="Wrap"></mobile:Label>

  <mobile:Link id="Link5" runat="server" NavigateUrl="#frmNewMessage">我要留言</mobile:Link>

  <mobile:Link id="Link1" runat="server" NavigateUrl="#frmMain">返回上級</mobile:Link>

</mobile:form><mobile:form id="FrmNewMessage" title="填寫留言" runat="server">

  <mobile:Label id="Label1" runat="server" Wrapping="Wrap">留言標題</mobile:Label>

  <mobile:TextBox id="TxtMessageTitle" runat="server"></mobile:TextBox>

  <mobile:RequiredFieldValidator id="RFVMessageTitle" runat="server" ControlToValidate="TxtMessageTitle" ErrorMessage="請填寫留言標題"></mobile:RequiredFieldValidator>

  <mobile:Label id="Label2" runat="server" Wrapping="Wrap">留言內容</mobile:Label>

  <mobile:TextBox id="TxtMessageContent" runat="server"></mobile:TextBox>

  <mobile:RequiredFieldValidator id="RFVMessageContent" runat="server" ControlToValidate="TxtMessageContent" ErrorMessage="請填寫留言內容"></mobile:RequiredFieldValidator>

  <mobile:Label id="Label3" runat="server" Wrapping="Wrap">您的暱稱</mobile:Label>

  <mobile:TextBox id="TxtPersonName" runat="server"></mobile:TextBox>

  <mobile:RequiredFieldValidator id="RFVPersonName" runat="server" ControlToValidate="TxtPersonName" ErrorMessage="請留下您的暱稱"></mobile:RequiredFieldValidator>

  <mobile:Label id="Label4" runat="server" Wrapping="Wrap">您的郵箱</mobile:Label>

  <mobile:TextBox id="TxtEmail" runat="server"></mobile:TextBox>

  <mobile:RegularExpressionValidator id="RegularExpressionValidator1" runat="server" ControlToValidate="TxtEmail" ErrorMessage="請正確輸入Email地址"

   ValidationExpression="/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*"></mobile:RegularExpressionValidator>

  <mobile:Command id="CmdSubmit" runat="server" Format="Link">提交留言</mobile:Command>

  <mobile:Link id="Link2" runat="server" NavigateUrl="#frmMain">查看留言</mobile:Link>

</mobile:form><mobile:form id="FrmSuccess" title="留言成功" runat="server">

  <mobile:Image id="Image1" runat="server" ImageUrl="images/bikelogo.png"></mobile:Image>

  <mobile:Label id="Label5" runat="server" Wrapping="Wrap">恭喜您,留言成功!</mobile:Label>

  <mobile:Link id="Link6" runat="server" NavigateUrl="#frmMain">查看留言</mobile:Link>

  <mobile:Link id="Link7" runat="server" NavigateUrl="#frmNewMessage">繼續留言</mobile:Link>

</mobile:form>

</body>

</html>

  注意這樣格式的NavigateUrl :"#frmMain",這便是靈活跳轉Form的方法,並且在index.aspx.vb裏面設置活動Form的頁面屬性,比如ActiveForm = FrmSuccess。很類似一般.aspx頁面裏面的pannel,但是比pannel高級和方便多了,呵呵~

  另外,在index.aspx.vb裏面,作者也定義了幾個對頁面控件操作的函數,和普通的.net項目一樣,沒什麼好說的。
    
  就這樣寥寥幾行代碼,就完成了一個留言本,不僅可以用IE直接瀏覽,而且還是可以在手機上瀏覽的wap程序。
   
  最後附上該程序在winWAP下運行的截圖(注意不是IE哦,winWAP上看到的是手機上看到的效果): 

    

             

  總結:在網上看了好幾個小時的資料,學了這麼多東西,有這樣一個感慨:沒想到.net和wap協議出來這麼久了,把兩者聯合起來做項目的人還那麼少,難道是因爲這樣做項目太簡單了?呵呵 我覺得.net+wap可以是大家以後開發的一個方向。

  首先,開發wap項目比較新穎,而且很好玩。

  第二,用.net做wap項目也比較新穎,比較容易。

  第三,這和我們平時學的.net並不衝突,不需要耗費很多時間,就可以成功轉型。(其實說實話,我現在只懂WML的基本語法,根本看不怎麼懂標準的WML文件。用.net做wap,真的不需要學太多的WML。)

  第四,可以考慮以後做.net項目時,順便做一個wap版本,也是一個亮點。

  寫這篇文章的目的,是希望和我一樣對.net+wap感興趣想自己動手的朋友能夠沿着我走的路線和我一起學習,並且希望我學習過程中的一些心得體會能夠對大家有所幫助。 才疏學淺加上言不達意,而且沒有檢查不知道有沒有錯別字,完全屬於一時興奮所寫,還望高手們多多指教。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章