ASP和数据库技术在WAP开发中的应用、、
利用ASP技术可以开发出动态WAP页面,将ASP技术和数据库技术相结合,则可以开发更为复杂的WAP应用。有关ASP和Web数据库的知识请读者参考专门书籍,我们这里以WML为例,说明ASP和数据库技术在WAP开发中的应用。
11.2.1 在WML程序中使用ASP
在WML程序中使用ASP的规则很简单,只要做到以下5条即可:
(1) 声明ASP采用的脚本语言。与ASP中声明的方式类似,格式为:
<*@ Language=VBScript *>
(2) 声明wml文件类型。这可采用ASP的Response对象,并将ContentType作为它的方法,书写时使用<*和*>包含起来,格式为:
<* Response.ContentType="text/vnd.wap.wml" *>
(3) 在WAP服务器端,增加服务器对ASP的处理能力。这可在IIS中选中WAP站点或其主目录,并单击鼠标右键,从出现的菜单中选择"属性"命令,打开它的对话框,选择其中的"虚拟目录"选项卡。这里面有一项应用程序设置,将"许可"一项设置为"执行(包括脚本)"即可。更详细的方法可参考我们第4章的内容。
(4) 其余语句和形式采用WML的编程方法即可。
(5) 程序文件保存时要采用".asp"的扩展名。
例如,下面就是一个在WML程序中应用ASP的简单例子:
<*@ Language=VBScript *>
<* Response.ContentType="text/vnd.wap.wml" *>
Hello!
这是一个显示"Hello!"的程序,可把它保存为hello.asp。注意,文件扩展名一定是.asp才行,它与hello.wml是两个不同的文件。我们可以把该文件放到或上传到WAP服务器的相应目录中,比如wap目录。然后,我们启动模拟浏览器,比如WinWap,并在URL栏里输入"http://127.0.0.1/wap/hello.asp"并按回车,即浏览使用ASP的WML页面的效果。
11.2.2 在ASP中编写WML程序
我们也可以直接在ASP程序中编写WML程序,并可把它输出为WML程序。具体的处理规则如下:
(1) 将WML程序使用<*和*>包含起来,格式为:
<*
……(语句)
*>
(2) 声明wml文件类型。与前面讲述的方法相同,可采用ASP的Response对象,并将ContentType作为它的方法,但书写时不再需要使用<*和*>。格式为:
Response.ContentType="text/vnd.wap.wml"
(3) 对于其他的WML语句,一律采用Response对象的write方法来处理。基本格式为:
Response.write("……(WML标签或语句)")
其中的"WML标签或语句"在write方法中可以连写,以节省程序代码行。
(4) 在WAP服务器端,增加服务器对ASP的处理能力。操作方法与前面介绍的一样,这里不再重述。
(5) 程序文件保存时也要采用".asp"的扩展名。
下面的程序就是在ASP中编写WML页面的简单例子:
<*
'msg = "Hello "
Response.ContentType = "text/vnd.wap.wml"
Response.write("")
Response.write("")
Response.write("hello wml ! test ok !")
Response.write("
")
*>
当然,我们这里给出的属于ASP与WML结合使用的简单例子,但采用这种基本方法,并利用ASP的复杂功能,便可以开发出能够实现丰富功能的WML页面。
例如,下面的ASP程序不仅可以显示"Hello"信息,同时可以显示信息的来源地或所在环境,这是通过利用Request对象的ServerVariables方法来获取服务器的HTTP_X_UP_SUBNO和HTTP_X_UP_UPLINK两个变量实现的。程序代码如下:
<*
' hellowml.asp
'
Dim msg, subId, uplink
msg = "Hello "
subId = Request.ServerVariables("HTTP_X_UP_SUBNO")
uplink = Request.ServerVariables("HTTP_X_UP_UPLINK")
If Not Len(subId) = 0 Then
msg = msg & "from " & subId
End If
If Not Len(uplink) = 0 Then
msg = msg & " at " & uplink
End If
Response.ContentType = "text/vnd.wap.wml"
Response.write("")
Response.write("
")
Response.write(msg)
Response.write("
")
*>
为增强大家对ASP编写WML程序的印象,我们再给出Phone.com提供的一个例子。该例的作用是根据对服务器和客户端设置测试结果的不同,给出不同的警告信息。程序代码如下:
<*
' pushAlert.asp
'
Dim uplink, subId, url, ttl, alertType, title
Dim contentType, lastResult
contentType = "application/x-up-alert"
uplink = Request.ServerVariables("HTTP_X_UP_UPLINK")
subId = Request.ServerVariables("HTTP_X_UP_SUBNO")
url = "http://updev.phone.com/dev/hdml/devhome3.hdml"
ttl = 3600
alertType = "D---"
title = "Call: " & subId
Set NtfyCl = Server.CreateObject("Ntfn3Client.Ntfn3Client.1")
NtfyCl.NtfnSetHost uplink
NtfyCl.NtfnSetTimeout ttl
NtfyCl.NtfnPostAlert subId, url, ttl, alertType, title
lastResult = NtfyCl.NtfnGetLastResult
Dim errString, msg
If lastResult <> 0 Then
errString = NtfyCl.NtfnGetErrorDetail
If errString <> NULL Then
msg = errString
Else
msg = "No error detail, error number: " & lastResult
End If
Else
msg = "Sent alert to " & subId & " at " & uplink
End If
Dim my, digestString
set my = Server.CreateObject("PDCDigestUtils.CPDCDigest")
my.DeckType = 0
my.DigestAddDeck "deck1", "
" & msg & "
"
my.DigestSuppressContentType 1
digestString = my.DigestSerialize(0)
Response.ContentType = my.DigestGetContentType
Response.BinaryWrite(digestString)
*>
为便于大家学习,我们本书所附光盘中都提供了这些程序的源代码,大家不要忘了实际测试一下。
11.2.3 利用ASP在WML中实现动态数据库应用
通过前面介绍的例子,我们可以看出利用ASP技术可以为WML实现非常复杂的应用。我们知道,ASP的数据库处理能力是很强的,所以,利用ASP我们可以在WML中实现动态的数据库应用。由于举例说明这种应用需要占用很大的篇幅,所以我们这里只给出基本的开发步骤:
第一步,分析WAP的实际问题,设计出所需的数据库,并建立其中的数据表。例如,我们可以使用Microsoft Access等数据库系统来完成这一方面的工作。
第二步,建立ODBC源,并对上述数据库进行命名。操作方法十分简单:以Windows 95/98/NT/2000为例,我们只需在"控制面板"中双击"ODBC数据源"图标,从打开的"ODBC数据源管理器"对话框中即可完成相关操作。
第三步,根据实际问题,编写引用和处理数据库的ASP/WML程序。
第四步,将程序上载到WAP服务器,随后就可以进行测试。通过测试后,就可以为WAP用户使用了。