通用连接框架Generic Connection Framework 的层次结构
一个 HTTP 连接有三种状态:setup、connected、closed。
一个 HTTP 被打开,且在发送请求之前,所处的状态就是setup。在这个状态下,应用程序需要设置与服务器进行连接的各种信息,用setRequestMethod 和setRequestProperty 两个方法进行设置;用getRequestMethod 和getRequestProperty 方法取得参数当前值。当连接关闭的时候,该连接也就进入了closed 状态,在closed 状态下,HttpConnection对象的方法都会变的不可用,不过这里非常强调的就是它打开的InputStream 和OutputStream 却可能仍然包含数据。
例如:
HttpConnection c=(HttpConnection)Connector.open(URL);
InputStream is=c.openInputStream();
c.close();
while((int ch=is.read())!=-1)
{
⋯⋯
}
is.close();
换句话说连接被关闭了,但依然可以读到缓冲区的数据。但不推荐你这么做,最好是处理完所有的工作后,最后关闭连接。
建立 HTTP 连接
应用程序通过 javax.microedition.io.Connector.open 这个方法打开连接(在这里要提到的是,这个方法可以打开的不仅仅是HTTP 连接,后面所要说的Socket,UDP 连接都要通过这个方法打开的)该方法有3 个版本,分辨是一个参数、两个参数、和三个参数的。而且该方法是静态的。
javax.microedition.io.Connector.open(String name)
javax.microedition.io.Connector.open(String name,int mode)
javax.microedition.io.Connector.open(String name int mode, boolean timeout)
这个三个参数分别是连接的字符串、读写的类型(
javax.microedition.io.Connector.READ、
javax.microedition.io.Connector.WRITE、javax.microedition.io.Connector.READ_WRITE)和超时的时候是否抛出异常。
一般情况我们只用到第一个就好了。其中的name 这个参数必须以URL形式提供。比如http://www.j2medev.com。打开一个连接的时候,在服务器响应之前都可能阻塞应用线程。在开发应用程序的时候,一定要确保把打开连接的代码放到一个单独线程中。
如下建立连接的一个例子:
HttpConnection c= (HttpConnection) Connector.open("http://www.j2medev.com");
得到HttpConnection 对象后,建立的连接处于setup 的状态。
设置 HTTP 请求头
请求头的类型
HTTP 协议提供了许多的头标类型,使MIDlet 设备和HTTP 服务器就发送和接收内容上的一些问题进行协商: