一般在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