写在前面:
项目是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 嘻嘻嘻