什么是Webservice
W3C组织对其的定义如下,它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计。Web Service服务通常被定义为一组模块化的API,它们可以通过网络进行调用,来执行远程系统的请求服务。
简单的说:WebService即Web服务,它是一种跨编程语言和跨操作系统平台的远程调用技术。
Web服务:基于HTTP和XML的技术,HTTP是互联网上应用最为广泛的一种网络协议,而XML是跨平台的基础。
跨编程语言和跨操作平台:就是说服务端程序采用java编写,客户端程序则可以采用其他编程语言编写,反之亦然!跨操作系统平台则是指服务端程序和客户端程序可以在不同的操作系统上运行。
远程调用:就是一台计算机a上的一个程序可以调用到另外一台计算机b上的一个对象的方法,譬如,银联提供给商场的pos刷卡系统,商场的POS机转账调用的转账方法的代码其实是跑在银行服务器上。再比如,amazon,天气预报系统,淘宝网,校内网,百度等把自己的系统服务以webservice服务的形式暴露出来,让第三方网站和程序可以调用这些服务功能,这样扩展了自己系统的市场占有率
web Service:有两大类:
一类:传统的webservice,大web service,相对复杂。
一类:轻量级的webservice123
WebService三要素
WebService的三要素是:
SOAP (Simple Object Access Protocol):简易对象访问协议,soap用来描述传递信息的格式。
WSDL (WebServices Description Language):Web服务描述语言,用来描述如何访问具体的接口。
UDDI (Universal Description Discovery and Integration):通用描述、发现及整合,用来管理、分发、查询webService。
原生态WebService客户端编写
常见的手机归属地查询?
http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl
1.打开cmd,执行wsimport生成代码。
你不懂命令为什么能生成代码不要紧,记住就好!这是JDK/BIN目录下自带的
2.如图所示,默认情况下代码生成在C:\Users\Administrator会生成class和java文件。删除class文件
3.开始编写查询手机号归属地客户端
eclipse创建工程,将生成的代码copy到你自己想要的包下。记得修改package导包
然后编写第一个WebService客户端接口
package cn.com.webxml;
/**
* 第一个WebService客户端演示
* 根据手机号查询手机归属地
* http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl
* @author dongyang
*
* WebService的三要素是:(面试)
* SOAP (Simple Object Access Protocol):简易对象访问协议,soap用来描述传递信息的格式。
* WSDL (WebServices Description Language):Web服务描述语言,用来描述如何访问具体的接口。
* UDDI (Universal Description Discovery and Integration):通用描述、发现及整合,用来管理、分发、查询webService。
*
*/
public class PhoneAddressClient {
public static void main(String[] args) {
System.out.println(getPhoneAddress("150******78"));//换成自己的号码即可
}
public static String getPhoneAddress(String phone){
//1.实例化生成的服务类
MobileCodeWS ws = new MobileCodeWS();
//2.调用服务类的方法获取接口实例
MobileCodeWSSoap soap = ws.getMobileCodeWSSoap();
//3.通过接口直接获取数据
return soap.getMobileCodeInfo(phone,"");
}
}
代码结构及测试结果
这就是原生态的WebServiceke客户端接口。
简单熟悉这个例子之后。下面开始自定义服务端,发布服务,编写客户端
自定义WebService服务端并发布服务编写客户端测试
1.编写服务接口
package cn.com.webservice;
/**
* WebService服务端
* @author dongyang
*
*/
public interface FisrtWebService {
String getAddressByPhoneNo(String phoneNo);
}
2.编写接口实现类
package cn.com.webservice;
import javax.jws.WebService;
@WebService//加上这个注解,表示此实现类就是WebService服务
public class FisrtWebServiceImpl implements FisrtWebService {
public String getAddressByPhoneNo(String phoneNo) {
return phoneNo + ": 归属地是上海";
}
}
3.发布服务
package cn.com.webservice;
import javax.xml.ws.Endpoint;
/**
* 发布服务
* @author dongyang
*
*/
public class PublishServerTest {
public static void main(String[] args) {
//参数1:服务被访问的url ip+端口号+服务名
//参数2:实现类
Endpoint.publish("http://localhost:9999/getAddress", new FisrtWebServiceImpl());
System.out.println("服务发布成功");
//查看WebService服务是否启动 url+?wsdl
//http://localhost:9999/getAddress?wsdl是否能显示
}
}
控制台运行结果:
服务发布成功
4.验证服务是否发布成功
访问发布服务的ip+端口+服务名+?wsdl
http://localhost:9999/getAddress?wsdl是否能显示