Asp開(kāi)發(fā)聯(lián)通CDMA的WAP網(wǎng)站

2010-08-28 10:47:53來(lái)源:西部e網(wǎng)作者:


1、iis配置Wap環(huán)境

在作為wap站點(diǎn)的屬性-->Http頭-->MIME映射中添加新的文件類型,具體如下:
關(guān)聯(lián)文件名 內(nèi)容類型
wml text/vnd.wap.wml
wmlc application/vnd.wap.wamlc
wmls text/vnd.wap.wmlscript
wmlsc application/vnd.wap.wmlscript
wbmp image/vnd.wap.wbmp
編寫(xiě)一個(gè)wml文件或者使用asp編寫(xiě)一個(gè)動(dòng)態(tài)網(wǎng)頁(yè)
如果使用asp編寫(xiě),在源碼的開(kāi)始添加
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%Response.ContentType = "text/vnd.wap.wml; charset=utf-8"%>
編碼采用utf-8
就可以使用模擬器進(jìn)行瀏覽了。

2、wap中的編碼比較嚴(yán)格,標(biāo)簽區(qū)分大小寫(xiě)。標(biāo)簽一定要對(duì)應(yīng)。初學(xué)者經(jīng)常犯這樣的錯(cuò)誤

3、說(shuō)到標(biāo)簽對(duì)應(yīng)就涉及到這樣一個(gè)問(wèn)題。當(dāng)在一個(gè)表中查詢記錄的時(shí)候,在asp中沒(méi)有記錄就輸出“沒(méi)有記錄提示”并response.end。但是在wap中不行,因?yàn)檫@樣就不會(huì)輸出</card></wml>等閉合標(biāo)簽。
我采用的方法是。得到記錄集后
。


if rs.eof then
Wrong="暫時(shí)沒(méi)有記錄。。。"
else
'正常的進(jìn)行頁(yè)面顯示。。。。。
end if
respong.write Wrong
。
</p>
</card>
</wml>
這樣可以避免標(biāo)簽不閉合。

4、圖片下載中首先一定要做到

a、圖片格式要正確:有的手機(jī)支持png 有的支持gif、bmp、jpg 。(聯(lián)通CDMA的大部分都支持png)
b、圖片的路徑要正確:絕對(duì)路徑 比如http://****/PicDown/aa.png
c、圖片的大小要適當(dāng):預(yù)覽的圖片不能超過(guò)10kb,供下載的圖片不能超過(guò)30kb。(這個(gè)我也不知道有沒(méi)有標(biāo)準(zhǔn),這是我在實(shí)際測(cè)試中得到的數(shù)據(jù)),下載有些手機(jī)支持圖片或者鈴聲可能還要大 <50kb,但是為了照顧大多數(shù)手機(jī)所以,建議<30kb。
d、圖片的大小一定要和圖片的名稱對(duì)應(yīng),也就是說(shuō) aa.png是多么大,在其size中就寫(xiě)多么大,這兩個(gè)是對(duì)應(yīng)的。
e、有的手機(jī)在手機(jī)內(nèi)存儲(chǔ)圖片達(dá)到一定數(shù)量時(shí)候,就會(huì)提示“下載個(gè)數(shù)過(guò)多”等類似提示,有的手機(jī)有預(yù)覽-->保存(如:MOTO)有的沒(méi)有,下載后直接保存到手機(jī)中(LG8180)。
f、判斷用戶下載是否成功,可以在指定的文件中獲得Status,if Status=‘ok’ 則表明下載成功,進(jìn)行提示下載成功、下載次數(shù)+1等操作,否則,提示下載失敗。

5、wap中的分頁(yè)

分頁(yè)和web中是一樣的,只是有些功能比較簡(jiǎn)化了,下面是常用的分頁(yè),沒(méi)有寫(xiě)成函數(shù)是方便大家修改。

在打開(kāi)記錄集后寫(xiě),如下代碼:

<%
filepath=request.servervariables("path_info")%>
<%page=1
page=request("page")
rs.PageSize = 8 '每頁(yè)的記錄的條數(shù)
if Not IsEmpty(trim(Request("Page"))) then
Page = CInt(Request("Page"))
if Page > rs.PageCount then
rs.AbsolutePage = rs.PageCount
elseif Page <= 0 then
Page = 1
else
rs.AbsolutePage = Page
end if
End if
%>

然后再想顯示分頁(yè)的地方,一般是在記錄集循環(huán)輸出完畢的后面寫(xiě):

<%if rs.pagecount<>1 and rs.pagecount<>0 then%>
<br/>
<%if page>rs.pagecount then%>
<a title="確定" href="<%=filepath%>?Page=<% =page -1 %>">上一頁(yè)</a>
<%else%>
<%if page<>1 then %>
<a title="確定" href="<%=filepath%>?Page=<% =page -1 %>">上一頁(yè)</a><br/>
<% end if %>
<a title="確定" href="<%=filepath%>?Page=<% = page + 1%>">下一頁(yè)</a>
<%end if %>
<%end if
response.Write "第"&page&"頁(yè) 共"&rs.pagecount&"頁(yè)"
%>

注意顯示的時(shí)候首先顯示下一頁(yè),然后再顯示上一頁(yè)這和web上的習(xí)慣不太一樣。

另外,如果這頁(yè)的內(nèi)容是顯示是通過(guò)上頁(yè)傳送來(lái)的參數(shù),作為條件的,則在 類似
<a title="確定" href="<%=filepath%>?Page=<% = page + 1%>">下一頁(yè)</a>
的地方都要加上該參數(shù),否則進(jìn)行下一頁(yè)連接的時(shí)候就會(huì)把參數(shù)丟掉。
例如:從上頁(yè)用戶選擇的新聞的種類,來(lái)顯示新聞。在List.asp頁(yè)面首先寫(xiě),NewType=request.form("NewType")得到用戶選擇的新聞的類型。
然后SQL="Select ..........where NewType='"&NewType&"'" 。完成記錄集合的準(zhǔn)備工作。注意:在進(jìn)行下頁(yè)面的時(shí)候要寫(xiě)成
<a title="確定" href="<%=filepath%>?Page=<% =page -1 %>&amp;NewType=<%=NewType%>">上一頁(yè)</a><br/>,
這樣的形式,有多少條件后面跟多少條件。
但是這樣就產(chǎn)生問(wèn)題了,即時(shí)這樣寫(xiě)NewType=request.form("NewType")也得不到NewType的值。所以在頁(yè)首剛開(kāi)始的地方應(yīng)該寫(xiě)成NewType=request("NewType")。就可以實(shí)現(xiàn)把參數(shù)帶到下一頁(yè)的連接中了。

wap中上一條、下一條的問(wèn)題。

在開(kāi)發(fā)中,新聞、笑話、下載等業(yè)務(wù)為用戶提供方便基本都需要在一條記錄完成后,再提供下一條記錄的操作,下面是簡(jiǎn)要的對(duì)下一條記錄實(shí)現(xiàn)方法的描述。

比如顯示新聞是國(guó)際新聞的記錄,list.asp來(lái)進(jìn)行顯示,通過(guò)sql語(yǔ)句select * from NewsInfo where type='國(guó)際' ,來(lái)得到符合條件的記錄集,用戶在瀏覽過(guò)程中,當(dāng)前記錄的id=10,下一條記錄的id是idnext=10+1=11,上一條記錄的id是idpre=10-1=9,然后<a href="list.asp?id='"&IdNext&"'">上一條</a>,這樣的做法是欠缺的,僅僅適用與id是連續(xù)的,也就是說(shuō)所有國(guó)際新聞的id是連續(xù)的,如果國(guó)際新聞和國(guó)內(nèi)新聞在表中是穿插寫(xiě)入的,那么你的id-1很可能是國(guó)內(nèi)新聞,條件限制type='國(guó)際' 就不起作用了。

正確且簡(jiǎn)練的做法應(yīng)該是這樣的(可能大家還有更好的做法):

當(dāng)前的id是IdNow,表NewsInfo是按照id自增的。
獲得idnext=select top 1 from NewsInfo where type='國(guó)際' and id>'"&IdNow&"'
獲得Idpre=select top 1 from NewsInfo where type='國(guó)際' and id<'"&IdNow&"' order by id desc

剩下的問(wèn)題,就不用說(shuō)了吧,注意,先顯示下一條,然后顯示上一條,這樣才方便用戶。

wap中新聞等圖片和文字混排

Wap開(kāi)發(fā)中,圖片和文字混排,可以采用ubb編碼,原理就是自己定義一共特殊的格式,采用mid和replace函數(shù)進(jìn)行轉(zhuǎn)換。比如定義[img][/img],表示圖片的開(kāi)始和結(jié)束。
但是要注意,web和wap中的區(qū)分。進(jìn)行以下替換 string1all = Replace(string1all,"[img]","</p><p align=""center""><img src=""../img/")
string1all = Replace(string1all,"[/img]"," "" alt="\"""/></p><p>")

會(huì)使得圖片居中顯示。

新聞小說(shuō)的分頁(yè)

在wap中過(guò)長(zhǎng)的新聞和小說(shuō),會(huì)給大家?guī)?lái)很大的不方便。所以要求進(jìn)行分頁(yè)顯示,比如按照每頁(yè)顯示300字來(lái)舉例子。

pageWordNum=300 ' 每頁(yè)顯示的字?jǐn)?shù),這里300可以是變量
StartWord = 1
Length=len(Content) '要顯示內(nèi)容的總的長(zhǎng)度
PageAll=(Length+PageWordNum-1)\PageWordNum '該篇新聞總共可分的總頁(yè)數(shù)

i=request.QueryString("i") '第幾頁(yè)的標(biāo)記
if isnull(i) or i="" then '如果是新聞的剛開(kāi)始則默認(rèn)i=0
i=0
end if
Content = mid(Content,StartWord+i*PageWordNum,PageWordNum) '利用mid函數(shù)進(jìn)行新聞內(nèi)容的截取(mid函數(shù)的含義:從字符串中返回指定數(shù)目的字符)

。
。
。
<%
'開(kāi)始進(jìn)行分頁(yè)操作
if 0<=i<PageAll then
if cint(i)<cint(PageAll)-1 then%>
<a href="ListFengshuiInfo.asp?i=<%=i+1%>">下一頁(yè)</a><br/>
<%end if
if cint(i)>0 then%>
<a href="ListFengshuiInfo.asp?i=<%=i-1%>">上一頁(yè)</a><br/>
<%end if
end if
%>

結(jié)束。

注意:1、 <a href="ListFengshuiInfo.asp?i=<%=i+1%>">下一頁(yè)</a><br/>中ListFengshuiInfo.asp?i=<%=i+1%>可以按照你的實(shí)際環(huán)境的需要添加變量。
2、Mid函數(shù)的解釋說(shuō)明:
從字符串中返回指定數(shù)目的字符。
Mid(string, start[, length])
參數(shù)
string
字符串表達(dá)式,從中返回字符。如果 string 包含 Null,則返回 Null。
Start
string 中被提取的字符部分的開(kāi)始位置。如果 start 超過(guò)了 string 中字符的數(shù)目,Mid 將返回零長(zhǎng)度字符串 ("")。
Length
要返回的字符數(shù)。如果省略或 length 超過(guò)文本的字符數(shù)(包括 start 處的字符),將返回字符串中從 start 到字符串結(jié)束的所有字符。

贊助商鏈接: