当前位置:首页 > 编程知识 > 正文

Webservices全方位解析

一、什么是Webservices

Webservices 是一种基于Web的远程方法调用(Remote Procedure Call,RPC)机制,是一种应用程序接口(Application Programming Interface,API)。通过Webservices,应用程序可以通过网络进行通信,从而使其可以在不同的计算机环境中相互交互和通信。Webservices将应用程序接口暴露给远程调用方,使它们可以在不同的操作系统、编程语言和硬件平台之间相互通信。

在Webservices的架构中,包括客户端、Webservices服务器和应用程序服务器。客户端向Webservices服务器发送请求,Webservices服务器接受请求并调用应用程序服务器上的接口函数,然后将结果返回给客户端。

二、Webservices的组成

一个Webservices 由以下几个部分组成:

1、WSDL

Webservices服务描述文件(Web Services Description Language,WSDL)是一份XML文档,它用于描述Webservices服务的位置、可用操作和消息格式。WSDL描述了Webservices的接口、操作、参数和消息格式,以便客户端程序能够动态地绑定到服务端程序,并发送正确格式的请求消息。

2、SOAP

Simple Object Access Protocol (SOAP)是Webservices 的一种通信协议,它使得Webservices能够通过HTTP、SMTP等Internet协议来传输数据,实现跨语言和跨平台的数据传输。SOAP消息定义了Webservices交互的协议格式和数据编码。

3、UDDI

Universal Description, Discovery, and Integration (UDDI)是一个集中的目录服务,它用于向客户端程序提供Webservices的信息,包括WSDL、SOAP版本、传输协议等信息。UDDI根据发布者、提供者和请求者的关系,将Webservices服务和客户端解析器(discovery client)进行匹配,以便于进行Webservices服务的发现和访问。

三、Webservices的实现与使用

1、Webservices 的实现

下面是一个简单的Webservices例子,用Java语言编写,实现一个简单的计算器服务。

//Calculator.java
public class Calculator {
	public int add(int a, int b) {
		return a + b;
	}
	public int subtract(int a, int b) {
		return a - b;
	}
	public int multiply(int a, int b) {
		return a * b;
	}
	public int divide(int a, int b) {
		return a / b;
	}
}

首先需要定义一个接口,以便客户端能够远程访问并调用Webservices提供的服务。下面是一个简单的Webservices接口:

//CalculatorService.java
import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService
public interface CalculatorService {
	@WebMethod
	public int add(int a, int b);
	@WebMethod
	public int subtract(int a, int b);
	@WebMethod
	public int multiply(int a, int b);
	@WebMethod
	public int divide(int a, int b);
}

然后,需要实现接口中定义的服务方法,在Webservices服务端上面进行部署和发布。下面是一个简单的Webservices服务:

//CalculatorServiceImpl.java
import javax.jws.WebService;

@WebService(endpointInterface = "com.example.webservices.CalculatorService")
public class CalculatorServiceImpl implements CalculatorService {

    public int add(int a, int b) {
        return a + b;
    }

    public int subtract(int a, int b) {
        return a - b;
    }

    public int multiply(int a, int b) {
        return a * b;
    }

    public int divide(int a, int b) {
        return a / b;
    }
}

最后,需要将Webservices服务部署到Webservices服务器上,并发布出去。可以使用以下命令将Webservices服务打包成war文件,并将其部署到Tomcat的webapps目录下:


<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <warName>calculator</warName>
            </configuration>
        </plugin>
    </plugins>
</build>

2、Webservices 的使用

当Webservices服务部署到服务器上后,客户端就可以使用任何支持Webservices协议和编程语言的软件系统来调用Webservices服务。下面是一个Java客户端调用Webservices服务的例子:

//CalculatorClient.java
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;

public class CalculatorClient {

    public static void main(String[] args) throws Exception {

        URL url = new URL("http://localhost:8080/calculator/calculator?wsdl");
        QName qname = new QName("http://calculator.webservices.example.com/", "CalculatorServiceImplService");

        Service service = Service.create(url, qname);

        CalculatorService calculator = service.getPort(CalculatorService.class);

        System.out.println(calculator.add(1, 2));
        System.out.println(calculator.subtract(5, 3));
        System.out.println(calculator.multiply(2, 2));
        System.out.println(calculator.divide(6, 2));
    }
}

上述代码通过URL和QName访问Webservices服务,创建了一个Webservice客户端服务和一个Webservice端点接口service,并使用CalculatorService接口作为参数,调用Webservices服务的操作方法。

四、Webservices的优缺点

1、优点

(1)跨平台和跨语言的兼容性; (2)可扩展性和灵活性; (3)易于集成和部署; (4)可以通过AOP、安全服务、消息编码等机制保证Webservices的安全性。

2、缺点

(1)和其他RPC机制相比,Webservices的性能较低; (2)需要处理XML和SOAP格式的数据; (3)没有统一的标准和实现。

五、总结

Webservices是一种基于Web的远程方法调用机制,它通过HTTP、SMTP等Internet协议来传输数据,实现跨语言和跨平台的数据传输,具有跨平台和跨语言的兼容性、可扩展性和易于集成和部署的优点。但是,与其他RPC机制相比,Webservices性能较低,并且需要处理XML和SOAP格式的数据,没有统一的标准和实现。