开发者社区


C++/C | Java | .Net/Windows | Linux/Unix | 开源 | 其他
首页 - 编程
编程
全文搜索:   

探索J2ME:用GCF通信
作者: builder
2005-06-06 14:47:27



使用HttpConnection类

现在,我们完全基于HTTP来看看如何用HttpConnection类来请求远端的服务器并获取数据。你可以用静态Connector类打开HttpConnection,它会为你维护对象。打开连接后,你可以通过指定HttpConnection.GET、 HttpConnection.POST,、或者HttpConnection.HEAD来设置你希望使用的客户请求类型:
 

http = (HttpConnection) Connector.open(“http://builder.com.com”);
     http.setRequestMethod(HttpConnection.GET);

你指定的请求会自动发送到你在Connector.open中设定的URL。然后你可以通过HttpConnection类中的getResponseCode方法来检测请求是否成功
 

if (http.getResponseCode() == HttpConnection.HTTP_OK){
        //成功!
} else {
        //失败
     }

实际上,一旦你建立连接,发送和接受数据就是很简单的一件事了,你只需用HttpConnection类的openInputStream和openOutputStream方法打开适当的流对象就可以了。

接收数据

让我们看一个具体的例子。在程序清单A中,我已经写好了用以建立一个名为CGFMidlet的MIDlet例子的代码,它演示了通过HttpConnection类,如何读取保存在Web服务器中的小文本文件内容的过程。在运行这个例子前,你有可能需要修改URL(http://你的Web服务器/你的文件名.txt)为合适的内容。

让我们看看getHTTPFile方法,它是用来处理文件检索的。你就会发现HttpConnection类为该文件发出GET请求。当检查回应状态字、确保没有问题后,我用InputStream方法读取文件的内容并把它显示在MIDlet的主表单中:
 

//打开读取结果的输入流
     stream = http.openInputStream();
     byte data[] = new byte[(int) http.getLength()];
     stream.read(data);
//把结果显示在主表单的输出字段上
     output.setString(new String(data));
     
   
发送数据

你也可以用GET请求来向服务器发送数据,但是这个方法有个缺点(只能向服务器发送少量数据),我在前面已经暗示了这一点。如果发送数据的量很大,你最好用POST请求。你可以在程序清单B中看到ServerConnetion类是如何做到这一点的。该程序清单是我在本系列文章中所用到的例子程序ExpensesApp(你可以在这儿下载源代码)可以把开销发送到服务器保存而写的代码。除了我现在用HttpConnection.POST做为请求类型以及设置一种特殊的信息头来帮助服务器处理请求中的数据外,其它的东西都大致一样:

http.setRequestMethod(HttpConnection.POST);
     //必须设置内容类型t
     http.setRequestProperty("Content-Type",_
     "application/x-www-form-urlencoded");
     //为打开的连接打开输出流
     OutputStream ostream = http.openOutputStream()

然后,我循环访问ExpenseInfo数组,并把数组中的各个对象联为一个字符串,用OutputStream方法把字符串所保存的数据发送到服务器:

for (int i=0; i<expensesRecords.length; i++) {
     String s = ("ExpenseDate=" + expensesRecords[i].getDate().toString()+
     "&ExpenseCategory=" + expensesRecords[i].getCategory() +
     "&ExpenseAmount=" + String.valueOf(expensesRecords[i].getDollars()) +
     "." + String.valueOf(expensesRecords[i].getCents()) +
     "&ExpenseDescription=" + expensesRecords[i].getDescription());
     

在服务器端,你需要类似于CGI类型的处理过程(例如ASP、JSP或者Servlet)来接受数据。字符串中的每一对“标识符——数值”将按照递交表单的控制显示在接受页上,所以你的接受页访问这些数据的方式和访问表单数据相同。

尽管HTTP并不是传输大量数据的理想工具,它的灵活性还是足以用来完成本文中的工作,并且GCF使HTTP的用法特别简单。很幸运,GCF以后的版本将为开发者提供除HTTP外更多的选择。



责任编辑:李宁

欢迎投稿

【上一页】
声明:
Builder.com.cn(原ZDNet China应用开发频道)原创文章版权所有,未经许可严禁转载,且不构成投资建议。
近期相关报道:
实用技术文档
J2me XML
C/C++ C#
Java Oracle
Mysql .Net
VB.NET CSS
SQL Server 数据库
SQL UNIX
Linux Jsp
PHP Perl
Javascript IIS
XHTML ColdFusion
ASP/ASP.NET Apache
AJAX
订阅技术邮件
订阅"技术圈"杂志!请在下面选择您感兴趣的专题,填写e-mail地址,然后按订阅按钮:
应用开发管理
VS.NET 周刊
Database 周刊
WEB Service周刊
JAVA 周刊
IT 认证
Windows服务器周刊
互联网开发
当Windows Server 2008专家得5000元现金大奖
CNET NETWORKS 中国: 爱卡汽车网 | CNET科技资讯网 | e询网 | CWEEK | 蜂鸟网 | GameSpot China | 个人电脑 | PChome | SPN | 网友世界 | ZDNet China | 中关村在线
CNET NETWORKS 美国: BNET | CNET.com | CNET Download.com | CNET News.com | CNET Reviews | CNET Shopper.com | GameSpot | MP3.com | mySimon | Release 1.0 | Search.com | TechRepublic | TV.com | Webshots | ZDNet
Copyright (c) 2006 CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
ZDNet 公司标识是 CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号