写在前面:
项目是java web,jdk1.4,weblogic 7;对方.net系统,用wcf开发的接口。对方提供接口url地址,以及说明用post方式去调用,无需传递参数,直接返回json array(json数组格式的数据)
调用接口的方法有很多中,框架调用,ajax调用,urlConnection等等.由于项目需要,需要远程调用对方.net系统的接口,其接口是用wcf开发的,然后我们这边的系统是java,并且jdk是1.4,所以主流的一些框架调用已经用不了了,一般要jdk1.6以上才可以。说到这里,axis是可以适用于jdk1.4的,但是当采用客户端生成代码的方式的时候,我生成的类有缺少,不知道为啥,果断放弃;然后由于是跨域调用接口(也就是双方的系统不在一个服务器里面),并且需要post方式去访问,故ajax的方式也不行,因为ajax不支持跨域,当然利用jsonp是可以跨域的,但是它是采用get方式访问的。在挣扎尝试了两三天后,求助贴吧大神,大神跟我语音,让我用httpurlconnection的方式去访问,也就是URLConnection调用接口。之后,我又拿出了传智播客的webservice的视频笔记,上面也有提及到采用URLConnection调用接口,于是我就打算试试。成功啦......真是强大哈。。。(貌似这种方式可以适用于各种接口的调用,也可以调用webservice,大家都可以试一试,遇到问题不要怕,啊哈哈哈。。。。。)
1.准备工作:
对于URLConnection调用接口貌似不需要导入任何相关的jar包,这个要根据项目来定。这里返回的是json数组的字符串,所以这里我要用到json相关的jar来进行获取。导入json的jar包就可以了。
代码:可以自己先写一个main java程序来连接测试一下,然后再放到具体的项目上去进行调用。
public static void main(String[] args) { //创建url地址 这里的url地址我是乱写的 你们填写自己的需要调用的接口就好 URL url = new URL("http://10.10.10.83/GetProjectNameService/GetProjectNameService.svc/getProjectName"); //打开连接 URLConnection conn = url.openConnection(); //转换成HttpURL HttpURLConnection httpConn = (HttpURLConnection) conn; //连接超时的相关设置 看相关博客说要加上 就没有去掉 System.setProperty("sun.net.client.defaultConnectTimeout", "30000"); System.setProperty("sun.net.client.defaultReadTimeout", "30000"); //打开输入输出的开关 httpConn.setDoInput(true); httpConn.setDoOutput(true); //post提交不能有缓存 httpConn.setUseCaches(false); //设定传送的内容类型是可序列化的java对象 如果不需要传递参数 就不需要写就行了 //httpConn.setRequestProperty("Content-type", "application/x-java-serialized-object"); //httpConn.setRequestProperty("Content-type", "UTF-8"); //设置请求的头信息 这里的请求类型是根据自己需要传递的参数来决定的 //httpConn.setRequestProperty("Content-type", "text/xml;charset=UTF-8"); //注意如果这里是get请求方式 且 不许需要传递参数 这里直接将post换为get 且删掉获得输出流 并发送数据 的相关代码即可
//设置请求方式 httpConn.setRequestMethod("POST"); //获得输出流 OutputStream out = httpConn.getOutputStream(); //发送数据 即使什么参数也不用传递 也要发送数据 穿空的字符串就好了 ObjectOutputStream objOut = new ObjectOutputStream(out); objOut.writeObject(new String("")); objOut.flush(); objOut.close(); //获得输入流 在这里获得输入流的时候 就已经默认执行了connect()方法 故上一步可以省略这个方法 InputStream in = httpConn.getInputStream(); //判断请求成功 StringBuffer sb = new StringBuffer(); JSONArray jarr = null; String str = ""; if(httpConn.getResponseCode() == 200){
//使用输入流的缓冲区 这里加入UTF-8可以解决乱码的问题 BufferedReader reader = new BufferedReader(new InputStreamReader(in,"UTF-8")); String line = null; //读取输入流 while((line = reader.readLine()) != null){ sb.append(line); } str = sb.toString(); System.out.println("返回结果:"+str); //由于对方返回的结果是json数组格式的字符串 故将json数组格式的字符串转为json数组 //可根据自己项目的需要来转为需要的类型 具体方法 可以百度 jarr = new JSONArray(str); //遍历打印 for(int i=0;i<jarr.length();i++){ System.out.println(jarr.getString(i)); } } }
交流群:527038646 嘻嘻嘻