HTTP协议是一种面向连接且无状态的联网方式,客户端向服务器发送请求,服务器处理后把响应传回客户端就断开连接。在我们选择连接方式的时候主要有两种可以选择POST和GET。
当我们以GET方式发送数据的时候,数据按照如下形式封装成请求发送给服务器,我们可以看出数据都被包含在了URL中。
GET: index.html?userid=joe&password=guessme HTTP/1.1
Host: www.mysite.com
User-Agent: Mozilla/4.0
代码实现:
HttpConnection conn = null;
String url = "http://www.mysite.com" + "/index.html?userid=joe&password=guessme";
String agent = "Mozilla/4.0";
try {
conn = (HttpConnection) Connector.open( url );
conn.setRequestProperty( "User-Agent", agent );
int rc = conn.getResponseCode();
... // process it
} catch( IOException e ){ // handle the error here }
当我们使用POST方式发送数据的时候,数据被封装在URL和Header后面,中间以空行来分隔。
POST: login.jsp HTTP/1.1
Host: www.mysite.com
User-Agent: Mozilla/4.0
Content-Length: 27
Content-Type: application/x-www-form-urlencoded userid=joe&password=guessme
代码实现:
HttpConnection conn = null;
String url = "http://www.mysite.com/login.jsp";
String agent = "Mozilla/4.0";
String rawData = "userid=joe&password=guessme";
String type = "application/x-www-form-urlencoded";
String encodedData = encode( rawData ); // user-supplied
try { conn = (HttpConnection) Connector.open( url );
conn.setRequestMethod( HttpConnection.POST );
conn.setRequestProperty( "User-Agent", agent );
conn.setRequestProperty( "Content-Type", type );
conn.setRequestProperty( "Content-Length", encodedData.length() );
OutputStream os = conn.openOutputStream();
os.write( encodedData.getBytes() );
int rc = conn.getResponseCode();
... // process it
} catch( IOException e ){ // handle the error here }
从上面的代码我们可以看出,如果使用POST方法,通常我们应该设置一些Headers,可以通过setRequestProperty()方法完成,其中 Content-Type和Content-Length是非常重要的,在MIDP中经常使用的Content-Type是 application/octet-stream和application/x-www-form-urlencoded,前者用于发送二进制数据,后者可以用于发送属性-数值对。我们最好在联网的时候设置这两个Header,因为这样服务器将很容易的知道将有什么类型的数据,多少数据发送过来。 在使用POST方法发送数据的时候,通常要涉及到io的知识,我们需要打开流,发送据,关闭流。
例如
void postViaHttpConnection(String url) throws IOException {
HttpConnection c = null;
InputStream is = null;
OutputStream os = null;
try {
c = (HttpConnection)Connector.open(url);
// Set the request method and headers
c.setRequestMethod(HttpConnection.POST);
c.setRequestProperty("If-Modified-Since", "29 Oct 1999 19:43:31 GMT");
c.setRequestProperty("User-Agent", "Profile/MIDP-1.0 Configuration/CLDC-1.0");
c.setRequestProperty("Content-Language", "en-US");
// Getting the output stream may flush the headers
os = c.openOutputStream();
os.write("LIST gamesn".getBytes());
os.flush();
// Optional, openInputStream will flush
// Opening the InputStream will open the connection
// and read the HTTP headers. They are stored until
// requested.
is = c.openInputStream();
// Get the ContentType
String type = c.getType();
processType(type);
// Get the length and process the data
int len = (int)c.getLength();
if (len > 0) {
byte[] data = new byte[len];
int actual = is.read(data);
process(data);
} else {
int ch;
while ((ch = is.read()) != -1) {
process((byte)ch);
}
}
}
finally {
f (is != null)
is.close();
if (os != null)
os.close();
if (c != null)
c.close();
}
}
通过如上的比较,我们可以看出POST方法发送数据的时候将更加灵活,你可以发送二进制数据,甚至可以实现对象的序列化。而使用GET方式发送数据的时候我们只能把数据在URL中发送出去,如果参数过多则很不方便,还要受到URL长度的限制,因此在J2ME联网中我们推荐HTTP协议的POST方式。
分享到:
相关推荐
j2me 不同运营商移动,电信,联通联网方案
j2me手机基于服务器的网络象棋游戏源代码
音乐的控制,rms的操作类,java字符串解析 将字符串解析成字符数组,java进度条实例模板,j2me中将对象转换成字节数组的方法,j2me联网测试,j2me多线程的应用实例,j2me Socket通信例子 客户端,服务器端
NULL 博文链接:https://wangxc.iteye.com/blog/591160
本文将讲述如何应用J2ME平台中的通用联网框架开发联网的应用程序。 首先,必须说明一点:MIDP中规定,任何移动信息设备都必须提供通过http协议的支持,而像其他的通信方式例如socket是设备相关的。有些手机会...
j2me框架_用J2ME的通用联网框架开发联网.pdf
J2ME通用进度条,解决联网、线程操作等候问题
现在j2me联网的技术很多,本人也只是刚刚接触这方面,这几天帮别人调试了一些这方面的程序,学到了不少东西,下面就谈谈我学习的过程. 首先这种程序可以简化的分解成三个层面, 1,J2ME的客户端(MIDlet程序) 2,服务器端...
J2ME弱联网开发文档,说明及例子和库文件。
本教程首先介绍了 j2me 开发体系,然后深入各个MIDP2.0 API,最后是搭建平台的知识。 第一章 “J2ME 技术概述”让你在学习J2ME 以前知道什么是J2ME。本章介绍了J2ME 平 台的体系结构和MIDlet 生命周期的概念。为以后...
J2ME中使用Socket开发联网程序,源代码形式。
基于J2ME的手机联网五子棋游戏开发,吴京京,张申,为了实现联网五子棋游戏在手机用户中的使用,本文通过在Eclips平台下,基于J2ME 技术,采用WTK(Wireless Tool Kit) 模拟器对其进行了开发。��
基于J2ME的手机蓝牙联网游戏的研究及实现 蓝牙联网游戏 蓝牙网络游戏 你想要的资料就在这里面……
本教程首先介绍了j2me 开发体系,然后深入各个MIDP2.0 API,最后是搭建平台的知识。 第一章 “J2ME 技术概述”让你在学习J2ME 以前知道什么是J2ME。本章介绍了J2ME 平 台的体系结构和MIDlet 生命周期的概念。为以后...
第一章 “J2ME技术概述”让你在学习J2ME以前知道什么是J2ME。本章介绍了J2ME平台的体系结构和MIDlet生命周期的概念。为以后的内容打下良好的基础。 第二章“CLDC简介”介绍了MIDP的基础Java Community Process...
原作者:亚日。共享出来方便大家。 以下载一张小图片为例子,一个较为简单的HTTP连接的demo。 支持CMNET及CMWAP两种不同的接入方式,以及在CMWAP接入方式下,过滤移动资费页面。在诺基亚 S60 系列真机上测试通过。
开发适应中国网络的J2ME连网程序,最近在做j2me程序,在中国做个联网程序,真不容易啊
适合于那些喜欢通过分析和修改能运行的例子程序来学习的开发者,更是热爱Java编程的开发者赶上主流无线设备新技术、学习J2ME不可多得的
J2ME 做的象棋游戏以及论文,支持蓝牙联网对战,支持人机对战! 以作毕业设计参考参考!