第一卷 第一章
  一、采用ASP+WML的开发方法,并且利用GB2312编码(后缀为.asp)
  被爱可以
  本代码由BIKE网站提供。
  二、采用ASP+WML的开发方法,并且利用UTF-8编码(后缀为.asp)
  ok=uni("确定")
  zongbu=uni("返回互动河北")
  top=uni("返回上级")
  homepage=uni("返回首页")
  bike=uni("被爱可以")
  ceshi=uni("中文测试")
  %>
  本代码由BIKE-BICYLE提供。
  Fori=1toLen(Chinese)
  a=Mid(Chinese,i,1)
  uni=uni&"&#x"&Hex(Ascw(a))&";"
  next
  EndFunction
  %>

第一卷 第二章

  一、配置WEB服务器
  在设计WAP网页时不论你使用的WAP开发工具是UP.SDK或NOKIAWAPTOOKIT或者ERICSSONWAPIDE,你都必须进行WEB服务器设置,故在此将常
  见的几种WEB服务器的设置介绍如下:
  1、WINDOWNT平台的IIS
  a、启动菜单->程序->WINDOWSNTOPTIONPACK->IIS4.0
  b、右击InternetInformationServer的子项计算机名,在快捷菜单上选择‘属性’
  c、在属性页面的下部,有一个‘文件类型(F)’按钮,单击此按钮,会出现文件类型界面d、单击‘新增类型’按钮,然后在相关的扩展名
  栏中填写.wml,在内容类型(MIME)栏中填写text/vnd.wap.wml
  e、单击‘确定’按钮f、重复c、d、e三步,再增加其他的MIME类型。
  2、ApacheWebServeronNTORSolariesORLINUXOROTHERUNIX
  a、不管是NT还是UNIX或LINUX,都是修改Apache安装目录下的conf/mime.types文件
  b、在该文件中增加以下内容:text/vnd.wap.wml.wmlp_w_picpath/vnd.wap.wbmp.wbmpapplication/vnd.wap.wmlc.wmlctext/vnd.wap.wmls
  .wmlsapplication/vnd.wap.wmlsc.wmlscc、存盘d、重新启动APACHEWEBSERVER即可。
  二、WAP网页设计入门
  这里介绍WAP协议标准组织所制定的标记语言WML,由于和以前介绍的HDML在手机浏览器专用网页的特征上基本一致,所以概念部分就略去了,
  直接讲述语言。
  1。基本规则
  *WML使用XML文档字符集,目前支持Unicode2.0,和HDML不同,WML的所有标签,属性和规定的可接收值必须小写,CARD的名字和变量也是
  区分大小写的。和HDML一样,对于连续的空字符,只显示一个空格。标签内属性的值必须用"或者'括起来,属性名,=和值之间不能有空格
  。对于不成对出现的标签,必须在>前加/,比如
  。在对变量的引用上和HDML基本相同,有:
  $(var1:esc)
  $(var1:noesc)
  $(var1:unesc)
  三种形式,具体含义参见前面HDML的相关部分。在对保留字符的处理上也基本相同,对应的取代字符有:
  >>
  ?'&apos
  "
  &&
  $$$
  空格
  -­
  这里要指出的是在URL的传递过程中,用来连接参数的&必须转化为&。
  2。基本格式和文件头
  wml文件的一般格式:
  Somecontents...
  结构看上去和HTMl文件很类似,对于每一个DECK,在其文档开头必须指明以下的类型声明。
  千万注意字母的大小写。对于一个DECK,其文件大小最好不要超过1.2K。
  标签一样,用来表明这是一个WML的DECK,它有一个可选的xml:lang属性来制定文档的语言,比如
  xml:lang="zh">表示文档语言为中文。
  和HTML一样标签。
  标签,指定该DECK的访问控制信息,它用两个可选的属性,domain用来指
  定域,默认值为当前域,path用来指定路径,默认值为"/",即根目录。由于单独使用,所以要用/结尾,以后对于类似的情况不再赘
  述。
  和HTML中的类似,提供了该DECK的meta信息。属性是必选的,包括一下三种情况
  name="name"UP.LinkServer忽略meta数据
  http-equiv="name"UP.LinkServer将meta数据转为HTTP响应头(同HTML)
  user-agent="agent"UP.LinkServer直接将meta数据传给手机设备
  content属性也是必选的,其内容根据属性而定。scheme属性目前尚不支持。forua为可选属性,指定在该wml文件传到客户端之前,标签是不是被中间代理删除(因为传输的协议可能改变),默认值为false。
  目前支持的meta数据:
  指定DECK在手机内存缓存中的存储时间段,默认的为30天(除非内存耗尽),在该期间,手机对于访问过的DECK直接从缓存里调用。如果信息是对时间敏感的,可以用max-age指定DECK在缓存里的生存期,最小单位是秒,如果指定为0,则每次都需通过连接服务器来调用该DECK。
  。
  一个DECK可以包含多个CARD,每个CARD的内容可能不止一屏显示,注意DECK,CARD和屏幕显示范围的关系。一个CARD用可以包含以下可选的属性:
  *id属性用来指定CARD的名字,可用来在CARD间跳转,相当于在HTML中在页内跳转时用。
  *title属性用来作为书签的标记,该属性一般不会显示在屏幕上。
  *newcontext属性,默认值为false,用来指示当跳转到本CARD时,手机是不是要清除以前保留的信息,包括变量,堆栈里的历史记录,重新设置手机状态等。
  *ordered属性,默认值是true,表明该CARD里的内容是按固定的顺序显示,还是按用户的选择来显示。这点和HTMl不同,CARD页面里的内容可以按一定的顺序显示,默认的是按线性顺序显示,即按代码的顺序,但是,要注意的是,以下三个标签必须按以下顺序来写,(这和以后要讲的“事件”有关)。这样做是为了方便填表单,当ordered设置为true时,如果一个表单的内容不能在一屏里显示完,就分成多屏显示;当ordered设置为false时,手机可以显示一个概要CARD来总结有效的选项,用户可以从中选取表单选项来填写。
  *onXXX属性,类似于HTML标签中的onXXX属性,用来捕捉事件,当事件被触发时执行指定的操作(任务),在这里是转向某个URL。
  3。显示文本
  在文本的显示上WML基本和HTML相同。文字段落包含在之间,align属性指定该段文字的对齐方式,默认的是left,其他可选择right和center;mode属性指定当一行显示不下所有的文字时是否自动换行,默认的是自动换行wrap,如果选nowrap,则在一行中显示,浏览器会通过类似于水平滚动条的机制来显示所有文字。
  换行标签也一样为
  ,这里先替一下,在标单中如果有多个,其间不要用
  ,否则会使手机浏览器认为是断点而把表单分页显示。
  文字的修饰标签有,意义和HTML里的相同。
  表格的显示标签也和HTML相近,使用的title属性用来给表格取个名字,columns属性指定表的列数,不能为0,可选的align属性和前面提到的一样是对齐方式。表格中可以包含文字和图片。
  test1.wml
  --------------
  4。显示图片
  显示图片(1位黑白BMP图片)的标签一样类似于HTML,
  width="n"vspace="n"hspace="n"/>,属性中alt和src是必须要有的,其他可选。另外要注意的是要放在
  里,不能放
  在等功能健标签和选单标签里。
  *alt属性用来指定当手机不支持图片显示时用来显示的文字。
  *src属性指定图片的URL,但当有了以下的localsrc属性时,手机浏览器就忽略src属性。
  *localsrc属性用来指定显示存在手机ROM中的图标,如果找不到,则到UP.LinkServer上去找。
  *可选的align属性用来表明图片同当前行文本的对齐方式,默认值为bottom,可选to和middle。
  *height、width、vspace、hspace属性分别指定图片的长宽和距环绕文字的间距,目前不是所有的WAP手机都支持这些属性。
  test2.wml
  ---------------
  5。锚和任务
  连接是HTML页面里最基本的功能,在WML里也一样用来包括用来建立连接的文字,必选属性href指
  定了要打开的URL,可选的title属性给该连接取个标记名字,这个名字将作为软按钮之一的ACCEPT键(详见以前的HDML入门文章)的标记显示在
  屏幕的软按钮区,所以通常可以将属性作为提示文字是用。
  然而,以上的连接在WML里只是任务的一种情况,为了能够使用其它任务,所以引进了新的标签任务标签文
  本时的简单表示方式。
  test3.wml
  ---------------
  WML里的任务标签有以下几种,除了用于,还可以用在事件中:
  1)用来指示浏览器显示指定的URL,包括DECK的第一个CARD或者指定的CARD。语法如下:
  其中href属性为必选,其他为可选。sendreferer属性表示是否传递调用href所指定的URL的页面的URL,也就是当前页的URL,即HTTP头中的HTTP_REFERER,默认值为false,可选值为true。method和HTML中的表单FORM的method属性一样,指定表单是以get的方式还是post的方式递交,以便cgi处理,默认的值为get,但如果未指定method但,手机自动以post方式传递。accept-charset属性可覆盖在HTTP头里指定的字符集,可以写多个字符集,如accept-charset="UTF-8,US-ASCII,ISO-8859-1"。
  ,通过它可以向指定的URL传递以“变量名/值”形式的数据。name和value属性都是必选的。注意只有这里的变量是用来递交给CGI程序的。
  除了,该语句的意思是,当触发某一事件时,给变量赋值。
  要注意的是,当。
  2)的形式。
  3)。
  4)(以后会说明)。
  三、当我用模拟手机浏览WAP网页时,汉字显示出现乱码或编译出错的设置
  以下有几种方法可以设置:
  1、可在WEB服务器中设置MIME表时,在text/vnd.wap.wml后加上“;charset=charset_name”,如GB2312汉字:
  text/vnd.wap.wml;charset=gb2312ContentMIMEtypeExtensionWMLtext/vnd.wap.wml;charset=charset_namewml
  2、若你在设计动态WAP网页时,出现汉字显示乱码,你可以在程序中将返回类型指明所使用的字符集。在程序中,将CHARSET加在向用户浏览
  器发送信息的类型后,按以下方式写:"Content-type:text/vnd.wap.wml;charset=gb2312"。如在ASP中:Response.ContentType=
  "text/vnd.wap.wml;charset=gb2312",在PHP、PERL等服务器端脚本中比较类似。3、你也可以用字符转换工具来转换,将你的程序代码转
  换为UTF8、或UNICODE。
第一卷 第三章

  (1)a元素是anchor元素的简化形式,它内嵌了anchor元素需要包含的go元素功能来完成超链接定位,并且不再包含其他任何变量设置.语法格式:
  (2)access元素是由一个单独的标签即
  (3)anchor元素用于创建一个超链接的头部,超链接的其余部分为用户指定的URL地址。当程序运行中用户选中选超链接时,浏览器即会被引入到超链接指定的地址,如其他卡片组或同一卡片组中的其他卡片.
  语法格式:
  (4)b元素使用粗体字显示文本.语法格式:
  (5)big使用大字体显示文本.语法格式:
  (6)br元素用于插入一个回车符,并开始一个新行.语法格式:
  (7)card元素用于定义一个卡片的各种属性及相关内容等.语法格式:
  内容(content)
  (8)do元素提供了一个通用的事件处理机制,使得用户可以参与当前卡片的事件处理.
  dotype="type"label="label"name="name"
  optional="boolean">任务(task)
  (9)em指定增强显示文本:
  (10)fieldset元素用于设置输入框和相应的说明文本,从而用户就可以利用input元素等借助该输入框输入所需的数据信息:
  (11)go元素主要用来定义浏览器需要导航的URL地址:
  (12)head元素用于指定卡片组的头,即与卡片组整体有关的信息,包括meta数据和access控制信息:
  (13)i使用斜体字显示文本:
  (14)img元素用于在格式化的文本中放置和显示一幅图像:
  vspace="n"hspace="n"/>
  (15)input元素用于定义文本实体对象,包含有对输入文本内容的格式、数据类型、长度、值、变量名等多种属性的具体规定:
  (16)meta元素用于定义WML卡片组相关的通用meta信息:
  (17)noop元素表示什么也不做,是一个空操作:
  (18)onenterbackward当用户使用prev任务或类似的任务来导航至某一卡片时,onenterbackward事件才可发生。换句话说,当用户从历史堆栈中选取URL地址,并通过浏览器打开这一地址对应的卡片时,onenterbackward事件才能发生:内容(content)
  或:
  内容(content)
  或:或其他任务(task)
  (19)onenterforward事件仅当用户使用go任务或类似于go任务的任务来定位和浏览卡片时才可发生。设置onenterforward事件后,当用户进入当前卡片组时,浏览器就会定位onenterforward属性或标签中指定超链(href)的URL地址,并打开URL指定的卡片:
  newcontext="boolean"ordered="true"onenterforward="href"
  onenterbackward="href"ontimer="href">内容(content)
  或:
  内容(content)
  或:
  或其他任务(task)
  (20)onevent元素通过
  任务(task)
  (21)onpick事件在定义时一般通过onpick属性指定一些项目,当用户选择或取消这些项目时,即可触发onpick事件,执行onpick属性所指定的项目:
  内容(content)
  (22)ontimer用于指定一个事件,当标签指定的时间到期后,浏览器就执行ontimer所指定的这个事件:
  onenterforward="href"onenterbackward="href"ontimer="href">
  内容(content)
  或:
  onenterbackward="href"ontimer="href">
  内容(content)
  (23)optgroup元素用于将多个相关的option元素进行分组,用户浏览器可以借助这种分组来安排选项列表的显示布局,以方便用户选择:内容(content)
  (24)option元素用于定义select元素中的一组单选项,并可包括事件和单选项的显示文本等信息:
  (25)p元素用于划分段落,使当前文本换行并插入一个空白行:palign="alignment"mode="wrapmode">文本(text)
  或
  (26)postfield元素用于指定当浏览器接到URL请求时,向源服务器(originserver)传送的域名及域值
  :
  (27)prev元素用于指定将浏览器导航至历史堆栈中的前一个URL地址:
  (28)refresh用于刷新当前的卡片,对卡片内指定的变量进行更新:
  (29)select元素允许用户从选项列表中选择所需的项目:
  iname="index_var"ivalue="default"tabindex="n">内容(content)
  (30)setvar元素用于指定在当前上下文内容中的变量的值,从侧面影响正在运行的任务:
  (31)small使用小字体显示文本:
  (32)strong进一步加强文本的增强显示:
  (33)table元素与tr元素、td元素一起,可用来创建能容纳文本和图像的表格,并可设置表格各列中文本和图像的对齐方式:
  或
  (34)td元素用于规定表格单元格的内容:
  (35)template元素用于为当前卡片组中的所有卡片定义一个模板,统一规定卡片的某些参数:
  onenterbackward="href"ontimer="href">
  内容(content)
  (36)timer元素用于设定一个定时器,可以延时显示卡片组、卡片,或实现WML程序的等待操作,或在卡片组和卡片之间实现切换以取得动画效果:
  (37)tr元素用于定义表格的行:
  (38)u显示文本时增加下划线:
  (39)wml元素用于定义一个卡片组,并通过标签包含和封装该卡片组中的所有卡片及信息
  :
UU书擝 uuTxt.cOm 荃汶子版月镀
第一卷 第四章
  ??????
  ASP与WAP结合能够生成丰富的动态的WML网页,可以给WAP手机带来许多有趣的内容。那么如何使他们两者有机的结合来生成动态网页呢?在本文中,我就想介绍一下如何使用ASP开发一个动态生成WML的应用程序。比如说,现在手机的电子银行被炒得很火,那么我们如何去建立这样一个应用程序呢?在这里我不想讨论整个电子银行的建立,因为那样内容太庞大,超出了我能介绍的范围,在这里我只想介绍一下,如何使用ASP建立一个应用程序来检查用户的收支平衡情况。考虑到它的安全性,我们要使用WTLS,但这个问题比较复杂,只能等以后就机会再探讨了。我们要把精力放在如何使用ASP来实现动态网页上。
  说了这么多废话,让我们开始吧!假设银行账户信息被保存在SQL数据库中,如果使用相应的网络连接,就可以进入我们的系统。在本文的例子中,为了简化我们让账户信息非常的小(事实上不是这样的):只包括账户号;客户名,安全密码和账户收支平衡情况,在一个表中(tbl_account_info),有四个域分别对应为accountno,custname,accountpin和accountbal。
  下面,我想简单的谈谈编程思路:首先,用户进入我们的系统界面,输入他们的账号和安全密码(如图1),在验证完这些登录信息以后,我们允许用户登录进入系统,我们将给出欢迎语,并把用户名和账户上的收支平衡状况输出出来!这就是大体的开发思路,好,现在我们就可以根据这个思路进行编程了。我有个习惯,在我编写动态的程序代码时,我先把静态的代码写出来,然后才试着把动态的代码写出。在本文中我也将采用这种方法。
  首先,在代码的第一部分,我们将要建立一个页面用来用来接收用户的登录信息。(如图1)
  请注意下面这段代码,这些代码都是最基本的WML代码:
  <%Response.ContentType="text/vnd.wap.wml"%>
  <?xmlversion="1.0"encoding="gb2312"?>//注意这一句,如果想要显示中文,必须要加入encoding="gb2312"
  <!DOCTYPEwmlPUBLIC"-//WAPFORUM//DTDWML1.1//EN"
  <wml>