文章系统图片系统下载系统个人求职企业招聘房产系统展会系统供求系统产品系统商城系统自定义系统后台一览
解决方案
建站知识
WAP建站入门教程
来源:网络作者:网络

六、动态输出WML页面

使用多种服务器端脚本语言动态输出WML页面

 
   以下将要讲述的是使用各种服务器端脚本语言编写动态输出WML页面。这里主要以几种最常见服务器端编程方式为例子。其他的服务器端编程方式都可以依此类推。
    无论使用哪种服务器端编程方式来动态输出WML页面,其关键就是输出Content-type为text/vnd.wap.wml。然后按照WML的语法格式输出WML内容就可以达到目的。当然其中针对不同的编程方式还有一些细节问题。

 
使用ASP动态输出WML页面

    • 使用记事本输入下面的ASP程序(图2-26):
<%@ Language=VBScript %>
<% Response.ContentType="text/vnd.wap.wml" %><?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
    <card id="main" title="ASP WML">
        <p>
            Hello
        </p>
    </card>
</wml>

图 2-26 Hello.asp
    • 保存为hello.asp。并且是它和hello.wml在同一个子目录下。注意:记事本在保存的时候只识别txt文件扩展名,因此在保存之后应该手工修改文件扩展名。为了方便起见,可以使用其他的文本编辑工具,或者是使用专门的ASP编辑工具(例如:Viusal InterDev)。
    • 启动IIS服务器管理。在“默认的Web站点”下找到“wap”目录,用鼠标右键点击它,选择属性“Properties”,就会弹出一个对话框,里面有好多配置选项。 在“虚拟目录”标签页当中有一项应用程序设置。将“许可”一项设置为:“执行(包括脚本)”。确定后,退出IIS Console。
    • 打开WinWAP,马上Stop它,在URL栏里输入:“http://127.0.0.1/wap/hello.asp”,并按下回车。等着欣赏第一个ASP页面(图2-27)。

图 2-25 WinWAP测试结果显示
    • 如果读者熟悉ASP,读者也许会注意到:为什么在<?xml version="1.0"?>并没有换行写。注意,这是必须的!否则,程序在WinWAP下可能没有任何问题,但是在其他模拟器上,可能就会导致编译错误!因为在<?xml version="1.0"?>前面不允许有多余的空格或者换行。
CGI编程时应该注意的问题
    使用CGI程序生成动态WML页面和使用CGI编程生成动态HTML的方式基本一样。只是在返回WML页面前,先要输出Content-Type为text/vnd.wap.wml,然后再输出WML内容。
    输出的返回格式:"Content-type: text/vnd.wap.wml\n\n"。
使用标准C动态输出WML页面
    这里有一个非常简单的标准C例子,该例子适合于Windows和Unix。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
void GenerateCGIHeader();
void GenerateCGIFooter();
/*--------------------------------------------------------------*/
int main(int argc, char* argv[])
{
    char tmpBuf[128];
    char strGET[]="GET";

    if (getenv("REQUEST_METHOD") == NULL)
    {
        printf("This script is not intended to run from shell.\n");
        return -1;
    }

    // Check that the request method is GET (see CGI specs)
    strcpy(tmpBuf, getenv("REQUEST_METHOD"));
    if (strcmp(tmpBuf, strGET) != 0)
    {
        printf("This script requires use of GET-method.\n");
        return -1;
    }

    /* Create a header for our reply */
    GenerateCGIHeader();

    /* Display operating system-style date and time. */
    _strtime( tmpBuf );
    printf( "OS time:%s\n", tmpBuf );
    _strdate( tmpBuf );
    printf( "OS date:%s\n", tmpBuf );

    /* Create a footer for our reply */
    GenerateCGIFooter();
    return 0;
}

/*--------------------------------------------------------------*/
void GenerateCGIHeader()
{
    /* Generate header for CGI response */
    printf("Status: 200\n");
    printf("Content-type: text/vnd.wap.wml\n\n");
    printf("<?xml version=\"1.0\"?>\n");
    printf("<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN");
    printf("\" \"http://www.wapforum.org/DTD/wml_1.1.xml\">\n");
    printf("<wml>\n");
    printf(" <template>\n");
    printf(" <do type=\"prev\" label=\"Back\">\n");
    printf(" <prev/>\n");
    printf(" </do>\n");
    printf(" </template>\n");
    printf(" <card id=\"datecard\" title=\"CGIDate\">\n");
    printf(" <p>\n");
}

/*--------------------------------------------------------------*/
void GenerateCGIFooter()
{
    /* Generate footer for CGI response */
    printf(" </p>\n");
    printf(" </card>\n");
    printf("</wml>\n");
}
    在Windows环境下,使用Viusal C&C++ 6.0创建一个Windows Console Application——WapCCGI。然后将该文件加入到项目中,编译生成WapCCGI.exe。将该可执行文件拷贝到wap子目录下。启动Nokia WAP Toolkit,在“Go”下选择“Open Location”,并输入URL地址(图2-28):

图 2-26 输入URL地址
    在选择“OK”以后,模拟器上出现系统当前的日期和时间(图2-29):

图 2-27 测试结果显示