什么是WebService
1.WebService:一种基于Web的服务,服务端提供一些资源让客户端进行访问,获取一些公共的数据。比如天气预报,股票信息,手机归属地查询等等。
2.WebServcie是一种跨平台,跨语言的通信规范。
3.气象局负责将收集的每天的天气信息,并将这些信息暴露出来,各大站点的应用去调用题目得到当天或者未来几天的天气情况,然后以不同形式展示出来。
4.网站提供了天气预报的信息,其实网站本身什么都没有做,只是调用了一下远程接口。这个就是WebService的典型应用。
什么时候使用WebService
1.同一家公司的新旧应用之间。
2.不同公司或者不同项目的应用之间
1) 淘宝、京东查询快递公司物流信息。
2) 支付宝,网银支付接口的调用。
2) QQ登录各种系统,本公司或者外部系统只需要使用同一个QQ号就可以登录。
3.一些提供内容聚合的应用:天气预报,身份证,手机归属地等信息。
Web Service组织示意图
Web服务的重要术语
1.WSDL(Web Services Description Language):Web服务描述语言。一个XML文档,WSDL定义了Web Service 的名称、处理服务的方法、请求的参数及返回的数据格式。一个WebService对应唯一一个wsdl文档。
2.SOAP(Simple Object Access Protocol):简单对象传输协议。一个基于HTTP和XML的协议,用于在Web上的应用程序交换结构化的数据。
3.SEI(WebService Endpoint Interface):WebService服务端用来处理请求的接口。
4.CXF(Celtix + XFire):一个Apache的用于开发webService服务器和客户端框架。
WSDL的基本结构
1.Types元素
数据类型定义的容器
2.Message元素
通信消息的数据结构的抽象类型定义
3.PorType元素
可以描述一个Web Service可被执行的操作以及相关的消息
4.Binding元素
特定端口类型的具体协议和数据格式规范的绑定
5.Service元素
相关服务访问点的集合
SOAP概述
1.SOAP(SImple Object Access Protocol,简称对象访问协议)基于XML的,用于在分布式环境下交换信息的轻量级协议。
2.SOAP 1.2规范与2003年6月24日被发布为W3C推荐标准
3.SOAP的优点
1)与厂商无关
2)相对于平台独立
3)相对与操作系统独立
4)相对与编程语言独立
开发WebService
1.WebService组成
1)服务器端:提供WebService的服务器端。(Java开发)
2)客户端:调用远程WebServiec的客户端应用程序。可以在任何系统下使用任何语言调用。
2.开发WebService分为两种方式
1)JAX-WS方式:Web标准服务
2)CXF方式:基于CXF框架开发
代码演示
一、使用JAX-WS发布服务
1.完成功能:查询自定义省以及城市。
1)开发步骤:
- 创建一个JavaProject项目
- 添加WebService的接口,使用@WebService和@WebMethod注解修饰类。
- 添加实现WebService接口的类,使用@WebService修饰,并指定EndpointInterface属性到接口的完整类名。
- 添加一个Endpoint来发布WebService。
2)添加WeatherService接口,使用@WebService修饰类,使用@WebMethoid修饰方法。
@WebService
public interface WeatherService {
@WebMethod
public Set<String> getProvince();
@WebMethod
public List<String> getCitys(String pro);
}
3)添加WeatherServiceImpl类,实现WeatherService接口,使用@WebService修饰类,添加endpointInterface属性,并重写接口的方法。
@WebService(endpointInterface = "com.znsd.webservice.service.WeatherService")
public class WeatherServiceImp implements WeatherService {
static List<String> list;
static {
list = new ArrayList<String>();
list.add("湖南省");
list.add("广东省");
list.add("湖北省");
}
@Override
public List<String> getProvince() {
return list;
}
@Override
public List<String> getCitys(String prowince) {
ArrayList<String> citys = new ArrayList<String>();
switch (prowince) {
case "湖南省":
citys.add("永州市");
citys.add("长沙市");
citys.add("岳阳市");
break;
case "广东省":
citys.add("深圳市");
citys.add("广州市");
citys.add("佛山市");
break;
case "湖北省":
citys.add("武汉市");
citys.add("黄石市");
citys.add("襄阳市");
break;
}
return citys;
}
}
4)发布WebService:
public static void main(String[] args) {
// 该地址是自己定义
String address = "http://localhost:9999/weather/getweathers";
// 发布webService
Endpoint.publish(address, new WeatherServiceImp());
System.out.println("发布成功!!");
}
发布之后项目不要停止可以通过http://localhost:9999/weather/getweathers?wsdl来访问webService服务器地址。
WebService常用注解
1.@WebService(必须的)
修饰一个类或者接口为一个WebSevice,如果有接口,必须提供endpointInterface指定接口名称,否则会报警告。
2.@WebMethod(可省略)
修饰一个方法为一个Web方法。可以被远程调用。也可以通过exclude=true来排除某个方法。
3.@WebParm(可省略)
修饰生成wsdl文件中方法的参数名称。
二、使用JAX-WS调用服务
1.实现步骤:
1)创建客户端项目,在src目录下生成调用代码。
2)使用wsimport工具从WSDL文件生成客户端调用所需的Java类。
一、在client的客户端目录下
D:\Java\myworkspace\TheClient\src>wsimport -p com.znsd.webservice.service(该包名为生产代码所在的包,自己定义) -keep http://localhost:9999/weather/getweathers?wsdl(该路径为你发布项目的路径)
cmd中回车即可。
刷新项目就会出现。
二、启动客户端测试
public static void main(String[] args) {
WeatherService service = new WeatherServiceImpService().getWeatherServiceImpPort();
List<String> list = service.getProvince();
System.out.println(Arrays.toString(list.toArray()));
List<String> citys = service.getCitys("湖北省");
System.out.println(Arrays.toString(citys.toArray()));
}
调用.net编写的WebService
一、完成功能远程天气预报。
1.使用java语言调用.net编写的WebService时,会出现解析错误
2.需要修改wsdl文件。
3.实现步骤:
1)将wsdl文件保存到本地。
2)将wsdl文件中的
<s:element ref="s:schama" />
<s:any />
3)替换成
<s:any minOccurs="2" maxOccurs="2" />
原创天气预报地址:http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsd
选择wsdl。后保存到项目的src目录下
通过本地文件生产java代码
D:\javaworkspas\springWork\web-fabu_service\src>D:\Java\workspace\getWeather\src>wsimport -p com.lxit.weather -keep D:\Java\workspace\getWeather\src\weather.wsdl
回车即可,会生成如下包:
二、调用天气方法
public static void main(String[] args) {
WeatherWSSoap ws = new WeatherWS().getWeatherWSSoap();
ArrayOfString list = ws.getWeather("深圳", null);
for (String string : list.getString()) {
System.out.println(string);
}
}
以上为WebService的创建以及使用,新手编写,请见谅。