这篇文章将以一个详细的例子介绍这些API,它演示了J2ME设备和一个基于servlet的Web系统可以进行的交互。
在这个MIDP系列的最后一部分,我将介绍MIDlet和外部系统之间的通信方法。使用Java2 Micro Edition的MIDP中包含的API,开发者可以与外部的系统交互。这篇文章将以一个详细的例子介绍这些API,它演示了J2ME设备和一个基于servlet的Web系统可以进行的交互。 在前面的两个部分,我介绍的MIDP API的特性和功能都是和设备自身的运作和信息存储相关的。在这个最后的部分,我将集中介绍网络设备和大型网络的交互。 网络设备可以使用数不清的协议来进行互相通信。在这篇文章中,我将集中介绍HttpConnection接口,你可以通过它来访问存储在一个Web服务器上的信息。在介绍本文的例子之前,我将讨论javax.microedition.io接口和类的交互,而例子则集中介绍一个MIDP设备和一个基于JSP系统之间的交互。 Connection层次 javax.microedition.io包中的所有接口都是基于Connection接口的。其它的连接接口继承Connection中的方法,并且定义了用来访问相关变量和该Connection类型动作的方法。我将在本文中谈论最常用的接口,其它的接口留给读者研究。 HTTPConnection说明 HTTPConnection接口建立在Connection接口上,它还提供了一些其它的方法来进行HTTP交互。以下就是其中一些有用的方法列表: String getHeaderField(int index) String getHeaderField(String name) long getHeaderFieldDate(String name, long def) int getHeaderFieldInt(String name, int def) String getHeaderFieldKey(int n) String getHost() long getLastModified() int getPort() String getProtocol() String getQuery() String getRef() String getRequestMethod() String getRequestProperty(String key) int getResponseCode() String getResponseMessage() String getURL() void setRequestMethod(String method) void setRequestProperty(String key, String value) 这些方法可让你如基于servlet的系统一样访问HTTP字段。 其它的接口在API规范文档中有明确的定义。这些接口带有一些方法,可以使用不同的协议与设备收发数据包或者流数据。在这里我将不会很详细地讨论这些,因为在形式上是一样的。 Connector对象 MIDP API如何知道要创建哪个接口并返回给调用的类呢?答案是返回的Connector是根据传送给连接字符串的值。 以下的连接字符串是提醒Connector对象系统正在查找一个HttpConnection: HttpConnection httpConn = Connector.open("http://www.itpath.com"); MIDP Connector对象分析连接的字符串,知道这是一个用作访问网页的URL,于是就会返回一个HttpConnection接口的实现给调用的类。 其它的连接协议需要不同的连接字符串。下表就是它们的一个列表: 协议 连接字符串 Http http://www.yahoo.com Stream-based Socket Socket://localhost:6160 Datagram-based Socket - listening datagram://:6160 Datagram-based Socket - sending datagram://121.232.121.232:6160 Serial Port comm.:0;baudrate=5000 File file://helloWorld.txt 例子 以下的例子将本文讨论的东西都结合在一起。在这个例子中,MIDlet访问存储在一个远程系统上的信息。该信息以一个XML的形式返回给MIDlet。通过分析该XML,MIDlet就会根据这些数据构造一个用户界面。 用户界面由一个问题构成。用户提交后将会请求服务器将数据加进去。然后返回更新的数据给用户。 通过这个详细的例子,你可以对J2ME Connection API的基本用法和语法有更进一步的了解。 VoterMidlet VoterMidlet是本例子中唯一的MIDlet。在下载时,它创建VoteResults对象的一个实例: public class VoterMidlet extends MIDlet implements ScreenCallback {; private Display _display; // midlet has three screens private VoteResults voteResults = new VoteResults( (ScreenCallback) this); public VoterMidlet() {; _display = Display.getDisplay(this); _display.setCurrent(voteResults); }; public void exit() {; try {; this.destroyApp(true); }; catch (MIDletStateChangeException e) {;}; }; ... };