一天之内上手.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, "'", "'")
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上看到的是手机上看到的效果):
总结:在网上看了好几个小时的资料,学了这么多东西,有这样一个感慨:没想到.net和wap协议出来这么久了,把两者联合起来做项目的人还那么少,难道是因为这样做项目太简单了?呵呵 我觉得.net+wap可以是大家以后开发的一个方向。
首先,开发wap项目比较新颖,而且很好玩。
第二,用.net做wap项目也比较新颖,比较容易。
第三,这和我们平时学的.net并不冲突,不需要耗费很多时间,就可以成功转型。(其实说实话,我现在只懂WML的基本语法,根本看不怎么懂标准的WML文件。用.net做wap,真的不需要学太多的WML。)
第四,可以考虑以后做.net项目时,顺便做一个wap版本,也是一个亮点。
写这篇文章的目的,是希望和我一样对.net+wap感兴趣想自己动手的朋友能够沿着我走的路线和我一起学习,并且希望我学习过程中的一些心得体会能够对大家有所帮助。 才疏学浅加上言不达意,而且没有检查不知道有没有错别字,完全属于一时兴奋所写,还望高手们多多指教。
<%@ 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上看到的是手机上看到的效果):