在J2ME平台上构建你的邮件程序
}
}
catch(MessagingException me)
{
out.println("<error>" + me.toString() + "</error>");
}
out.println("</mail>");
}
在MIDlet端再解析这个XML,在J2ME平台上有许多免费的XML Parser,kxml就是其中的一个。可以从 http://kxml.enhydra.org/ 下载kXML 1.21的源代码,jar文件以及API文档。
下面是utility/HeadParser.java中处理XML的代码片断
public void parse(InputStream in) throws IOException
{
Reader reader = new InputStreamReader(in);
XmlParser parser = new XmlParser(reader);
ParseEvent pe = null;
parser.skip();
/* 读一个名字为mail的event */
parser.read(Xml.START_TAG, null, "mail");
boolean trucking = true;
boolean first = true;
while (trucking)
{
/* 读取下一个event */
pe = parser.read();
if (pe.getType() == Xml.START_TAG)
{
/* 得到event的名字 */
String name = pe.getName();
if (name.equals("message"))
{
String from = null;
String subject = null;
String date = null;
int index = -1;
while ((pe.getType() != Xml.END_TAG) ||
(pe.getName().equals(name) == false))
{
pe = parser.read();
if (pe.getType() == Xml.START_TAG &&
pe.getName().equals("subject"))
{
pe = parser.read();
/* 得到event的内容 */
subject = pe.getText();
}
else if (pe.getType() == Xml.START_TAG &&
pe.getName().equals("from"))
{
pe = parser.read();
from = pe.getText();
}
else if (pe.getType() == Xml.START_TAG &&
pe.getName().equals("date"))
{
pe = parser.read();
date = pe.getText();
}
else if (pe.getType() == Xml.START_TAG &&
pe.getName().equals("index"))
{
pe = parser.read();
index = Integer.parseInt(pe.getText());
}
}
/* 把邮件头交给监听器处理 */
headListener.itemParsed(from, subject, date, index);
}
else //Non Message block
{
while ((pe.getType() != Xml.END_TAG) ||
(pe.getName().equals(name) == false))
pe = parser.read();
}
}
if (pe.getType() == Xml.END_TAG &&
pe.getName().equals("mail"))
{
trucking = false;
}
}
具体的API的用法请大家参照kxml的文档。JSR172 (J2ME Web Services Specification)提出了在J2ME平台上处理XML的规范,有兴趣的朋友可以到jcp的网站 (http://www.jcp.org) 上看看,但目前可能还没有厂商或组织的实现。
8. 小结
本文介绍了J2ME平台上邮件程序的编写,涉及的知识点有:
1. J2ME的UI
2. Record Store
3. J2ME的网络连接 / J2ME 和J2EE之间数据的传递
4. Parsing XML in J2ME
5. 简单的Servlet
6. Java Mail APIs
上一页 [1] [2] [3] [4] [5] [6] 下一页
进入问吧