技术中心

这里象征着我们的态度和能力

>在无线J2ME设备上实现http传输(2)
作者:中国IT实验室    来源:中国IT实验室    发布时间:2012-01-01      浏览次数:7382
分享到:
欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入

    如何发送一个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 仍然在它的发展初期,
    并且无线设备也即将得到大面积的普及。所以,所有有志投身于无线网络编程中
    的开发者们将得到大展拳脚的好机会。

    附录:
    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;
    //用于提交请求的图形用户接口组件
    private List list;
    private String[] menuItems ;
    //用于显示服务器响应的图形用户接口组件
    private Form resultScreen;
    private StringItem resultField ;
    //用于requestScreen 的"send"按钮
    Command sendCommand;
    // 用于requestScreen的"exit"按钮
    Command exitCommand;
    // 用于requestScreen 的"back"按钮
    Command backCommand ;
    public HttpMidlet (){

[1] [2] 下一页

4000-880-989
(24小时热线)
联系客服
微信公众号

官方公众号

小程序

©2008-2022 CORPORATION ALL Rights Reserved. 昆明奥远科技有限公司版权所有 滇ICP备09003328号-1 滇公网安备 53011102000818号 增值电信业务经营许可证号:滇B2-20110045
昆明那家网络公司好,新媒体运营,网站优化,网络推广,网站建设,网页设计,网站设计,网站推广,云南网站公司,昆明新媒体公司,云南网红主播,昆明SEO公司,昆明网站建设,昆明网络推广,昆明网站优化,昆明网站推广,红河网站建设,大理网络公司,曲靖网络公司,丽江网站设计,昭通网络公司,保山大数据服务,智慧高速建设,智慧校园服务,云南IDC服务商,网络安全测评,等保测评,网站关键词排名优化服务,服务客户尽超2000余家,一切尽在奥远科技,服务电话:13888956730