发新话题
打印

手把手教你用ASP开发WAP网站

手把手教你用ASP开发WAP网站

WAP的基础知识和准备工作

    网上,对于WML的基本语法和ASP编写WAP的教程已经有很多了,在这里就不再罗索,下面提供一些收集的教程,大家参考学习,有更好的教程,更请告知我进行收集,谢谢!

WAP的基础知识:
WML语言基础(WAP建站)一
http://blog.spforum.net/user1/60886/archives/2007/5952.html
WML语言基础(WAP建站)二
http://blog.spforum.net/user1/60886/archives/2007/5953.html
WML语言基础(WAP建站)三
http://blog.spforum.net/user1/60886/archives/2007/5954.html
WML语言基础(WAP建站)四
http://blog.spforum.net/user1/60886/archives/2007/5955.html
WML语言基础(WAP建站)五
http://blog.spforum.net/user1/60886/archives/2007/5956.html
WML语言基础(WAP建站)六
http://blog.spforum.net/user1/60886/archives/2007/5957.html
WAP初级教程文档下载--基本页面结构(包含对WML标签的解释)
http://blog.spforum.net/user1/60886/archives/2007/5958.html
wap初级教程文档下载--内容显示
http://blog.spforum.net/user1/60886/archives/2007/5959.html
7WAP

wap初级教程文档下载--内容输入框
http://blog.spforum.net/user1/60886/archives/2007/5960.html
wap初级教程文档下载--事件
http://blog.spforum.net/user1/60886/archives/2007/5961.html
WAP常见问题问答大全(一)
http://blog.spforum.net/user1/60886/archives/2007/5962.html
WAP常见问题问答大全(二)
http://blog.spforum.net/user1/60886/archives/2007/5963.html
WAP常见问题DOC文档下载
http://blog.spforum.net/user1/60886/archives/2007/5964.html
换个头像,看见广告就眼红,直接封ID。

TOP

首先,新建立一个文本文件,将文件名修改成index.asp
用记事本打开(当然,你可以使用Frontpage或者Dreamweaver,最好是使用vs2003或者2005来打开编辑)将文件的编码保存为UTF-8(文件--另存为--编码:选择“UTF-8”--保存)如下图(2-1):

好了,下面我们就来构建一个页面布置如图2-2那样的页面内容。

将<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>复制到页面的最顶端,这一行主要是将该页面内容的编码设置UTF-8
插入配置文件<!--#i nclude file="inc/config.asp"-->

Response.C '将文件的格式转换成wml,编码为UTF-8

下面这一段是WML文件的开头声明,必不可缺
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">  
<wml>

头部部分
<head>
<meta http-equiv="Cache-Control" c/><!-- 每次都需通过连接服务器调用本页内容 -->
<meta http-equiv="Cache-Control" c/><!-- 禁止浏览器从缓存中访问页面内容 -->
</head>

定义一个卡片
<card id="index" title="WAP新闻系统">

页面居左对齐
<p align="left">

输入各个结束标志(注意,结束标志绝对不能缺少,并且要一一对应,不然将会出错!)
</p>
</card>
</wml>

用opera(模拟器),先看一下,一个空白的WML页面就出来了!现在,我们就在这个页面上填上内容。

插入Logo图片(记住最后要加“/”)
<img src="/images/logo.gif" alt="logo"/>

插入换行符号(同样要记住最后要加“/”)
<br/>

接下来就是输出新闻类别了。

执行数据库操作的时候,跟WEB上的操作是完全一样的!
(将下列代码复制到index.asp中,每一个循环将输出一个新闻类别。)

=*新闻类别*=<br/>
<%
Dim rs,i '定义变量
Call openConn() '打开数据库
Set rs=conn.execute("Select ID,Name from [NewsType]") '读取类别表数据
i=0
While(Not rs.eof) '//循环列出类别名称及链接
i=i+1
%>
<a href="NewsList.asp?ID=<%=rs(0)%>"><%=rs(1)%></a>
<%
If i=3 or i=6 Then Response.Write("<br/>") '输出第三个及第六个后换行
rs.moveNext  '切记要加上“rs.moveNext”否则会出现死循环!
Wend
Call rsClose()
%>

跟着就是最新新闻的列表,我们读取前十条记录
(将下列代码复制到index.asp中,每一个循环将输出一条新闻。)

=*最新新闻*=<br/>
<%
Set rs=conn.execute("Select Top 10 ID,title From [NewsContent] order by ID desc") '读取新闻内容表前十条记录
While(Not rs.eof) '//循环列出新闻标题
%>
<a href="NewsShow.asp?ID=<%=rs(0)%>"><%=rs(1)%></a><br/>
<%
rs.moveNext
Wend
Call rsClose()
Call connClose()
%>

输入换行符,版权信息

=*=*=*=*=*=<br/>
(C)WapForum.cn

用opera运行看看,嘿嘿,漂亮的页面是不是出来了!
再传到空间里,再拿手机试一试!

温馨提示:为了你调试的方便,建议你分段进行编码.
换个头像,看见广告就眼红,直接封ID。

TOP

本课程,我们将透过新闻列表文件的编写,来学习ASP在WAP站点应用站的文章列表与列表分页技术。

同样,我们要将文件的编码和内容的编码转成UTF-8,插入配置文件。
将文件的编码保存为UTF-8(文件--另存为--编码:选择“UTF-8”--保存)
复制以下代码:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!--#i nclude file="inc/config.asp"-->
<%
Response.C '将文件的格式转换成wml,编码为UTF-8
%>

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"

"http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head>
<meta http-equiv="Cache-Control" c/><!-- 每次都需通过连接服务器调用本页内

容 -->
<meta http-equiv="Cache-Control" c/><!-- 禁止浏览器从缓存中访问页面内容 -->
</head>
WAP业界动态
<card id="NewsList" title="新闻列表">
<p align="left"><!-- 页面居左对齐 -->

</p>
</card>
</wml>


接着,我们将在<p align="left"> </p>之间填入新闻列表的相关代码,代码如下:

<%
Dim ID,rs
ID=int(request.QueryString("ID"))
Call openConn() '打开数据库
Response.Write (conn.execute("Select Name from [NewsType] where ID="& ID &"")(0))&"新闻列表

<br/>" '输出类别名
%>
=*=*=*=*=*=<br/>
<%

Set rs=conn.execute("Select ID,title From [NewsContent] where typeID="& ID &" order by ID

desc") '读取新闻内容表
If Not rs.eof Then
Dim i,PageSize
PageSize=10      '每一页显示的条数
For i=1 To PageSize     '根据每一页的条数进行循环



If rs.eof Then Exit For    '如果循环到了尽头,则跳出循环
%>
<a href="NewsShow.asp?ID=<%=rs(0)%>"><%=rs(1)%></a><br/>
<%
rs.moveNext '游标指到下一条记录      
Next
Else
%>
暂时没有新闻!
<%
End If
Call rsClose()
Call connClose()
%>

打开Opera,输入地址:http://localhost/NewsList.asp?ID=1进行调试,正常显示效果如图


现在,我们插入分页代码。在PageSize=10 和 For i=1 To PageSize之间插入以下代码:

Dim Count,page,pagecount,gopage   '定义相关变量
gopage="NewsList.asp?ID="&ID&"&"
Count=conn.execute("Select count(ID) from [NewsContent] where typeID="& ID &"")(0)

'读取新闻总数
page=int(request.QueryString ("page"))
if page<=0 or page="" then page=1  '默认为第一页
pagecount=(count+pagesize-1)\pagesize '计算出页数
rs.move(pagesize*(page-1))    '将游标指到每一页的第一条记录


刷新http://localhost/NewsList.asp?ID=1页面,查看效果!再把PageSize=10改成PageSize=2,刷新页

面再看效果。接下来,我们再把分页的链接加上去,就基本完成了分页的操作了!

将以下代码复制到在Next 与 Else之间:
response.write ("共:"&count&"条,"&page&"/"&pagecount&"页")
if page-pagecount<0 then response.write "<br/><a href="""&gopage&"page="&page+1&""">

下页-</a><a href="""&gopage&"page="&pagecount&""">尾页</a>"
if page>1 then response.write "<br/><a href="""&gopage&"page="&page-1&""">上页-

</a><a href="""&gopage&"page=1"">首页</a>"



'//下面这一句,是让用户通过输入框输入页数,然后通过链接直接转向该页
if pagecount>1 then response.write "<br/><input name=""page"" format=""*N""

value="""&page&""" type=""text"" maxlength=""5"" emptyok=""true""/><br/><a

href="""&gopage&"page=$(page)"">[跳转到该页]</a>"

再刷新http://localhost/NewsList.asp?ID=1页面,显示效果如图


最后,我们在重新把PageSize=2改成PageSize=10,再插上换行符和返回首页的链接,就大功告成了!
<br/>=*=*=*=*=*=<br/>
<a href="/index.asp">返回网站首页</a><br/>


用opera运行看看,嘿嘿,漂亮的页面是不是出来了!
再传到空间里,再拿手机试一试!^_^
换个头像,看见广告就眼红,直接封ID。

TOP

在这一课,我们将探讨内容显示与内容分页的问题。
    这也是WAP页面上经常用到的一个操作!该功能的重要性不亚于文章列表分页,因为手机内存的限制,篇幅太长的文章可能导致手机死机或者显示异常的现象。
    新建NewsShow.asp文件,将文件的编码和内容的编码转成UTF-8,将文件的编码保存为UTF-8(文件--另存为--编码:选择“UTF-8”--保存)
    复制以下代码:
    <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
    <!--#include file="inc/config.asp"-->
    <%
    Response.ContentType="text/vnd.wap.wml;charset=UTF-8" '将文件的格式转换成wml,编码为UTF-8
    %>
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">  WAP业界动态
    <wml>
    <head>
    <meta http-equiv="Cache-Control" content="max-age=0"/><!-- 每次都需通过连接服务器调用本页内容 -->
    <meta http-equiv="Cache-Control" content="no-cache"/><!-- 禁止浏览器从缓存中访问页面内容 -->
    </head>
    <card id="NewsShow" title="查看内容">
    <p align="left">
   
    </p>
    </card>
    </wml>
   
    接下来,在<p align="left"> </p>之间加上新闻内容显示的相关代码:
   
    <%
    Dim ID,rs,i,typeID,content '定义变量
    ID=int(request.QueryString("ID"))
Call openConn() '打开数据库
    Set rs=conn.execute("Select typeID,title,content,comment From [NewsContent] where ID="& ID &"") '读取新闻内容表
    If Not rs.eof Then
     typeID=rs(0)
     content=rs(2) '将新闻内容传给变量content
   
     Response.Write (rs(1)&"<br/>=*=*=*=*=*=<br/>"&Replace(content,chr(13),"<br/>")) '将内容中的回车替换成换行
    Else
     typeID=1
     Response.Write ("该新闻不存在")
    End If
    Call rsClose()
    Call ConnClose()
    %>
   
    保存文件,打开Opera,输入地址:http://localhost/NewsShow.asp?ID=2,将可以看到如图4-1所示的界面内容。
换个头像,看见广告就眼红,直接封ID。

TOP

用ASP开发WAP新闻系统--字符的过滤替换与其重要性
   
    手机浏览器对页面的WML结构非常严格,只要页面出现一个不符合核定标准的字符,将会导致整个页面无法显示。因此,对“非法字符”进行规律替换,是非常必要的操作。这一课,我们就来讲一讲字符过滤。那些是所谓的“非法字符”,应该如何来避免呢!
   
    打开配置文件config.asp,加入以下代码:
   
    '//过滤字符
    Function replaceStr(str)
     Dim myStr
     myStr = str
     replaceStr = ""
     If IsNull(myStr) Then
     Exit Function
     End If
     myStr = Replace(myStr, "'", "'") ''为单引号,为了避免在后面的&被替换掉,所以在这里先把单引号还原
     myStr = Replace(myStr, "$", "¥") '在WML里面“$”符号是表示变量,所以将其替换成¥
     myStr = Replace(myStr, "&", "&")
     myStr = Replace(myStr, " ", " ")
     myStr = Replace(myStr, "<", "<")
     myStr = Replace(myStr, ">", ">")
     myStr = Replace(myStr, Chr(13), "<br/>") '将回车转换成换行
     replaceStr = myStr
    End Function
   
   
    单引号是因为会对数据库语句造成影响,所以如果在执行数据库语句之前,必须将单引号替换',而我们这里是把他还原。对于$&<>这些符号,主要是因为在WML里是特殊字符号,所以要显示时,必须将其解码。要重要强调的是“$”符号在WML里是表示变量,如果要显示“$”,需要写成“$$”,这样显示出来的就是一个“$”,不会让程序出错!当然,上面替换的时候,也可以将“¥”改为“$$”,但RMB我们还是习惯用¥这个符号了!
    另外,在Ascii码表中,大于127小于178的这些符号,都有可能让手机无法正常显示页面,如果,要周全的话,也可以把这些符号给替换掉。在这里,我们就先不讨论了,大家视需要扩展一下吧!下面附上两张Ascii码表,希望对大家有所帮助!
Ascii码表(一)

Ascii码表(二)


    下面,我们就在NewsShow.asp来调试一下这一段过滤字符的代码。
   
    打开模拟器,输入地址:http://localhost/NewsShow.asp?ID=1,显示一切正常。我们再打开NewsShow.asp文件,将content=rs(2)改成content=rs(2)&"<",然后保存文件。在刷新http://localhost/NewsShow.asp?ID=1页面看一下。呵呵,页面报错了吧!这就是因为“<”符号没有过滤的原因了!出错提示上有明显地一个红色标识,那里就是出错的位置,出错界面如图5-3所示。

    现在,我们将过滤的过程加到代码中去。
   
    将Response.Write (rs(1)&"<br/>=*=*=*=*=*=<br/>"&Replace(content,chr(13),"<br/>"))一行中的Replace(content,chr(13),"<br/>")换成replaceStr(content),保存文件,再次刷新页面看看效果!嘿嘿,正常显示的页面又回来了!当然,你还可以试试其他的“特殊符号”!
   
    最后,记得把收尾工作再完善一下哦,刚刚content=rs(2)&"<"要重新改回content=rs(2)。^_^
换个头像,看见广告就眼红,直接封ID。

TOP

用ASP开发WAP新闻系统--新闻的回复功能与回复显示

这一课,我们将通过增加新闻的回复功能了解WML表单的使用,深入了解WAP站点表单数据传输过程中应该注意的一些问题。
   
    首先,打开NewsShow.asp文件,并在if pagecount>2 then response.write "<br/><input name=""page"" format=""*N""
   
    value="""&page&""" type=""text"" maxlength=""5""/><br/><a href="""&gopage&"page=$(page)"">[跳转到该页]</a>" 和 Else 之间加入
   
    以下代码:   
   
    Response.Write("<br/>=*=*=*=*=*=<br/>")
     Response.Write ("快速回复:<br/>"&_
     "<input name=""content"&ID&""" emptyok=""true"" type=""text""/><br/>"&_ 7WAP
     "<anchor>马上回复"&_
     "<go href=""SaveReply.asp"" method=""post"">"&_
     "<postfield name=""ID"" value="""&ID&""" />"&_
     "<postfield name=""content"" value=""$(content"&ID&":n)"" />"&_
     "<postfield name=""Method"" value=""POST"" />"&_
     "</go>"&_
     "</anchor>")
     
    代码解释:
    这是WML用POST方式传输表单数据的代码。当然,输入框input可以有多个,并在<anchor></anchor>之间相应添加postfield就可以了,名字要一一对应!
    emptyok=""true"" 是指该输入框可以为空,在一般情况下,建议加上这一句,否则有些手机在点别的链接的时候,总会提示出错。
    (content"&ID&":n)加上"&ID&"是为了避免手机缓存致使每条新闻的回复框都出现之前输入的回复内容,你当然也可以将其改成($content:n)    ($content:n)是WML变量的写法,以$符号开头,WML中表单提交有:n,:e,:u,和空,四种状态,其中:n是强制不进行URL转义;:e是转义;:u是反转义。
   
    传输中文数据的时候,一定要用POST方式。如果你只传输英文或者数字,可以使用GET方式进行传输。格式如下:
    <a href="SaveReply.asp?ID="& ID &"&content=$(content"&ID&")&Method=GET">马上回复</a>
   
    在这里 $(content"&ID&") 里的:n和&Method=GET"可以省略掉。但是,&绝对不可以写成&,否则页面执行时将出错!
   
   
    清楚上面的代码之后,我们来运行调试一下!打开Opera,输入网址:http://localhost/NewsShow.asp?ID=2 可以看到,多了一个如图6-1所示的快速回复框!

现在,我们来制作保存页面。新建一个文本文件,将文件名重命名为:SaveReply.asp,打开文件,将文件的编码保存为UTF-8,复制以下代码:
本文章首发:http://www.7wap.cn,WAP资讯网

   
    <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
    <!--#include file="inc/config.asp"-->
    <%
    Response.ContentType="text/vnd.wap.wml;charset=UTF-8" '将文件的格式转换成wml,编码为UTF-8
    %>
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
    <wml>
    <head>
    <meta http-equiv="Cache-Control" content="max-age=0"/><!-- 每次都需通过连接服务器调用本页内容 -->
    <meta http-equiv="Cache-Control" content="no-cache"/><!-- 禁止浏览器从缓存中访问页面内容 -->
    </head>
www.7wap.cn提供WAP资讯服务

    <card id="SaveReply" title="保存回复">
   
    <%
    Dim ID,content
    ID=int(Request.Form("ID"))
    %>
    <onevent type="ontimer"><go href="NewsShow.asp?ID=<%=ID%>" method="get"></go></onevent><timer value="30"/>
    <p align="left"><!-- 页面居左对齐 -->
    <%
    If ID=0 Then
     Response.Write ("参数传输出错!<br/>=*=*=*=*=*=<br/>")
     Response.Write ("<anchor title=""返回上一页"">返回上一页<prev/></anchor><br/>") '这是WML中的goback代码,相当于Javascript中的history.goback
     Response.Write ("<a href=""index.asp"">返回网站首页</a><br/>"& "</p></card></wml>")
     Response.End '在这里结束代码的执行,避免下面的代码的相关操作会影响程序的执行效果
    End IF
   
    content=Replace(Request.Form("content"),Chr(39), "'") '获取content的内容,并讲单引号进行转换
   
    If content="" Then
     Response.Write ("内容不能为空!<br/>=*=*=*=*=*=<br/>")
     Response.Write ("<anchor title=""返回上一页"">返回上一页<prev/></anchor><br/>")
     Response.Write ("<a href=""NewsShow.asp?ID="& ID &""">返回新闻内容</a><br/>"&_
     "<a href=""index.asp"">返回网站首页</a><br/>"&_
     "</p></card></wml>") wap资源:www.7wap.cn
     Response.End
    End If
   
   
    Call openConn() '打开数据库
    Conn.Execute("Insert Into [NewsComment] (newsID,content) values("& ID &",'"& content &"')")
    Call ConnClose()
    Response.Write ("回复成功!<br/>=*=*=*=*=*=<br/>")
    Response.Write ("<anchor title=""返回上一页"">返回上一页<prev/></anchor><br/>")
    Response.Write ("<a href=""NewsShow.asp?ID="& ID &""">返回新闻内容</a><br/>"&_
     "<a href=""index.asp"">返回网站首页</a><br/>"&_
     "</p></card></wml>")
   
    %>
    上面这段代码都比较简单,我就不多加解释了,需要强调一点就是,每一个出错的提示,都必须有</p></card></wml>结尾,因为WML对代码完整性要求非常严格,另外,在每次提示出错时,要加上Response.End,否则,当有两个出错条件符合的时候,程序将会执行两个输出错误,进而让页面显示出错!
   
    接下来,返回刚才打开的页面,http://localhost/NewsShow.asp?ID=2,在快速回复输入框中输入一些内容,进行调试!
   
    最后,就是回复的显示跟回复列表文件了。
    先打开NewsShow.asp文件,在快速回复上面,即Response.Write("<br/>=*=*=*=*=*=<br/>"),插入以下代码:
    '//读取最后一条回复
     Dim rsReply
     Set rsReply=conn.execute("Select top 1 content from [NewsComment] where newsID="& ID &" order by ID desc") 7WAP
     If Not rsReply.eof Then
     Response.Write("<br/>=*=*=*=*=*=<br/>")
     Response.Write ("最新回复:<br/>"&_
     replaceStr(rsReply(0))&"<br/>"&_
     "<a href=""ReplyList.asp?ID="& ID &""">阅读所有回复</a>")
     End If
     rsReply.close()
     set rsReply=nothing
   
    这段代码主要是读取回复表里关于这条新闻的最后一条回复。相信大家都对这段代码的意思非常清楚了,这里就不多罗索!
    保存文件之后,回到刚才的调试页面,刷新页面看一看,嘿嘿,刚刚回复的内容就显示出来了!请看图6-2的效果。


    新闻回复列表文件的完成:  
    同样是新建立一个文本文件,将文件名修改为ReplyList.asp,保存文件编码为UTF-8。复制以下代码:
   
    <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
    <!--#include file="inc/config.asp"-->
    <%
    Response.ContentType="text/vnd.wap.wml;charset=UTF-8" '将文件的格式转换成wml,编码为UTF-8
    %>
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
    <wml>
    <head>
    <meta http-equiv="Cache-Control" content="max-age=0"/><!-- 每次都需通过连接服务器调用本页内容 -->
    <meta http-equiv="Cache-Control" content="no-cache"/><!-- 禁止浏览器从缓存中访问页面内容 -->  
    </head>
    <card id="ReplyList" title="阅读回复">
    <p align="left"><!-- 页面居左对齐 -->
    阅读所有回复
    <br/>=*=*=*=*=*=<br/>
    <%
    Dim ID,rs
    ID=int(request.QueryString("ID"))
   
    Call openConn() '打开数据库
    Set rs=conn.execute("Select content From [NewsComment] where newsID="& ID &"") '读取新闻回复表
    If Not rs.eof Then
     Dim PageSize,i
     PageSize=10 '每一页显示的条数
     Dim Count,page,pagecount,gopage '定义相关变量
     gopage="ReplyList.asp?ID="&ID&"&"
     Count=conn.execute("Select count(ID) from [NewsComment] where newsID="& ID &"")(0) '读取回复总数
     page=int(request.QueryString ("page"))
     if page<=0 or page="" then page=1 '默认为第一页
     pagecount=(count+pagesize-1)\pagesize '计算出页数
     rs.move(pagesize*(page-1)) '将游标指到每一页的第一条记录
     For i=1 To PageSize '根据每一页的条数进行循环
     If rs.eof Then Exit For '如果循环到了尽头,则跳出循环
     Response.Write (i+(PageSize*(page-1))&"."&replaceStr(rs(0))&_
     "<br/>-=-=-=-=-=-<br/>")
     rs.moveNext
     Next
本文章首发:http://www.7wap.cn,WAP资讯网


     response.write ("共:"&count&"条,"&page&"/"&pagecount&"页")
     if page-pagecount<0 then response.write "<br/><a href="""&gopage&"page="&page+1&""">下页-</a><a
   
    href="""&gopage&"page="&pagecount&""">尾页</a>"
     if page>1 then response.write "<br/><a href="""&gopage&"page="&page-1&""">上页-</a><a href="""&gopage&"page=1"">首页
   
    </a>"
     '//下面这一句,是让用户通过输入框输入页数,然后通过链接直接转向该页
     if pagecount>1 then response.write "<br/><input name=""page"" format=""*N"" value="""&page&""" type=""text""
   
    maxlength=""5"" emptyok=""true""/><br/><a href="""&gopage&"page=$(page)"">[跳转到该页]</a>" wap资源:www.7wap.cn
    Else
     Response.Write ("暂无回复内容!")
    End If
    Call rsClose()
    Call ConnClose()
   
    Response.Write ("<br/>=*=*=*=*=*=<br/>")
    Response.Write ("快速回复:<br/>"&_
     "<input name=""content"&ID&""" emptyok=""true"" type=""text""/><br/>"&_
     "<anchor>马上回复"&_
     "<go href=""SaveReply.asp"" method=""post"">"&_
     "<postfield name=""ID"" value="""&ID&""" />"&_
     "<postfield name=""content"" value=""$(content"&ID&":n)"" />"&_
     "<postfield name=""Method"" value=""POST"" />"&_
     "</go>"&_
     "</anchor>")
    %>
    <br/>=*=*=*=*=*=<br/>
    <a href="NewsShow.asp?ID=<%=ID%>">返回新闻内容</a><br/>
    <a href="index.asp">返回网站首页</a><br/>
   
    </p>
    </card>
    </wml>
   
    这些代码相信大家都非常熟悉,其实它跟新闻列表文件的代码几乎是一样的,只是读取的数据库跟数据库表不同而已!具体就不多讲了。
   
    在本地调试无错误之后,我们把代码传送到远程空间,用手机测试一下!
换个头像,看见广告就眼红,直接封ID。

TOP

接下来的工作,就是回复的显示跟回复列表文件了。
    先打开NewsShow.asp文件,在快速回复上面,即Response.Write("<br/>=*=*=*=*=*=<br/>")上面,插入以下代码:
   
    '//读取最后一条回复
     Dim rsReply
     Set rsReply=conn.execute("Select top 1 content from [NewsComment] where newsID="& ID &" order by ID desc")
     If Not rsReply.eof Then
     Response.Write("<br/>=*=*=*=*=*=<br/>")
     Response.Write ("最新回复:<br/>"&_
     replaceStr(rsReply(0))&"<br/>"&_
     "<a href=""ReplyList.asp?ID="& ID &""">阅读所有回复</a>")
     End If
     rsReply.close()
     set rsReply=nothing
   
    这段代码主要是读取回复表里关于这条新闻的最后一条回复。相信大家都对这段代码的意思非常清楚了,这里就不多罗索!
    保存文件之后,回到刚才的调试页面,刷新页面看一看,嘿嘿,刚刚回复的内容就显示出来了!请看图6-2的效果。


   新闻回复列表文件的完成:
    同样是新建立一个文本文件,将文件名修改为ReplyList.asp,保存文件编码为UTF-8。复制以下代码:
   
    <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
    <!--#include file="inc/config.asp"-->
    <%
    Response.ContentType="text/vnd.wap.wml;charset=UTF-8" '将文件的格式转换成wml,编码为UTF-8  
    %>
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
    <wml>
    <head>
    <meta http-equiv="Cache-Control" content="max-age=0"/><!-- 每次都需通过连接服务器调用本页内容 -->
    <meta http-equiv="Cache-Control" content="no-cache"/><!-- 禁止浏览器从缓存中访问页面内容 -->
    </head>
    <card id="ReplyList" title="阅读回复">
    <p align="left"><!-- 页面居左对齐 -->阅读所有回复
    <br/>=*=*=*=*=*=<br/>
    <%
    Dim ID,rs

    ID=int(request.QueryString("ID"))
   
    Call openConn() '打开数据库
    Set rs=conn.execute("Select content From [NewsComment] where newsID="& ID &"") '读取新闻回复表
    If Not rs.eof Then
     Dim PageSize,i
     PageSize=10 '每一页显示的条数
     Dim Count,page,pagecount,gopage '定义相关变量
     gopage="ReplyList.asp?ID="&ID&"&"
     Count=conn.execute("Select count(ID) from [NewsComment] where newsID="& ID &"")(0)'读取回复总数
     page=int(request.QueryString ("page"))
     if page<=0 or page="" then page=1 '默认为第一页
     pagecount=(count+pagesize-1)\pagesize '计算出页数
     rs.move(pagesize*(page-1)) '将游标指到每一页的第一条记录
     For i=1 To PageSize '根据每一页的条数进行循环
     If rs.eof Then Exit For '如果循环到了尽头,则跳出循环
     Response.Write (i+(PageSize*(page-1))&"."&replaceStr(rs(0))&_
     "<br/>-=-=-=-=-=-<br/>")
     rs.moveNext
     Next
     response.write ("共:"&count&"条,"&page&"/"&pagecount&"页")
     if page-pagecount<0 then response.write "<br/><a href="""&gopage&"page="&page+1&""">下页-</a><a
   
    href="""&gopage&"page="&pagecount&""">尾页</a>"  
     if page>1 then response.write "<br/><a href="""&gopage&"page="&page-1&""">上页-</a><a href="""&gopage&"page=1"">首页
   
    </a>"
     '//下面这一句,是让用户通过输入框输入页数,然后通过链接直接转向该页
     if pagecount>1 then response.write "<br/><input name=""page"" format=""*N"" value="""&page&""" type=""text""
   
    maxlength=""5"" emptyok=""true""/><br/><a href="""&gopage&"page=$(page)"">[跳转到该页]</a>"
    Else
     Response.Write ("暂无回复内容!")
    End If
    Call rsClose()
    Call ConnClose()
     

    Response.Write ("<br/>=*=*=*=*=*=<br/>")
    Response.Write ("快速回复:<br/>"&_
     "<input name=""content"&ID&""" emptyok=""true"" type=""text""/><br/>"&_
     "<anchor>马上回复"&_
     "<go href=""SaveReply.asp"" method=""post"">"&_
     "<postfield name=""ID"" value="""&ID&""" />"&_
     "<postfield name=""content"" value=""$(content"&ID&":n)"" />"&_
     "<postfield name=""Method"" value=""POST"" />"&_
     "</go>"&_
     "</anchor>")
    %>
    <br/>=*=*=*=*=*=<br/>
    <a href="NewsShow.asp?ID=<%=ID%>">返回新闻内容</a><br/> WAP资讯网
    <a href="index.asp">返回网站首页</a><br/>
   
    </p>
    </card>
    </wml>
   
   
    这些代码是不是很眼熟咧,其实它跟新闻列表文件的代码几乎是一样的,只是读取的数据库跟数据库表不同而已!
   
    保存文件后,进行相应的调试,然后传到空间里,用手机再测试一下效果!
换个头像,看见广告就眼红,直接封ID。

TOP

用ASP开发WAP新闻系统--总结与经验交流

经过这几天的学习,相信大家对用ASP编写WAP程序已经有一定的掌握了。有一定编程基础的人,相信转入WAP的程序编写肯定不再是问题,欢迎各位到本人的博客、QQ、网站进行交流,互相学习!
   
    希望,此次的教程可以起到一个抛砖引玉的效果,让更多的更好的WAP教程跃然到网络里来,更希望本教程可以帮助那些正在进入或者准备进入WAP领域的兄弟姐妹们!
    下面,就来跟大家交流一下,在WAP站点上应该注意的一些问题。
   
    ●、手机号码获取及登陆的问题:
    由于之前,移动的封杀,致使原来可以获取用户手机号码的许多方法都无法正常使用,给用户的登陆操作造成很大的麻烦。在若小的屏幕上,打字也麻烦,登陆自然也是一个麻烦事!
    取号的解决办法是有的,但都不尽完善。所以,大家还是抛弃取号的想法,尽量摆脱移动梦网的束缚吧!
   
    解决用户的自动登陆有很多种办法,有的用SESSION、有的用COOKIES,但这些都不是相当地不完善。因为手机用户访问FreeWap都是透过移动的网关来访问的,所以,很多情况下,移动似乎可以直接控制这些参数。致使用户访问出现故障。也因为用户手机使用的浏览器不相同,很多问题也会截然不同。  
    最好的解决方法,也是现在最常用的方法,就是将用户的信息放到URL中进行传输,虽然有点麻烦,但是这是目前最稳定,而且最好用的解决方案。目前,包括WAP中国、3G门户、乐讯甚至是梦网里的很多业务都也是用这个方法。   
   
    ●、目前FreeWap的赢利模式:
    目前,FreeWap的赢利模式比较单调,普遍来自SP的广告(赢利比较可观)。一些广告联盟和一些比较大型的知名网站也开始涉及传统行业的广告。对于SP的广告模式比较知名的网站都采取包月的广告模式,而一般的网站都是按量计费。一些传统行业的广告联盟,都按click算量;而游戏或者软件的方面的推广习惯按注册用户数来计费。   
   
    ●、各地区移动网关对用户访问的影响:
    由于GRPS用户是通过设置移动的代理进行接入,所以透过移动网关访问FreeWap就受到了很多的限制。甚至是连cookies和session都无法灵活获取。而各地的移动,又对其限制有所不同,在广州可以上到的一些FreeWap站点,到了另外一个城市就上不了了,有的地区可以取到一些用户手机号码等的信息,有的地区又不可以。经常提示70*的错误提示就是这个原因。因此,在手机上调试自己做的网站,要清楚哪些错误信息是网关错误,哪些是程序本身的错误才行!  
      
    ●、移动的政策
    中国移动对独立 Wap 网站系列措施回顾
    ? 2005 年 10 月份:限制 SP 通过独立 wap 进行收费 WAP 业务的推广;
   
    ? 2005 年 11 月份:正式逐步实施不向独立 wap 网站传输手机号码和终端信息,而对于其收费的 WAP 业务正常提供所有的信息;
   
    ? 2006 年 1 月份:发动关于独立 wap 不受政府监督的大量文章,过大地强调用户权益受损、黄色信息泛滥、盗版侵权等问题;
   
    ? 2006 年 2 月份:限制了动感地带和神州行原有的 GPRS 包月上网套餐服务;
   
    ? 2006 年 3 月份:广东移动在广东各大媒体,采用广告软文的方式,打击独立 wap 网站。  
   
    ? 2006 年 4 月后基本没有其他的动作再出台。
   
    ? 2006 年 5 月份,移动对 SP 出台强硬的 11 条管理措施,直接影响整个无线增值业务的市场;
   
    ? 2006 年 6 月份,移动贯彻执行新管理措施,加强对 sp 的整肃;
   
    ? 2006 年 7 月份,关于对浏览非梦网 WAP 网站流量差异化计费的风声四起,引起了整个无线互联行业多的关注以及热切讨论;
   
    ? 2006 年 8 月份,中移动对免费 WAP 的整治计划悄然推进,并将无线音乐、即时通讯、移动博客、移动搜索确定为移动梦网的四项核心业务,未来独立 WAP 网站将被不可避免地并入移动体系,成为专门的 CP/SP 。
   
    ? 2006 年 9 月份,中国移动总裁王建宙在北京举行的中国企业高峰论坛会议上表示独立 WAP 的通道是打开的,独立 WAP 对于中国移动不一定是挑战,双方是一种共存的关系,中国移动和免费 WAP 应寻找一种共赢模式。
   
    ? 2006 年 10 月份, 2006 年第三季度,由于移动 WAP 业务受到政策调控的影响, WAP 业务整体市场规模两年来首度出现负增长。第三季度 WAP 总收入环比下降 8.1% ,未有如投资和业内所预计的业务收入下降超过 40% 。
   
    ? 2006 年 11 月份,中移动对移动梦网 wap 上的几个栏目进行了招标,将其中一部分栏目的内容交由 CP 和 SP 来经营,业界预言这对大型 SP 是一个重生的机遇,同时对独立 wap 站形成更正面的挑战。
   
    ? 2006 年 12 月,中移动再次下达严禁泄露客户号码的通知,并设置 wap 业务黑白名单对 SP 进行管制,间接对 WAP 网盟业务开展造成一定影响。
   
    传言称,移动即将封闭CMWAP访问FreeWap,个人认为这种情况微乎其微。但无论是真是假,这对于我们目前的学习没有多大影响,我们要看准的是,无线互联网是一个必定的趋势,互联网的出现彻底地改变了人们的生活,并造就了很多IT“强人”,而“第五媒体”的诞生,绝对不会向WEB示弱的!
换个头像,看见广告就眼红,直接封ID。

TOP

发新话题