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'> <BR><!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" <BR>"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'?> <BR><!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" <BR>"http://www.wapforum.org/DTD/wml_1.1.xml"> <BR><wml> <card id="Login" title="Login"> <BR><do type="accept" label="Password"> <BR><go href="#Password"/> <BR></do> <BR><p> <BR>UserName:<BR><select name="name" title="Name:"> <BR><option value="John Doe">John Doe</option> <BR><option value="Paul Smith">Paul Smith</option> <BR><option value="Joe Dean">Joe Dean</option> <BR><option value="Bill Todd">Bill Todd</option> <BR></select> <BR></p><BR></card> <BR><card id="Password" title="Password:"> <BR><do type="accept" label="Results"> <BR><go href="#Results"/> <BR></do> <BR><p> <BR>Password:<BR><input type="text" name="password"/> <BR></p> <BR></card> <BR><card id="Results" title="Results:"> <BR><p> <BR>You entered:<br/><BR>Name: $(name)<BR><br/> <BR>Password: $(password)<br/> <BR></p> <BR></card> <BR></wml><BR>



<?xml version='1.0'?><BR><DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML <BR>1.1//EN" "http://www.wapforum.org /DTD/wml_1.1.xml"> <BR><wml><BR><card id="Order" title="Query Inventory"> <BR><p> <BR><select name="Items" title="Items"> <BR><option value="Books">Books</option> <BR><option value="Music">Music</option> <BR><option value="Video">Video</option><BR><option value="Software"><BR>Software</option> <BR></select> <BR></p> <BR><do type="accept" label="Query"><BR><go href="http://222.28.218.222:8088/wap/wapservlet" method="get"><BR><postfield name="Items" value="$(Items)"/> <BR></go> <BR></do> <BR></card> <BR></wml><BR>
用户可以从列表中选择Item,通过无线网络传输给服务器后Servlet通过request.getParameter()方法得到用户的选择并发送给用户,servlet的代码如下:
package com.j2medev.mingjava; <BR>import java.io.IOException;<BR>import java.io.PrintWriter; <BR>import javax.servlet.ServletException; <BR>import javax.servlet.http.HttpServlet; <BR>import javax.servlet.http.HttpServletRequest; <BR>import javax.servlet.http.HttpServletResponse; <BR>public class WapServlet extends HttpServlet <BR>{ <BR>protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException <BR>{ <BR>String select = request.getParameter("Items");<BR>response.setContentType("text/vnd.wap.wml"); <BR>PrintWriter out = response.getWriter(); <BR>out.println("<?xml version=\"1.0\"?>"); <BR>out.println("<!DOCTYPE wml PUBLIC\"-//WAPFORUM//DTD WML 1.1//EN\""); <BR>out.println("\"http://www.wapforum.org/DTD/wml_1.1.xml\">"); <BR>out.println("<wml>"); out.println("<card title=\"test\">"); <BR>out.println(" <p align=\"center\">"); out.println("you selected "+select);<BR>out.println("</p>"); out.println("</card>"); out.println("</wml>"); <BR>} <BR>protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException <BR>{ <BR>doGet(request,response); <BR>} <BR>}正确部署Servlet和wml文件后,在winwap下输入http://222.28.218.222:8088/test2.wml 确认后就可以看到you selected xxxx的内容了。
[编辑]


