首页 | 手机 | 笔记本 | 硬件 | MP3 | 数码相机 | 品牌机 | 办公 | 网络 | 服务器 | 投影机 | 新闻 | 游戏 | 学院 | 下载 | 论坛 | 博客 | 商城 | 分站 | 北京 上海 广州 深圳
首页 >> 学院 >> 程序开发 >> 程序开发Java
在无线J2ME设备上实现超文本传输协议
2006-8-7 14:33:00 文/javajia 出处:javajia

  如何发送一个HTTP POST请求

  你可以想象,发送一个HTTP POST请求的处理过程其实与发送一个GET请求非常地类似。我们将修改一个现有命令,添加少量的新的命令,并添加一个来自通用连接框架的附加的对象和一个附加的StringBuffer对象把POST请求体重的内容发送到服务器中。剩下的命令将保持不变。

  复制我们刚才创建的sendHttpGet()方法,把它粘贴进同一个类文件,改名为sendHttpPost()。 现在,我们将修改这个新方法来发送一个HTTP POST请求到服务器。 在方法的顶部添加两个新的变量说明。 声明一个类型为DataOutputStream的变量和另一个String类型的变量。 我们将使用DataOutputStream对象把存在于字符串变量中的POST请求体发送到服务器中。
  DataOutputStream dos = null;
  String requestBody = null;

  修改connector.open()命令包含另一个参数,指出连接将允许客户端可以通过连接在服务器上读和写。
  hcon = ( HttpConnection ) Connector.open( url, Connector.READ_WRITE );

  设置HttpConnection对象使用的请求方法为POST(默认的方法是GET)。
  hcon.setRequestMethod( HttpConnection.POST );

  得到一个用于现有的HTTP连接的DataOutputStream对象。
  dos = hc.openDataOutputStream();

  声明一个字节数组并通过检索一个来自requestBody字符串的字节数组初始化。 然后把DataOutputStream的缓冲写入字节数组内。
  byte[] byteRequest = requestBody.getBytes();
  for( int i = 0; i < byteRequest.length; i++ ) {
  dos.writeByte(byteRequest[i]);
  }//结束for( int i = 0; i < byteRequest.length; i++ )

  dos.flush(); //包含本句,在某些设被上将可能会产生不可预期的结果

  调用flush ()方法的意图是发送已经写入的数据到DataOutputStream的服务器的缓冲区中。 在某些电话上,这个操作工作正常,在其他的电话上,它导致HTTP请求的Transfer - Encoding被设置为" chunked ",有一些随机字符被放到请求本身的前面和后面。那又怎样处理这个问题呢?这个方法调用实际上是根本不需要的。在接下来的一行中,服务器连接打开(通过openInputStream ()),将自动输入缓冲区。因此,你最好不要调用缓冲区的flush()方法。这个方法其余的部分保持不变,除了DataOutputStream对象必须在finally{}语句块中关闭。
  } finally {
  if ( hc != null ) hc.close();

  if ( dis != null ) dis.close();

  if ( dos != null ) dis.close();
  }//结束 try/finally

  这就是所有的程序代码!并请参见本文后附带的程序代码。

  随着可以使用国际互联网络和支持网络的无线设备日益的增多普及,Java和J2ME的重要性也在不断的变大。因为HTTP协议是当前仅有的,被所有的遵从MIDP规范的设备支持的网络协议,它也是用于开发无线网络应用程序的最好的候选者。

  在本文中,我们探究了无线网络编程的基本结构和几个核心问题,我们看了如何调用两个最常用的HTTP请求方法:GET和POST。J2ME仍然在它的发展初期,并且无线设备也即将得到大面积的普及。所以,所有有志投身于无线网络编程中的开发者们将得到大展拳脚的好机会。

  附录:
  /*
  * HttpMidlet.java
  */
  import javax.microedition.midlet.*;
  import javax.microedition.lcdui.*;
  import javax.microedition.io.*;
  import java.io.*;


  public class HttpMidlet extends MIDlet implements CommandListener {
  //使用默认的URL。用户可以从图形用户接口改变这个值
  private static String defaultURL = "http://localhost:8080/test/servlet/EchoServlet";

  // 主MIDP 显示
  private Display myDisplay = null;

  // 输入URL的图形用户接口组件
  private Form requestScreen;
  private TextField requestField;
看本文的网友还看了:
热点关注:
·视频教程中心
·AutoCAD 2007
·Dreamweaver8
·Photoshop CS3
·PS图层全知道
·Flash Action Script
·数码照片处理大全
最新教程>>>
·Photoshop CS3视频教程:Vista壁纸自己做
·视频教程 Photoshop超超级去水印法
·Dreamweaver视频教程-制作网站三大原则
·AutoCAD 2007中文版标准视频教程—初识三维部
·AutoCAD 2007中文版标准视频教程—端盖(2)
·AutoCAD 2007中文版标准视频教程—建筑平面图
·GoLive视频教程—使用CSS编辑器之一
·GoLive视频教程—通过CSS+DIV进行布局之一
·学院频道热门文章
·Photoshop抠出复杂背景下的乱发
·利用Photoshop光照滤镜打造太阳初升
·eMule电骡长时间下载到底伤不伤硬盘
·打造最强的IE IE6“丰满”完全手册
·能否王者归来?RealPlayer11抢先体验
·“覆水可收” PC数据保镖V2.0体验报告
· OpenOffice VS MS Office大比拼
·一个网站全搞定 在网页上使用QQ和MSN
·学院专题
·一起分享2007年上半年精彩大片
·炎炎夏日 极尽视听播放器专题
·装饰设计视频教程:建筑渲染技巧
·我型我show 桌面大师群英会
·维护系统用它们!系统工具视频教程专集
·今日推荐
·看专题赢显卡 RV6X0全国市场直击报道
·百款笔记本直降千元 颐高暑促劲减风暴
·天兵神器 诺基亚智尊E90完全评测专题
·视觉的盛宴 影像器材与技术博览会直击
·我的坛子我做主 喷墨一体机版主挑战赛
2006 经营许可证编号: 粤B2-20050807