WebService的概念和基本使用

305 阅读2分钟

WebService

WebService即Web服务。它采用标准的SOAP协议传输,采用WSDL作为描述语言的跨编程语言和跨操作系统的远程调用技术,主要可以进行资源共享。

WebService三要素

WebService三要素为SOAP、WSDL、UDDI。SOAP用来描述传递信息的格式; WSDL用来描述如何访问具体的接口,可以理解为WebService的使用说明书;UDDI目录服务,用来管理,分发,查询WebService 。

SOAP协议

WebService中比较重要的是SOAP协议。SOAP协议即是简单对象访问协议,是交换数据的一种协议规范,是一种轻量的、简单的、基于XML的协议。它是通过HTTP来交换信息,简单理解为SOAP=HTTP+XML。

SOAP协议消息结构

<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" 
 soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Header>

</soap:Header>
<soap:Body>
<soap:Fault>
</soap:Fault>
</soap:Body>
</soap:Envelope>

WebService的基本使用

1、编写天气查询接口

public interface WeatherService {
	public String queryWeather(String cityName);
}

2、实现天气查询接口

import javax.jws.WebService;

@WebService
public class WeatherServiceImpl implements WeatherService {
	//天气预报查询
	@Override
	public String queryWeather(String cityName) {
		System.out.println("获取到城市名为:"+cityName);
		String result = "晴";
		return result;
	}
}

3、发布服务

import javax.xml.ws.Endpoint;

public class Server {
	public static void main(String[] args) {
		//发布天气查询服务
		Endpoint.publish("http://127.0.0.1:22222/weather",
				new WeatherServiceImpl());
		
		System.out.println("发布WebService服务");
	}
}

4、生成客户端调用代码

//可以根据wsdl文档生成客户端调用代码的工具
//在命令行中输入以下命令即可生成
wsimport -s . http://127.0.0.1:22222/weather?wsdl

/*
 * wsimport
 * -d<目录>   将生成.class文件
 * -s<目录>   将生成.java文件
 * -p<生成的新包名> 将生成的类,放于指定的包下。
 */
 
 //生成以下Java文件
 /*
 ObjectFactory.java
 package-info.java
 QueryWeather.java
 QueryWeatherResponse.java
 WeatherServiceImpl.java
 WeatherServiceImplService.java
*/

5、编写客户端调用

import com.plf.webservice.WeatherServiceImpl;
import com.plf.webservice.WeatherServiceImplService;

public class Client {

	public static void main(String[] args) {
		//创建服务视图
		WeatherServiceImplService weatherInterfaceImplService =
		    new WeatherServiceImplService();
		//通过服务视图得到服务端点
		WeatherServiceImpl weatherInterfaceImpl = 
		    weatherInterfaceImplService.getWeatherServiceImplPort();
		//调用webservice
		String result = weatherInterfaceImpl.queryWeather("绍兴");
		System.out.println("从服务器获取数据:"+result);
	}
}

6、结果

发布WebService服务
获取到城市名为:绍兴


从服务器获取数据:晴