- 浏览: 465323 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
wwwjiandan:
我现在遇到的问题是将Activity设置为非全屏,且andro ...
Android中软键盘弹出时底部菜单上移问题 -
zjhdreams:
求下载链接
Android 9Patch (NinePatch) -
wtjandjay:
受教了 .......
从程序员到项目经理 -
mr_zhang2011:
将博客搬至CSDN -
fyc0109:
为什么我传过去的值, 有的都不对呢, 顺序也是一样的.就是获得 ...
Android Parcelable序列化自定义类集合在Activity间传递
一:比较Http get和post区别:
java解释,和j2me类似,详细出处参考:http://www.jb51.net/web/12714.html还有字符编码的应用,有时间要学学java web,对服务器请求数据有更深了解
1、Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据。
2、Get将表单中数据的按照variable=value的形式,添加到action所指向的URL后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;比http://211.139.191.144:8008/taac/services/applyCopyrightDeclaration.action?username=ldh&password=zhm,Post是将表单中的数据放在form的数据体中按照变量和值相对应的方式,传递到action所指向URL。如:设置属性值
Enumeration perpertyKeys = requestProperty.keys();
while (perpertyKeys.hasMoreElements()) {
String key = (String) perpertyKeys.nextElement();
String value = (String) requestProperty.get(key);
conn.setRequestProperty(key, value);
}
3、Get是不安全的,因为在传输过程,数据被放在请求的URL中,而如今现有的很多服务器、代理服务器或者用户代理都会将请求URL记录到日志文件中,然后放在某个地方,这样就可能会有一些隐私的信息被第三方看到。另外,用户也可以在浏览器上直接看到提交的数据,一些系统内部消息将会一同显示在用户面前。Post的所有操作对用户来说都是不可见的。
4、Get传输的数据量小,这主要是因为受URL长度限制最多1024字节;而Post可以传输大量的数据,所以在上传文件只能使用Post(当然还有一个原因,将在后面的提到)。
5、Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。默认是用ISO-8859-1编码
6、Get是Form的默认方法。
二:构建服务器,目的是搞个测试地址测试get,post请求
1.下载APMServ5.2.6,phpcms_v9_beta_UTF8
2.安装好APMServ5.2.6后,把phpcms_v9_beta_UTF8解压到APMServ5.2.6安装目录./www/htdocs/下,打开 APMServ5.2.6启动服务,运行http://127.0.0.1出现画面,提示你要安装phpcms程序点击“请点这里开始安装”,按提示一步一步往下操作,到填写数据库信息时,数据库服务器用默认的,数据库帐号:root,密码为空,数据库名称你自己取,数据库前缀用默认为可以了,你也可以修改为自己想要的,然后填写网站管理员用户名、密码和邮箱即可,其它的用默认即可,点击下一步; 安装进行中,请稍等,大约几十秒后,提示安装完成即可。
在开启APMServ下,http://localhost:80/或者http://127.0.0.1:80是服务器地址,现在可以在./www/htdocs/下放文件如1.txt,hai7.png,访问地址是http://localhost:80/1.txt和http://localhost:80/hai7.png,在网络中是什么地址,好像还好做一些配置,以后再研究
也可参考APMServ官网使用教程http://www.cnzz.cc/edu/Server/web/4190.html
三:get访问,post访问,cmwap设置见下面:
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.Enumeration;
import java.util.Hashtable;
import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.TextField;
import javax.microedition.media.Manager;
import javax.microedition.media.MediaException;
import javax.microedition.media.Player;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
/**
* 测试get,post请求,需要开启自己设定的APMServ服务才能测试,
* 在APMServ安装目录./www/htdocs/下放icon.png,hai7.wav,1.txt资源
*
* @author hsz
*/
public class TestGetPost extends MIDlet implements CommandListener {
public HttpConnection conn;
public MainThread mainThread;
public TextField user;// 用户名
public TextField pass;// 密码
public Command c1;
private Form f;
private int http_type = TYPE_POST;
public static final int TYPE_GET = 0;
public static final int TYPE_POST = TYPE_GET + 1;
public static final String URL = "http://localhost:80/";
public static final int TYPE_IMG = 0;// 图片
public static final int TYPE_AUDOI = 1;// 音乐
public static final int TYPE_TXT = 2;// TXT
public static final boolean ISUSE_CMWAP = false;
public static final String CMWAP_IP = "http://10.0.0.172:80/";
public TestGetPost() {
f = new Form("测试get,post!");
c1 = new Command("确定", Command.SCREEN, 1);
f.addCommand(c1);
f.setCommandListener(this);
Display.getDisplay(this).setCurrent(f);
mainThread = new MainThread();
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
}
protected void pauseApp() {
}
protected void startApp() throws MIDletStateChangeException {
}
public void commandAction(Command c, Displayable dd) {
new Thread(mainThread).start();
}
class MainThread implements Runnable {
public void run() {
System.out.println("start");
switch (http_type) {
case TYPE_GET:
get(getUrl(TYPE_IMG), TYPE_IMG);
break;
case TYPE_POST:
post(getUrl(TYPE_IMG), TYPE_IMG);
break;
default:
break;
}
}
}
public String getUrl(int type) {
String tem = null;
if (type == TYPE_IMG) {
tem = URL + "icon2.png";
} else if (type == TYPE_AUDOI) {
tem = URL + "hai7.wav";
} else if (type == TYPE_TXT) {
tem = URL + "1.txt";
}
return tem;
}
public void displayResult(InputStream is, int type) {
try {
switch (type) {
case TYPE_IMG:// 从网络中获取图片并显示
Image im = Image.createImage(is);// 该方法为MIDP 2.0方法
f.append(im);
System.out.println("获得图片");
break;
case TYPE_AUDOI:// 从网络中获取音乐并播放,播放有问题,没有去更正
Player p;
p = Manager.createPlayer(is, "audio/x-wav");
p.start();
System.out.println("开始播放音乐");
break;
case TYPE_TXT:// 从网络中获取文本并显示
byte[] buffer = new byte[1024 * 4];
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int i = 0;
while ((i = is.read(buffer)) != -1) {
baos.write(buffer, 0, i);
}
byte[] allData = baos.toByteArray();
String str = new String(allData);
System.out.println("get获取的数据:" + str);
f.append(str);
buffer = null;
allData = null;
baos.close();
break;
default:
break;
}
} catch (IOException e) {
e.printStackTrace();
} catch (MediaException e) {
e.printStackTrace();
}
}
/**
* 进行cmwap设置,把host:port换成CMWAP_IP,并设置"X-Online-Host"为Host:Port
*
* @param url
* @return HttpConnection 已经打开URL的连接
*/
public HttpConnection openConnUrl(String url) {
try {
if (ISUSE_CMWAP) {// 进行cmwap设置,把host:port换成CMWAP_IP,并设置"X-Online-Host"为Host:Port
HttpURLParam urlparam = new HttpURLParam(url);
String CMWAPurl = CMWAP_IP + urlparam.getPath();
conn = (HttpConnection) Connector.open(CMWAPurl);
conn.setRequestProperty("X-Online-Host", urlparam.getHost()
+ ":" + urlparam.getPort());
urlparam = null;
} else {
conn = (HttpConnection) Connector.open(url);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
/**
* http get请求
*
* @param url
* 在基本地址http://127.0.0.1:80/+....组成
* @param type
* 固定测试地址分图片,音乐,TXT
*/
public void get(String url, int type) {
try {
conn = openConnUrl(url);
conn.setRequestMethod(HttpConnection.GET);
// 中间可能有很多属性设置
// 获得响应状态
int responseCode = conn.getResponseCode();
if (HttpConnection.HTTP_OK == responseCode) {
System.out.println("联网成功!");
InputStream is = conn.openInputStream();
displayResult(is, type);
is.close();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (conn != null) {
conn.close();
conn = null;
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* http post请求
*
* @param url
* 在基本地址http://127.0.0.1:80/+....组成
* @param type
* 固定测试地址分图片,音乐,TXT
*/
public void post(String url, int type) {
try {
conn = openConnUrl(url);
conn.setRequestMethod(HttpConnection.POST);
conn.setRequestProperty("Content-type", "text/xml;charset=UTF-8");
// 设置其它属性,如果没有其他属性requestProperty置为空
Hashtable requestProperty = new Hashtable();
if (requestProperty != null) {
Enumeration perpertyKeys = requestProperty.keys();
while (perpertyKeys.hasMoreElements()) {
String key = (String) perpertyKeys.nextElement();
String value = (String) requestProperty.get(key);
conn.setRequestProperty(key, value);
}
}
/**
* post正文,写一个函数组织下面请求文件,再转成byte[]; 发送post正文请求 <?xml version="1.0"
* encoding="UTF-8"?> <applyCopyrightDeclaration>
* <version></version> <appuid></appuid>
* </applyCopyrightDeclaration>
*/
Hashtable params = new Hashtable();
params.put("version", "1");
params.put("appuid", "111");
byte[] content = createCDXMLPack(true, params);
if (content != null) {
DataOutputStream dos = conn.openDataOutputStream();
dos.write(content);
dos.close();
}
// 获得响应状态
int responseCode = conn.getResponseCode();
if (HttpConnection.HTTP_OK == responseCode) {
System.out.println("联网成功!");
InputStream is = conn.openInputStream();
displayResult(is, type);
is.close();
// 成功获取数据会送到解析层
// netConnectionEvent.connSuccess(allData);
}
} catch (Exception e) {
// netConnectionEvent.connFail(e.toString());
} finally {
try {
if (conn != null) {
conn.close();
conn = null;
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 生成请求版权声明文件所需要的post pack
*
* @param haveXMLHead
* 是否需要xml声明文件头
* @param params
* 键值对参数
* @return byte[] pack
*/
public static byte[] createCDXMLPack(boolean haveXMLHead, Hashtable params) {
if (params == null || params.isEmpty())
return null;
StringBuffer packBuffer = new StringBuffer();
if (haveXMLHead)
packBuffer.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
packBuffer.append("<applyCopyrightDeclaration>");
Enumeration perpertyKeys = params.keys();
while (perpertyKeys.hasMoreElements()) {
String key = (String) perpertyKeys.nextElement();
String value = (String) params.get(key);
packBuffer.append("<" + key + ">");
packBuffer.append(value);
packBuffer.append("</" + key + ">");
}
packBuffer.append("</applyCopyrightDeclaration>");
byte[] pack = null;
;
try {
pack = packBuffer.toString().getBytes("utf-8");
} catch (UnsupportedEncodingException e) {
}
return pack;
}
/**
* 获得host,port,path便于cmwap设置
*/
class HttpURLParam {
private String _host;
private String _port;
private String _path;
public HttpURLParam(String aurl) {
int idx = aurl.indexOf("://");
if (idx == -1) {
idx = 0;
} else {
idx += 3;
}
int idx2 = aurl.indexOf('/', idx);
_host = aurl.substring(idx, idx2);
int idx3 = _host.indexOf(':');
if (idx3 == -1) {
_port = "80";
} else {
_port = _host.substring(idx3 + 1);
_host = _host.substring(0, idx3);
}
_path = aurl.substring(idx2);
}
public String getHost() {
return _host;
}
public String getPort() {
return _port;
}
public String getPath() {
return _path;
}
}
}
工程见附件:
- TestHttpGetPost.rar (22.5 KB)
- 下载次数: 6
发表评论
-
Handler Runnable和Thread之间的区别和联系 应用
2013-10-22 18:12 1355Android开发:Handler Runnable和 ... -
try-catch-finally的用法之finally
2013-10-22 10:43 983关于try-catch-finally的用法我就不多说了。 ... -
Eclipse快捷键大全
2011-06-05 17:28 1091Eclipse快捷键大全(转载) ... -
java上下转型
2011-03-09 11:02 1405import java.util.Vector; /** * ... -
自己写的j2meMVC模式
2010-10-15 15:02 1003cotroller 控制类包 model 数据组织类包 v ... -
用MV设计模式写的多媒体实例-MediaSampler
2010-10-15 14:46 1220三个包: mediasampler Midlet包 dat ... -
知识积累-KBOX2
2010-10-14 18:01 1135使用J2ME的MVC2开源框架KBOX http://w ... -
知识积累-EasyMF
2010-10-14 17:46 11002008 - 05 - 20 EasyMF 简易J ... -
J2ME 非常棒的文章推荐
2010-10-14 17:35 1095J2ME 非常棒的文章推荐 ... -
RMSDAO的原理和使用介绍
2010-10-12 17:40 1308备注:文章在附件里 初始化RMSDAO时要直接使用领域对象 ... -
使用BinCompiler将资源文件打包成二进制文件
2010-10-12 17:20 1451转载 http://yarin.iteye.com/bl ... -
手机内存优化文章
2010-10-12 15:57 1514转载http://www.cnjm.net/tech/ ... -
J2ME 机型开发bug收集
2010-10-12 15:50 1189转载 http://www.j2megame.org/i ... -
j2me Class.getResourceAsStream()
2010-10-12 15:46 1519J2me Class.getResourceAsStream( ... -
J2ME 本地文件读写
2010-10-12 15:43 1408转载http://www.devdiv.net/viewthr ...
相关推荐
`HttpConnection`提供了对HTTP协议的支持,可以用于发起HTTP GET和POST请求。以下是一个简单的GET请求示例: ```java String url = "http://example.com/api/data"; ConnectionFactory factory = new ...
// 如果是POST请求,这里写入请求体 os.write(requestBody.getBytes()); os.close(); ``` 读取响应则通过`InputStream`进行: ```java InputStream is = conn.openInputStream(); byte[] buffer = new byte[4096];...
本文将深入探讨标题和描述中涉及的知识点,包括HTTP请求、J2ME中的Socket编程、CMNET网络环境以及在S40设备上的应用。 首先,我们来看看HTTP请求。HTTP请求是由客户端发起的,用于向服务器获取或提交信息的一系列...
标题“Http-Connect.rar_HTTPConne_connect_j2me http_j2me login”提及的项目就是一个典型的例子,它利用HTTP协议在MIDlet(J2ME的移动应用)中建立连接,向HTTP服务器发送请求并获取服务器上的数据。描述中提到,...
5. **HTTP连接管理**:J2ME中的HttpConnection类支持基本的HTTP请求,如GET和POST,可用于发送和接收Web服务请求。 6. **流处理**:在读写网络数据时,通常会用到InputStream和OutputStream,它们提供了读取和写入...
2. POST请求允许通过单独的数据流发送大量数据到服务器,如提交Web表单。虽然数据不是直接在URL中显示,但仍然可能不安全。 3. HEAD请求仅用于获取服务器关于请求的元数据,不返回请求的数据本身,通常用于检查资源...
2. **设置请求方法**:根据需求,可能是GET或POST请求。GET用于简单地获取数据,POST则可以携带额外的数据,如查询参数。通过`conn.setRequestMethod(HttpConnection.GET)`或`conn.setRequestMethod(HttpConnection....
POST请求用于向服务器发送数据。J2ME中,需要先设置请求方法为POST,然后通过`setOutputStream()`获取输出流,写入要发送的数据。最后,同样通过`openInputStream()`获取服务器的响应。 **5. 请求头设置** J2ME允许...
综上所述,实现J2ME中的图片上传涉及了HTTP通信、图片数据处理、POST请求构造等多个环节,需要结合客户端和服务器端的代码协同工作。理解这些知识点对于开发J2ME应用尤其是涉及到网络交互的场景至关重要。
在J2ME中,开发者可以使用`HttpConnection`对象建立到Web服务器的连接,发送GET或POST请求,获取响应数据。 **三、网络游戏的实现** 1. **通信协议**:网络游戏通常采用TCP或UDP协议进行通信,TCP提供可靠的连接,...
例如,以下代码展示了如何使用`HttpConnection`来发送POST请求: ```java void postViaHttpConnection(String url) throws IOException { HttpConnection c = null; InputStream is = null; OutputStream os = ...
本文将详细介绍J2ME中的网络通信技术,特别是HTTP和Socket两种常用方法,并通过具体的示例代码帮助读者更好地理解和应用这些技术。 #### 二、HTTPConnection详解 HTTP (Hypertext Transfer Protocol) 是一种用于从...
上传文件通常有两种方式:GET和POST。GET方式适用于数据量较小的情况,而POST方式更适合上传大文件或多个文件,因为它可以在请求体中携带大量数据。在J2ME中,对于POST上传,我们首先要设置HttpConnection的Content-...
MIDP提供HttpConnection和StreamConnection接口来实现网络通信,面试可能会测试你如何发送GET/POST请求,处理数据流,或者实现WebSocket等。 6. **文件系统访问**: J2ME提供了RecordStore API来存储小量结构化...
- Web服务兼容性:默认情况下,.NET 1.1的Web服务不支持HTTP GET和POST请求,需要手动开启。 2. **解决方案**: - **服务器端**: - 修改`web.config`文件,设置HTTP编码为GB2312,确保与J2ME客户端一致: ```...
POST请求常用于提交表单数据或上传文件,数据包含在请求体中,而不是像GET请求那样包含在URL中。 在实际的无线网络编程中,J2ME的网络功能虽然简化了,但仍然需要处理网络连接的异步性、错误处理、数据编码解码等...
开发者通常会创建HTTP连接,发送POST或GET请求到服务器,并处理返回的数据。这些数据可能包括JSON、XML或者自定义格式,都需要进行解析和解码。 2. **数据加密**:为了保护用户的隐私和信息安全,手机QQ的通信数据...
通过HttpConnection类,可以发送GET和POST请求,获取网页数据或发送表单数据。 8. **设备适配** 由于J2ME需要在不同硬件和操作系统上运行,开发者必须考虑设备适配问题。 Jad和Jar文件的使用,以及屏幕尺寸、输入...