WebService
- 什么是webService
Web service 即web服务,它是一种跨编程语言和跨操作系统平台的远程调用技术即跨平台远程调用技术。
采用标准SOAP(Simple Object Access Protocol) 协议传输,soap属于w3c标准。Soap协议是基于http的应用层协议,soap协议传输是xml数据。
采用wsdl作为描述语言即webservice使用说明书,wsdl属w3c标准。
xml是webservice的跨平台的基础,XML主要的优点在于它既与平台无关,又与厂商无关。
XSD,W3C为webservice制定了一套传输数据类型,使用xml进行描述,即XSD(XML Schema Datatypes),任何编程语言写的webservice接口在发送数据时都要转换成webservice标准的XSD发送。
当前非SOAP协议的webService以轻量为首要目标,比如http rest方式也是webservice的一种方式,或者直接使用http自定义数据协议,比如http传输json数据,http传输xml数据等。 - webService三要素
1.soap:SOAP即简单对象访问协议(Simple Object Access Protocal) 是一种简单的基于 XML 的协议,它使应用程序通过 HTTP 来交换信息,简单理解为soap=http+xml。
Soap协议版本主要使用soap1.1、soap1.2。
SOAP不是webservice的专有协议,其他应用协议也使用soap传输数据。例如,SMTP、tr069等。
2.wsdl:描述Web Service及其函数、参数和返回值,简单的说就是webservice的使用说明书
3.UDDI:UDDI 是一种目录服务,通过它,企业可注册并搜索 Web services。 - 优点与缺点
1.优点
发布一个服务(对内/对外),不考虑客户端类型,不考虑性能,建议使用webservice
服务端已经确定使用webservice,客户端不能选择,必须使用webservice
2.缺点
考虑性能时不建议使用webservice
同构程序下不建议使用webservice,比如java 用RMI,不需要翻译成XML的数据
简单实例
1.创建接口:
/**
* 天气查询
* @author xmn-chengx
*
*/
public interface WeatherService {
/**
* 查询城市天气,返回天气结果
* @param city
* @return
*/
public String queryWeather(String city);
}
2.实现接口:
@WebService
public class WeatherServiceImpl implements WeatherService {
/**
* 查询城市天气,返回天气结果
* @param city
* @return
*/
@Override
public String queryWeather(String city) {
System.out.println("from client : "+city);
String msg = "晴天";
return msg;
}
}
3.发布接口:
public class ServicePublic {
public static void main(String[] args) {
//发布服务
Endpoint.publish("http://127.0.0.1:12345/weather", new WeatherServiceImpl());
}
}
4.查看wsdl:
- 1.在地址栏输入(注意后面的参数?wsdl)
http://192.168.1.100:1234/weather?wsdl - Wsdl不是webService,只是获取一个用于描述WebService的说明文件
- wsdl- WebServiceDescriptionLanguage,是以XML文件形式来描述WebService的”说明书”,有了说明书,我们才可以知道如何使用或是调用这个服务.
5.用Wsimport生成客户端代码
- wsimport –s . http://127.0.0.1:1234/weather?wsdl
- 解析:常用参数为:
-d<目录> - 将生成.class文件。默认参数。
-s<目录> - 将生成.java文件。
-p<生成的新包名> -将生成的类,放于指定的包下。
(wsdlurl) - http://server:port/service?wsdl,必须的参数。
6.客户端编写:
public static void main(String[] args) {
WeatherServiceImplService weatherServiceImplService = new WeatherServiceImplService();
@SuppressWarnings("restriction")
WeatherServiceImpl weatherServiceImpl = weatherServiceImplService.getPort(WeatherServiceImpl.class);
String msg = weatherServiceImpl.queryWeather("厦门");
System.out.println(msg);
}
四种客户端访问方式
1.第一种生成客户端调用方式
- 就是简单实例当中的客户端实现方式。
2.service编程调用方式
public class WeatherTest {
/**
* 10第二种:service编程调用方式
* 调用天气的接口服务
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
//创建WSDL的URL,注意不是服务地址
URL url = new URL("http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl");
//创建服务名称
//1.namespaceURI - 命名空间地址
//2.localPart - 服务视图名
QName qname = new QName("http://WebXml.com.cn/", "WeatherWS");
//创建服务视图
//参数解释:
//1.wsdlDocumentLocation - wsdl地址
//2.serviceName - 服务名称
Service service = Service.create(url, qname);
WeatherWSSoap weatherWSSoap= service.getPort(WeatherWSSoap.class);
ArrayOfString arrOfStr = weatherWSSoap.getWeather("厦门", "");
List<String> list = arrOfStr.getString();
for (String string : list) {
System.out.println(string);
}
}
}
该种方式可以自定义关键元素,方便以后维护,是一种标准的开发方式
3.第三种:HttpURLConnection调用方式
4.Ajax调用方式