参考
J2MP如何Post数据在网上可以搜到不少例子,代码虽然有一些差别,但是一般都是可以用的,其中搜索的个别帖子提到了写入提交数据后必须用flush,代码如下:
if(!postData.equals("")){
System.out.println(postData);
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty( "Content-Length",String.valueOf(postData.length()));
DataOutputStream dos = conn.openDataOutputStream();
dos.write(postData.getBytes("UTF-8"));
dos.flush();
dos.close();
}
if(!postData.equals("")){
System.out.println(postData);
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty( "Content-Length",String.valueOf(postData.length()));
DataOutputStream dos = conn.openDataOutputStream();
dos.write(postData.getBytes("UTF-8"));
dos.flush();
dos.close();
}
测试发现,无论模拟器还是实机,调用flush后服务器完全无法获取参数,不用flush则正常,后来在网上找到不用flush的原因:
在servlet端使用request.getContentLength();语句得不到数据长度的问题
原因主要是flush()语句的使用问题,flush方法即使在缓冲区中没有满的情况下,也会将缓冲区内的内容强制写到外设,也就是所谓的刷新。 flush方法不是对所有的OutputStream子类起作用,只对那些使用缓冲区的OutputStream子类有效。。。。,因此在使用 flush()方法时,发出的数据包就无法确定长度,这时底层自动使用chunked编码,就不会有"Content-Length"这个头域,因此在服务器端就没法获取长度。所以你在程序中要注意对flush的调用,不然可能碰到奇怪的问题。。。
其实调用close方法,系统在关闭这个流前,也会将缓冲区的内容写到外设上,所以一般必须使用close()方法就行。
wtk文档给的post例子也用了flush,但并没说明情况,看来文档只是参考用的。
分享到:
相关推荐
当我们需要在J2ME应用中与服务器进行交互时,HTTP通信是常见的手段,其中GET和POST是两种基本的HTTP请求方法。这篇博客文章“j2me Http Get和Post请求总结”主要探讨了如何在J2ME环境中实现这两种请求。 首先,GET...
标题中的“j2me 与jsp通信”涉及的是在移动设备上使用Java 2 Micro Edition (J2ME)平台与服务器端的JavaServer Pages (JSP)进行数据交互的技术。J2ME通常用于开发功能手机和嵌入式系统的应用程序,而JSP则是Web开发...
`initAppointment()` 方法则相反,它从字节数组中读取数据,使用 `DataInputStream` 来解析字节流并初始化记录字段。这两个方法确保了记录在内存和RMS之间的准确转换。 二、RecordStore的使用和操作 1. 创建...
服务器端通过`DatagramSocket.receive()`方法接收数据,然后回送处理后的数据。客户端则通过`DatagramSocket.send()`方法发送数据,并用`DatagramSocket.receive()`接收服务器的响应。这两个类提供了在J2ME环境下...
1. **合理使用数据结构**:J2ME中的数据结构如ArrayList和Vector在内存管理上不如Java SE高效。考虑使用数组代替ArrayList,避免动态扩容带来的性能开销。对于小规模的数据存储,可以考虑使用哈希表或者简单的数组...
### J2ME 数据类型的相互转换方法 在Java 2 Micro Edition (J2ME) 开发过程中,数据类型之间的转换是一项非常重要的技术。特别是在处理网络通信、文件读写等操作时,经常会遇到整数与字节数组之间的转换需求。本文...
在移动平台开发中,尤其是Java ME(Java 2 Micro Edition)环境下,数据持久化是一个重要的需求。J2ME提供了一种轻量级的数据存储机制,称为记录管理系统(RMS,Record Management System)。RMS可以看作是小型的...
添加数据到记录存储中,需要创建RecordStore对象,然后使用`addRecord(byte[] data, int offset, int length)`方法。这个方法接受字节数组,表示要存储的数据,以及数据的偏移量和长度。数据可以是任何格式,但通常...
在J2ME中,使用Unicode编码处理中文字符至关重要,因为它能确保正确地存储和传输中文字符。 3. **输入法引擎** 中文输入法通常涉及到拼音输入、笔画输入或五笔字型等。在J2ME平台上,由于资源限制,拼音输入是最...
综上所述,J2ME课程设计“服务器与客户机的发送”涵盖了网络编程、数据传输、服务器与客户端交互、代码组织和测试等多个方面,是全面学习和实践J2ME技术的好机会。通过这样的实践,学生可以深入理解移动设备上的网络...
**J2ME API 2.0 - J2ME使用手册 - J2ME帮助文档** Java 2 Micro Edition(J2ME)是Java平台的一个子集,专为资源有限的设备如移动电话、智能手表和家用电器等设计。J2ME API 2.0 提供了在这些小型设备上开发应用...
在J2ME中实现多个文件上传,涉及到网络通信和数据编码技术。J2ME(Java Micro Edition)是一种轻量级的Java平台,主要用于移动设备和嵌入式系统。在这个平台上,进行文件上传需要利用HttpConnection类来创建HTTP请求...
这类文档通常会详细介绍每个类、方法和接口的用途,提供示例代码,并解释如何在实际项目中使用这些API。 **www.pudn.com.txt**可能是一个指向资源网站的链接或者说明文件,pudn.com是一个知名的中国技术资源分享...
`InputStream`用于从服务器接收数据,而`OutputStream`则用于向服务器发送数据。此外,还可以使用`ContentLength`属性来控制和管理传输的数据量。 通过`HttpConnection`类,J2ME应用程序不仅可以访问Web服务,还能...
4. **MIDP API详解**:MIDP是J2ME中用于创建移动应用的核心API,教程会详细介绍如何使用Canvas、Form、Item等组件进行用户界面设计,以及怎样利用 MIDP的网络功能实现数据通信。 5. **图形与多媒体**:J2ME支持丰富...
在eclipse中怎样使用j2me 在eclipse中怎样使用j2me 在eclipse中怎样使用j2me
【Servlet】:Servlet是Java语言中的一个接口,用于扩展服务器的功能。在Web应用中,Servlet处理来自客户端(通常是浏览器)的HTTP请求,并返回响应。在本例中,`sql2000test` 类继承了 `HttpServlet`,实现`doGet` ...
开发者需要理解如何建立连接、发送和接收数据,以及处理网络异常。 **存储管理** 在J2ME中,数据存储通常使用Record Management System (RMS)。RMS提供了一个简单的键值对存储机制,适用于小规模的数据存储。...