选择显示字体大小

使用 perl 打造无线网站

在过去这一年之中,网站建构者们目睹无线上网技术热潮兴起又落下。曾经有那么一段时间,任何与无线上网扯上关系的技术全都成了当红炸子鸡,不过一如 b2c 与 b2b 那样,wml 与 wap 的热潮近来也已经退烧。然而纵使无线上网技术已不再是科技新闻头条,你仍旧可以利用它们来建立功能强大的应用程序。wap 与 wml 对于提供信息给客户与在办公室外工作的员工来说,都是相当适合的技术。

在这篇文章里面我们将会探讨如何使用 perl 程序语言来释放 wml 与 wap 的威力。由于这些技术都是植基于 xml 与 http,因此你会发现自己很快便能够进入状况,并且开始建立供无线装置上网使用的动态内容应用程序。我们将会提供一些范例来说明如何使用一般的 cgi 写作方式以及透过mason 组件语言来撰写网站应用程序。现在,让我们从如何建立无线网络应用程序开始看起吧!

james scheinblum 经常为 .net web building 撰写文章的自由作家与网站建构者。住在纽约 ithaca 市。

wap 基本概念说明

到目前为止,最广为业界所接受的无线上网科技便是「无线应用程序通讯协议(wireless application protocal, wap)」。wap 事实上是一系列的技术,用来提供无线服务给行动电话,终端机以及其它设备。wap 包含了提供内容给无线设备所需要的所有技术,然而在这篇文章里面,我们会将焦点放在透过 http 1.1 通讯协议来与客户端进行互动。在无线网络上传送内容所依赖的通讯协议正是 http 1.1,因此任何支持 http 1.1 的 web 服务器都可以用来提供无线网络内容服务。

然而,能够直接使用标准的 web 服务器并不表示所有你原本已有的网站内容都能够直接用来传送给无线上网设备浏览。wap 定义了一套由 xml 标准延伸而来的标记语言,称为「无线标记语言(wireless markup language, wml)」,专门用来将准备传送给无线上网设备的内容进行编码。正如同 html 是用来定义资料在一般网络浏览器上面的显示与动作方式的标记语言那样,wml 便是用来定义资料如何在无线上网设备上显示与动作的标记语言。

迈出你的第一步
你要做的第一件事情便是研读 wml 规范。由于 wml 是由 xml 发展而来(wml 是 xml 的一种应用系统),因此请为 xml 所要求的严格文件结构规则预作准备。wml 也和 html 有很多相异之处,请参考 网站建构专区 的相关文章来取得更多信息。
一旦你准备好开始使用 xml 与 wml,你便会需要一个支持 wap 的设备来测试你的程序。一支支持 wap 的行动电话用来做最后的测试是相当适合,不过我们还是建议你使用一个软件仿真器来做为开发阶段的测试用工具。你可以参考 al.netdevices 网站上面提供的仿真器清单,或者前往 openwave 公司的开发者专属网站去下载最新、最具威力的 wap 仿真软件。

既然你已经把需要的工具与技术都准备好了,接下来让我们看看一些实际的程序代码吧。

提供 wap 服务的动态 cgi 程序
由于 wap 同样使用 http 通讯协议,因此你可以依照为一般网络浏览器开发动态内容程序相同的设计策略来为无线上网工具开发应用程序。事实上,你甚至可以说两者的开发流程除了一些特定的细节部分以外,大致上都是相同的。首先,一般的网络浏览器接受的内容类型(http 通讯中的 content-type 表头)信息为 text/html,而无线上网的客户端程序则要求你的程序送出 text/vnd.wap.wml 做为内容类型的值。其次,由于传送给无线上网客户端程序的文件事实上是一个 xml 档案,因此你必须将 xml 文件类型宣告字符串一并送出。只要你注意以上两点,那么你便可以开始传送你的内容了。下面是一个很简单的 传送 wml 文件的 cgi 程序。

#!/usr/bin/perl

print "content-type: text/vnd.wap.wml\n\n";
print "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n";
print "<!doctype wml public \"-//wapforum//dtd wml 1.1//en\" \"http://www.wapforum.org/dtd/wml_1.1.xml\">\n";
print "<wml>\n";
print "  <card id='card1'>\n";
print "   <p>欢迎来到我的无线上网设备专用 cgi 程序!</p>\n";
print "  </card>\n";
print "</wml>\n";

上面这个最简单的范例示范了如何在 wml 文件里面传送正确的 http 与 xml 表头信息给浏览器。由于我们传送的实际上是一个 xml 文件,因此在输出资料的时候请记得要遵循正确的语法与格式。一般的网络浏览器对于内容类型或者表头宣告等信息的语法和格式都非常宽容,然而 wap 客户端程序却非如此。

上面这个程序所输出的内容虽然是实时产生的,但是终究还是不够动态 -- 它在任何状况下送出的内容都是完全相同的。取而代之,我们可以透过 cgi 函式库来读取客户端送入的资料,并且根据这些传入的资料来实时建立新的内容传送回客户端。wml 本身被设计成尽可能越能够自给自足(self-sufficient)越好,这样的设计让页面中的每一个 deck 元素可以不需要送出新的 http 请求给服务器便可以从一个 card 元素移动到另一个 card 元素。不过这也意味着你在接收从 wml 文件传入的资料的时候要格外小心,必须确认最后一个 card 元素确实有传送所有的变量到服务器端才行。

这个相较之下很简单的范例程序会从客户端读取来自不同 card 元素所送出的参数,并且将这些参数传送给服务器,然后据此建立一个新的 deck 元素。这个程序会读取来自每个 card 元素所送出的参数,并且将他们以 http get 请求的型式传送给服务器。请注意在最后一个名为 finish 的 card 元素里面,我们在每一个 wml 变量(例如 &#36;first_name)的前面全都加上一个斜线,这样才可以避免 perl 将它们误认为 perl 程序本身的变量来看待。一旦这些变量成功传送给服务器,我们的 cgi 程序便可以像其它任何一般的 cgi 变量那样读取它们。

控制客户端快取方式

由于 wap 设备是在低频宽的网络环境下运作的,因此它们都相当倾向将内容储存在自身的高速缓存里面,以避免无谓的资料请求与传送过程。光是传送 cgi 参数给我们的 cgi 程序并不能保证我们送出的内容不会被 wap 设备储存在高速缓存里面。无线上网设备会将它们储存起来,以 url 做为索引键值,接下来每当有指向到该 url 的请求的时候便会直接把之前储存的资料传回去,而不会向服务器询问这个页面从上次浏览过后是否已有更新过的资料。

在下面这个范例程序里面我们便可以观看到这个运作过程。这个范例程序将时间与日期以 wml 的 deck 元素型式回传给 wap 设备,并且附有一个 ok 按钮以便再次向服务器要求传送新的当时时间与日期。这个程序也要求使用者输入他的名字,以便自订回传的内容。

[1] [2] [3]  下一页


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons