一般在java处理Get/Post请求,用的比较多是apache的commons-httpclient.jar库,封装比较彻底,使用比较简单。有些简单应用场合,不需要使用httpclient库,可以直接使用Java内置URLConnection类。
客户端:
public String getInfoFromServ( String path ){
BufferedReader in = null;
String result = "";
try {
URL url = new URL(path);
URLConnection urlcon = url.openConnection();
// 设置读取编码 UTF-8
in = new BufferedReader(new InputStreamReader(urlcon.getInputStream(),"UTF-8"));
String line;
// 循环读取多行内容,注源服务器内容一定要以\n结尾
while ((line = in.readLine()) != null) {
result += line;
}
} catch (IOException e) {
e.printStackTrace();
}finally{
if( in != null){
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 解析出resultData字段
JSONObject json = null;
try {
json = new JSONObject(result);
result = json.getString("resultData");
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
通过URLConnection的getInputStream()获取输入流,然后通过BufferedReader逐行读取。上述代码在测试环境中正常,能取到服务器完整的JSON字段值,但是部署到现场后,发现只能取到部分JSON字段,这Java不是跨平台的么,服务器不同执行结果还不同了?最后发现是由于服务器端返回内容格式问题,BufferedReader是逐行读取,每行以\n结尾。可能由于java版本不同,代码做了相应优化所致。
服务端:
rep.setContentType("text/json;charset=utf-8");
PrintWriter out = rep.getWriter();
out.println(strJson); // 调用println()输出换行符,不用print()
out.flush();
附:org.json