|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
源代码保护方面其实现在考虑得没那么多了..NET也可以反编译.ASP写得复杂的话别人能看得懂的话.他也有能力自己写了.这方面担心的倒不太多.纵观现在网上可以下载的那些所谓BBS还有什么网站等等的源代码静态 第一节:WAP的潜能
这些日子,我们常听到WAP手艺,一种手机上彀的手艺。从手艺上讲,挪动德律风不成能和PC来合作,挪动德律风的屏幕只能容下很少的字符,它的带宽也是很受限定,并且输出也很愚笨。那我为何还要先容它了,嘿嘿,这里有两个次要的我以为WAP必定有乐成的要素。
到处性:
只需你有手机,你到那里都能够会见wap网站。
帐单机构:
在不久的未来,我们就可以经由过程我们的手机来付出我们的统统用度,查询良多的信息。只是我们的手机用度中又多了一项用度"WAP服务费"。
如许我们就可以用手机付出我们的商品用度,信誉卡都不必了,它必定可以成为新消耗体例。
第二节:WAP基本
WAP(WirelessApplicationProtocol)v1.1是一种开放性标准,它试图标准挪动德律风会见信息和服务行业。这个标准是由
WAPForum来开辟的,一个官方构造。1.2版本的WAP协定将会被以为是最初的WAP标准。
关于wap最基础的观点就是反复使用internet协定,这个协定必需很分明地在现有的手艺上轻松地挪用wap服务。
WAP协定使用一种很像我们电脑收集的分层布局。较低条理不太像我们经常使用的web使用,可是顶层仍是我们的老伴侣----HTTP。
数据一样是从服务器上收回,从服务器上吸收,信息可以贮存在服务器上,挪用也大概用CGI,也能够用别的的办法,好比ASP.也就
是说只需你会ASP,那末你就能够在轻松地写出你的第一个WAP使用程序了。
固然,利市机的带宽和用户才能方面来看,手机必要分歧(更严厉)的设备,以是在今朝的前提下HTML就不克不及顺应WAP所能提
供的带宽。
WAPForum的定位是WML(WirelessMark-upLanguage),一种xml格局的言语。WML是精简的HTML。
WAPForum同时也指定了WMLScript,很像JavaScript,只是用于手机罢了,它可以处置客户真个程序。
第三节:WML
只管我已解说了手机与服务器的通信,可是真实的客户端不是手机。一个软件(wapgateway),实践上允当了这个脚色。它
将手机的哀求转换为HTTP哀求,同时也将服务器的回应前往给手机,WML文件此时就被WAPGateWay编译成二进制文件。只管有些
WAPgeteway可以将HTML间接转换为WML,可是也不要期望它们能恣意地将HTML转换为我们在手机上能看懂的东东。
固然,仿真器就不必要WAPgateway来事情了,它会间接从服务器下载WML文件(大概间接在当地机上翻开WML),同时将它显现
在手机的屏幕上。图一WAP布局
WAP仿真器
为了利用WAP服务,像吾等穷汉买不起手机,就必要一个wap仿真器。你能够往Nokiawebsite下载一个NokiaToolkit
1.2,同时你也得装上JavaVirtualMachine1.2.2,能够收费从SUN公司下载,这里是个例子。
WML布局
一个WML文档是由板块构成的,一个板块包括有很多的卡片。在实践中,你能够把一个板块当作一个由很多着名字的标签构成的
HTML。
手机下载一个完全的板块,可是在一次只能显现一个卡片。经由过程链接扫瞄分歧的中央。
我们将会看到一个复杂的WML文档,你得懂点最基础的XML。
以下是援用片断:
<?xmlversion="1.0"?>
<!DOCTYPEWMLPUBLIC"-//WAPFORUM//DTDWML1.1//EN""http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<!--rootelement-->
<cardid="card1"title="Example1">
<p><!--卡片只能撑持p和do块-->
<dotype="accept"label="gotocard2">
<gohref="#card2"/>
</do>
Thisisthefirstcard.
</p>
</card>
<cardid="card2"title="Example1">
<p>
Thisisthesecondcard.
</p>
</card>
</wml>
一旦手机吸收了这个块,它就会显现第一个卡片,当你按下右边的软键时,就会看到第二个卡片。
第四节:另外一种预订你影戏票的办法
在上一节中,我解说了最基础的WAP和WML的观点,这一节我们就来看看ASP和WAP是怎样分离的.
如今在奥斯陆,影戏院供应了一种基于德律风体系的来发卖门票,这个体系是很庞大的,还必需给用户一些申明才干引导用户买票,并且用户还必需在报纸上找到某种影戏的代码,这个很烦,我们来先容另外一种办法。
这里这将给你展现一个复杂的让手机用户订票的WAP使用:一个一定让人喝采的服务。用户不用记着那些烦人的代码,他们可以间接从菜单当选取影戏和影戏院,而且用户也不必要认证。在这个例子顶用户被请求在影戏入手下手前40分钟交费,可是在真实的生存中,用户一样能够经由过程手机来结帐.
此使用程序想像的前提是一个影戏可以在统一工夫在多个影戏院上映,一个影戏院分歧的工夫演出分歧的影戏。
这里我没有过量的思索毛病处置的成绩,由于这不是本章节的重点,你喜好你能够本人加上.
为了复杂,我利用了Access97来做为数据库,固然真实的体系不会用它了,别的的数据库如SQLServer,也不用修改几代码.
数据库图表
数据库图表
.Movie和Theater表是明显必要的。Show表用于追踪如今另有几空位能够出卖。
如何调试这个程序
为了会见这个WAP服务,你必要一个WAP仿真器,这个程序次要是在NokiaToolkit1.2上调试,具体情形请检察上一章节。
选择影戏
在list表当选择一个影戏:
这里是代码:
以下是援用片断:
<!--#includefile="conn.asp"--><%sendtherightMIMEtype
Response.ContentType="text/vnd.wap.wml"
第一件事就是声明wml,仿真器怎样不在准确的中央声明XML,它是不会承受WML的只管Nokia7110能够疏忽这一点,可是不克不及包管别的的手机也行,以是你不能不做这事。一样你也得设置好MIME范例。
<?xmlversion="1.0"?>
<!DOCTYPEwmlPUBLIC"-//WAPFORUM//DTDWML1.1//EN""http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
在进进下一个card之前会有一个闪灼的屏幕来显现一个图片WBMP一种新的格局。这个事务是由timer属性决意的,这里我们设置的工夫为5秒.ontimer事务激发后将带你往另外一个card.(wmbp的Photoshop插件能够从网上收费下载).
<cardid="splash"ontimer="#card1"title="Welcometo"><timervalue="50"/>
<palign="center">
<br/>
<imgsrc="pix/logo.wbmp"alt="WAPmovies"/>
</p>
</card>
<cardid="card1"title="chooseafilm">
<%
sqlQuery="SELECT[Movie_ID],[title]FROMMovie"
setrsMovies=conn.Execute(SQLquery)
:
%>
<p>
<selectname=movie>
<%
DowhilenotrsMovies.eof
response.write("<optionvalue="&rsMovies("Movie_ID")&">"&rsMovies("title")&"</option>"&vbcrlf)
rsMovies.MoveNext
loop%>
</select>这一部分是本文的核心。从数据库中读出必要的数据显现出来,作为一个asp程序员,这个没有甚么出格的,可是就是这个复杂的程序如今被用于一种全新的服务器就显得纷歧样了。这也使得我加倍以为在基于WML的贸易站的收集编程asp更胜于Javaservlet.
以下是援用片断:
<small><anchortitle="next!">Next
<gohref="step2.asp"method="get">
<postfieldname="movie"value="$(movie)"/>
</go>
</anchor>
</small>
</p>
表单的提交也能够经由过程软开关函数(do和anchor)来完成。在这里,我是经由过程复杂的内嵌链接来完成的,由于我以为如许可以利用户感到直不雅和友爱。Postfields年夜至和HTML中的hidden差未几,可是wml的变量不像html中的那样必要在javascript中传送,它能够间接写在wml中,这一点上一节已解说了.在这里的传送的办法是get,post办法在WAP的标准也是被撑持的,仿真器也能辨认它,可是很不幸,在Nokia7110中,这个post不被撑持,以是你没得选择.
选择影戏院和上映工夫
这部分代码让用户来选择看甚么工夫的影戏,一切的纪录依据前一页所选的影戏来决意。在这里来选择影戏院和上映工夫.
以下是援用片断:
movie_id=Request("movie")
sqlQuery="SELECTtitleFROMmovieWHEREMovie_id="&movie_id
setrsMovie=conn.Execute(sqlQuery)
movie_title=rsMovie("title")
:
sqlQuery="SELECT[name],[time],[show_id]FROMShow,Theater"&_
"WHEREshow.movie_id="&movie_id&_
"ANDtheater.theater_id=show.theater_id"
setrsShows=conn.Execute(SQLquery)
假如你细心研讨了这个代码,你就会想用Session来保留影戏信息,再在这页举行查询更复杂。一样很不幸,Session是必要cookies的撑持,虽然说在WAP标准中也是被撑持的,可是在Nokia7110中也是不被撑持,这就是说如今我们还不克不及把session用在WAP服务中。
上面有一些风趣的事变:
以下是援用片断:
<selectname=show>
<%
DowhilenotrsShows.eof
response.write("<optionvalue="&rsShows("show_id")&">"&Left(rsShows("name"),cutter)&"("&rsShows("time")&")"&"</option>"&vbcrlf)
rsShows.MoveNext
loop%>
</select>
假如你对cutter变量感应困惑,那末就有一些事让你啼笑皆非
以下是援用片断:
Dimcutter
ifInStr(Request.ServerVariables("HTTP_USER_AGENT"),"Nokia7110")then
cutter=12
else
cutter=7
endif
这段代码依据分歧的设备来显现选项。我们有充分的来由的如许做,NokiaToolit1.2仿真器喜好把砍失落我的的选项到只要几个字符,而我们要显现影戏名字和上映工夫,以是我们就不能不削减影戏名字的字符。在真的手机中不会呈现这类成绩,以是我们就必需先判别设备的范例.
一旦我无机会(飞刀我很穷,没有钱,这是仅仅是悠远的妄想.......)在真的Nokia7110上测试我的代码,我们会当即感应我们有比我们想像更年夜的屏幕。实践上,有些影戏院的名字很乖僻,并且这些长名字会占用很年夜屏幕空间,我们没有需要华侈这些显现空间,只管把这些名字简化。
下一步就是让用户选择必要的票数.这部分的代码很像别的的部分。我将从数据库中查询不异的数据,由于Session不克不及在真实的WAP手机中利用,以是我必需对有些内容举行确认,看看是不是另有坐位出卖.
以下是援用片断:
SQLquery="SELECT*FROMshowWHEREShow_id="&show_id
setrsShow=conn.Execute(SQLquery)
:
seats=rsShow("free_seats")
:
ifseats=0then
Response.write("Sorry,nomoreseats")
rsShow.close
setrsShow=nothing
Response.write("</p></card></wml>")
Response.end
else
ifseats>6thenbookupto6ticketsormaxavailable
max_seats=6
else
max_seats=seats
endif
endif
%>
<%=movie_title%>at<%=theater_name%>
<selectname=ticket>
<%
dimi
i=1
Dowhilei<=max_seats
response.write("<optionvalue="&i&">"&i&"ticket(s)"&"</option>"&vbcrlf)
i=i+1
loop%>
</select>
贮存票数
如今我们已有了一切必要的数据了,我们得把它们保留起来:
以下是援用片断:
tickets=Request("ticket")
:
free_seats=rsShow("free_seats")
:
free_seats=free_seats-tickets
:
SQLUpdate="UPDATEShow"&_
"SETShow.free_seats="&free_seats&""&_
"WHEREShow_ID="&show_id
conn.Execute(SQLupdate)
SQLquery="SELECTmax([Booking_ID])asbookingnumberFROMbooking"
SetrsBooking=conn.execute(SQLquery)
maxbookid=rsBooking("bookingnumber")+1
SQLinsert="INSERTINTOBooking(show_id,booked_seats)"&_
"VALUES("&show_id&","&tickets&")"
conn.Execute(SQLinsert)%>
Youhavebooked<%=tickets%>ticket(s)for<%=movie_title%><br/>
Theshowwilltakeplaceat<%=theater_name%>(<%=time%>)
<br/>
Yourreferencenumberis<%=maxbookid%>
上面是显现:
Figure4:完成买卖.
买卖已完成了,影戏院能够坐着影戏院门口收钱了.
结论
WAP如今才方才走出它的第一步,但是它是比来几年内最有反动性的IT开展之一。在这篇文章中我先容了如何用asp写WAP使用程序,并对你们提出了一些告诫,但愿对你们今后的开展有效。多媒体手艺仍然不克不及太多的用于WAP,可是它的可挪动性倒是主要的,也为商家供应了很多的商机。
使用filesystemobject,可以对服务器上的文件进行操作,浏览、复制、移动、删除等。有ado的支持,asp对数据库的操作非常得心应手。你甚至可以像使用本地数据库那样,管理远程主机上的数据库,对表格、记录进行各种操作。 |
|