当前位置 : 主页 > 网页制作 > Nodejs >

webservice入门实例(一)

来源:互联网 收集:自由互联 发布时间:2021-06-24
java中一共有三种webservice开发规范:JAX-WS、JAXMSAAJ、JAX-RS。其中用的较多的是JAX-WS和JAX-RS。我们这篇只说JAX-WS. 一. 简要介绍 JAX-WS是基于soap协议的,以XML格式传输数据的java web远程调用技

java中一共有三种webservice开发规范:JAX-WS、JAXM&SAAJ、JAX-RS。其中用的较多的是JAX-WS和JAX-RS。我们这篇只说JAX-WS.

一. 简要介绍

JAX-WS是基于soap协议的,以XML格式传输数据的java web远程调用技术规范。通过它,我们可以实现跨平台共享数据。

JAX-WS有三大要素:soap、wsdl、uddl。

1.soap协议是webservice的传输协议,即简单对象访问协议。Soap协议是xml格式,可理解为基于http传输xml数据。
Soap=http+xml

2.wsdl是webservice的使用说明书。根据wsdl去如何调用webservice。从下往上读,找到service服务视图,通过binding找到portType(服务类)。

3.UDDI是一个目录服务,存储了全球的webservice地址。但由于我们在调用webservice服务时已经知道了所要调用的地址,所要该服务基本没用到,可自动忽略。

二. 实现

webservice的实现包括服务端和客户端两部分。客户端请求数据-服务端响应数据-客户端接收数据,和socket很相似,而实际上webservice底层也是用socket实现的。

我们需要模拟的是根据服务端提供的接口查询城市的天气信息。

服务端和客户端最好在分作两个工程。

1.服务端实现:

a. 编写接口,在webservice中我们也称之为portType。

package webservice_jaxws;

public interface IWeatherService {
	public String query(String cityName);
}
b. 编写接口实现类
package webservice_jaxws;

import javax.jws.WebService;

@WebService
public class WeatherServiceImpl implements IWeatherService{
	
    public String query(String name){
    	System.out.println(name);
    	String result = "天朗气清,惠风和畅!";
    	return result;
	}
}

c. 发布webservice服务

package webservice_jaxws;

import javax.xml.ws.Endpoint;

public class Server {
	public static void main(String[] args) {//通过提供的地址可以访问wsdl说明书
		Endpoint.publish("http://127.0.0.1:12345/weather", new WeatherServiceImpl());
	}
}

至此服务端代码基本完成!我们可以用浏览器访问http://127.0.0.1:12345/weather,页面如下:

2. 客户端实现

1). 生成可调用服务器端服务的代码(服务端要一直开启)

客户端代码我们可以通过jdk提供的wsimport工具,在dos命令中指定文件夹生成


该命令意思为导入调用服务的源码到该src目录下。

2). 编写客户端实现代码

客户端代码实现有两种实现方式:

a. 使用客户端生成的代码进行方法调用

package webservice_client;

import webservice_jaxws.WeatherServiceImpl;
import webservice_jaxws.WeatherServiceImplService;

public class Client {
	public static void main(String[] args) {
		//创建服务视图对象
		WeatherServiceImplService service = new WeatherServiceImplService();
		//通过服务视图得到PortType
		WeatherServiceImpl serviceImpl = service.getWeatherServiceImplPort();
		//调用webservice方法
		System.out.println(serviceImpl.query("兰州"));
	}
}

b. 使用JAX-WS标准方法(推荐使用)

package webservice_client;

import java.net.URL;

import javax.xml.namespace.QName;
import javax.xml.ws.Service;

import webservice_jaxws.WeatherServiceImpl;

public class Client2 {
	public static void main(String[] args) throws Exception {
		URL url = new URL("http://127.0.0.1:12345/weather");
		QName serviceName = new QName("http://webservice_jaxws/","WeatherServiceImplService");//wsdl命名空间、服务视图名称
		Service service = Service.create(url,serviceName);//使用service创建服务视图
		WeatherServiceImpl impl = service.getPort(WeatherServiceImpl.class);//从服务视图中得到portType对象
		System.out.println(impl.query("武汉"));
	}
}

使用jaxws标准方法调用webservice可以指定webservice的调用地址,比通过生成代码调用webservice要灵活,一旦服务端地址变更,后者就获取不到数据!!

三.应用场景:

适用场合:
1、如果开发一个公开接口,面向大众,不考虑客户端类型且不考虑传输性能,采用标准soap协议发布webservice,比如一个产品推广接口。
2、如果两个公司之间作系统接口,在不考虑接口性能下,可以采用标准soap协议发布webservice接口,公司之间不用再自定义接口协议了。
如果作为客户端需要调用对方已经发布的soap协议的webservice,客户端必须向服务端发soap协议

不适用场合: 1、由于webserivce传输soap性能不高,如果接口性能要求较高,不建议使用webservice。 一个公司的相同编程语言开发应用之间传输数据,采用编程语言提供远程调用技术,比如java的RMI。Rmi支持面向对象,速度比webservice快。

网友评论