第一种:客户端方式wsimport 【掌握】
案例:手机号码归属地查询WEB服务
案例:天气查询WEB服务
第二种:Service方式 【了解】
案例:天气查询WEB服务
第三种:HTTPURLConnection方式【代码自己发送http请求-掌握】
案例:手机号码归属地查询WEB服务
第四种:Ajax调用方式【不要求掌握,原理与第三种一样,只不过是用js写】
n种:IOS:AFN……
一、第一种:客户端方式wsimport(重要)
案例一:手机号码归属地查询WEB服务
案例二:天气查询WEB服务
(这里提供一个公网服务地址:http://www.webxml.com.cn/zh_cn/index.aspx)不过一般般直接在百度查也能找到很多接口。
案例一:手机归属地查询
手机归属地Web服务:http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl
第一步:wsimport生成客户端代码【此命令放在你在工程src目录下执行】
创建项目并在控制台中,打开源代码src目录,输入以下命令:
wsimport -p com.gyf.mobile.ws -s . http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl
第二步:阅读使用说明书,使用生成客户端代码调用服务器
第三部:获取指定电话号码的归属地信息,代码如下
案例二:天气查询WEB服务
天气Web服务 http://ws.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl
第一步:wsimport生成客户端代码
wsimport -p com.gyf.weather.ws -s . http://ws.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl
使用上面的命令时会出现失败,出现『则很可能需要更改 ‘s:schema’ 的前缀』错误
解决办法是,将wsdl另存为一个xml文件,然后打开文件,把s:schema内容删除
是把整个s:element标签删除
在终端执行下面命令wsimport -p com.gyf.weather.ws -s . +xml文件路径
如果是window,路径写 file://c:/…
如果是linux/mac 直接写 根路径/…
第二步:阅读使用说明书,使用生成客户端代码调用服务端
首先查看看服务视图查看各个服务端点
然后根据提供的服务端点来查看服务的描述
最后通过服务端点来选择相应的方法
第三步: 根据城市获取天气信息
随便填的号码
一、第三种:HTTPURLConnection方式(重要)
案例:手机号码归属地查询WEB服务
根据http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?op=getMobileCodeInfo说明的soap1.1请求格式来实现即可
使用java.net.HttpURLConnection发送POST网络请求
注意事项:1、设置post请求方式时,post一定要大写
2、默认HttpURLConnection是没有权限写数据,需要设置setDoOutput(true)
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.*;
public class Main2 {
public static void main(String[] args) throws IOException {
//发布webservice的网络基于soap网络请求
/*
HttpURLConnection
*/
//1、创建URL【访问路径】
URL url = new URL("http://127.0.0.1:11111/weather");
//2、创建连接
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
//3、设置请求头
httpConn.setRequestMethod("POST");
httpConn.setRequestProperty("content-type","text/xml; charset=utf-8");
//4、设置请求参数
httpConn.setDoOutput(true); //可以写数据
OutputStream os = httpConn.getOutputStream();
os.write(parameterStri("广州").getBytes());
//5、接收服务器响应数据
InputStream is = httpConn.getInputStream();
byte[] buf = new byte[1024];
int len = 0;
while((len = is.read(buf)) != -1){
//把字节转换成字符串
System.out.println(new String(buf,0,len,"utf-8"));
}
//6、关流
is.close();
os.close();
}
public static String parameterStri(String cityName){
return "<?xml version=\"1.0\" ?>\n" +
"\t<S:Envelope xmlns:S=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" +
"\t\t<S:Body>\n" +
"\t\t\t<ns2:queryWeather xmlns:ns2=\"http://weather.ykd.com/\">\n" +
"\t\t\t\t<arg0>"+cityName+"</arg0>\n" +
"\t\t\t</ns2:queryWeather>\n" +
"\t\t</S:Body>\n" +
"\t</S:Envelope>";
}
}