服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

wml――xml标记语言开发实例详细解析

   本文主要介绍wml的相关知识,如何开发wap应用程序。

   wml是一种基于xml的标记语言,她的官方说明和规范是由wap论坛维护的。wml的文档类型定义是xml文件类型的,http://www.wapforum.org/dtd/wml_1.1.xml。

    和html语言一样,wml是为了显示数据的,而xml的目的则是描述数据,我们定义了一系列的标记并组织成为语法规范把它称为dtd(document type definition)。支持wap的手机里面都安装了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的标记非常少,基本可以分为两种一种称为deck/card一种称为event。在这里不能一一讲述,在我们开发wml应用的时候参考手册就可以了,我给大家提供一个在线的参考:online wml tag reference。

在标记内的内容我们把它称为deck,每个屏幕的内容我们把它定义为card,由于wml是为无线网络传输定义的,充分考虑到带宽的限制,我们允许在一个deck内包含多个card并可以一起下载到用户代理中,这样我们就可以在本地进行不同屏幕的切换了,避免每次都去联网。当然这也给客户端增加了负担,因此我们要避免在deck内包含过多的card。

下面我们编写一个wml的例子test.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="login" title="login">
<do type="accept" label="password">
<go href="#password"/>
</do>
<p>
username:
<select name="name" title="name:">
<option value="john doe">john doe</option>
<option value="paul smith">paul smith</option>
<option value="joe dean">joe dean</option>
<option value="bill todd">bill todd</option>
</select>
</p>
</card>
<card id="password" title="password:">
<do type="accept" label="results">
<go href="#results"/>
</do>
<p>
password:
<input type="text" name="password"/>
</p>
</card>
<card id="results" title="results:">
<p>
you entered:

name: $(name)


password: $(password)

</p>
</card>
</wml>
在这个deck中包含了三个card,可以一并下载到客户端,通过按键操作我们就可以在不同的card之间进行切换,你可以在手机或者winwap模拟器中看看运行的效果。下面是winwap下的运行截图。
 
wml――xml标记语言开发实例详细解析(图一)


wml――xml标记语言开发实例详细解析(图二)


wml――xml标记语言开发实例详细解析(图三)
虽然我们已经可以开发wml的应用了,但是这些毕竟都是些静态的内容。如果我们要开发和服务器交互的功能呢?答案当然是我们可以使用servlet技术。看下面的例子:
<?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="order" title="query inventory">
<p>
<select name="items" title="items">
<option value="books">books</option>
<option value="music">music</option>
<option value="video">video</option>
<option value="software">
software</option>
</select>
</p>
<do type="accept" label="query">
<go href="http://222.28.218.222:8088/wap/wapservlet" method="get">
<postfield name="items" value="$(items)"/>
</go>
</do>
</card>
</wml>


用户可以从列表中选择item,通过无线网络传输给服务器后servlet通过request.getparameter()方法得到用户的选择并发送给用户,servlet的代码如下:

package com.j2medev.mingjava;
import java.io.ioexception;
import java.io.printwriter;
import javax.servlet.servletexception;
import javax.servlet.http.httpservlet;
import javax.servlet.http.httpservletrequest;
import javax.servlet.http.httpservletresponse;
public class wapservlet extends httpservlet
{
protected void doget(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception
{
string select = request.getparameter("items");
response.setcontenttype("text/vnd.wap.wml");
printwriter out = response.getwriter();
out.println("<?xml version=/"1.0/"?>");
out.println("<!doctype wml public/"-//wapforum//dtd wml 1.1//en/"");
out.println("/"http://www.wapforum.org/dtd/wml_1.1.xml/">");
out.println("<wml>"); out.println("<card title=/"test/">");
out.println(" <p align=/"center/">"); out.println("you selected "+select);
out.println("</p>"); out.println("</card>"); out.println("</wml>");
}
protected void dopost(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception
{
doget(request,response);
}
}


正确部署servlet和wml文件后,在winwap下输入http://222.28.218.222:8088/test2.wml 确认后就可以看到you selected xxxx的内容了。

扫描关注微信公众号