java 实现WebService 以及不同的调用方式

一、什么是WebService?

WebService是一种基于Web的远程服务技术,它可以使不同的应用程序之间的数据交互更加方便和高效。Web Service采用了XML、HTTP、SOAP和WSDL等标准协议,实现了跨平台和跨语言的软件开发,目前已经成为了企业应用中非常重要的一部分。

二、Java如何实现WebService?

Java提供了一个规范,用于开发基于WebService的应用程序,这个规范称为JAX-WS(Java API for XML Web Services),也称为Java Web Service开发包。

JAX-WS提供了两种方式来发布Web Service:

1. 基于注解的方式

在Java中,我们可以使用Java中的WebService注解来声明一个类或者方法是一个WebService,同时,使用Java中的@WebParam注解可以定义Web Service方法的参数。下面是一个简单的WebService的例子:

```java

@WebService

public class MyWebService {

@WebMethod

public String sayHello(String name) {

return "Hello, " + name + "!";

}

}

```

2. 基于配置文件的方式

另一种方式是通过配置文件发布WebService,我们需要在项目的src/main/webapp/WEB-INF/目录下创建一个名为sun-jaxws.xml的文件,并在其中进行配置。下面是一个简单的WebService的实例:

```xml

xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime"

version="2.0">

name="MyWebService"

implementor="com.example.MyWebService"

address="/MyWebService" />

```

这个文件定义了一个名称为“MyWebService”的WebService,它的实现类是com.example.MyWebService,发布地址是/MyWebService。

三、Java Web Service的调用方式

Java Web Service可以通过多种方式进行调用,下面介绍一些常用的调用方式。

1. 基于WSDL文档的调用

首先,我们需要获取WebService的WSDL文档,这个文档中包含了WebService的所有信息,包括方法、参数、返回值等等。我们可以使用Java提供的工具生成客户端代码,并在程序中进行调用。通过WSDL文档进行调用的主要步骤如下:

① 通过URL获取WSDL文档

```java

URL wsdlUrl = new URL("http://localhost:8080/MyWebService?wsdl");

```

② 创建Service对象

```java

QName serviceName = new QName("http://example.com/", "MyWebService");

Service service = Service.create(wsdlUrl, serviceName);

```

③ 创建Port对象

```java

QName portName = new QName("http://example.com/", "MyWebServicePort");

MyWebService servicePort = service.getPort(portName, MyWebService.class);

```

④ 调用WebService方法

```java

String result = servicePort.sayHello("World");

```

2. 基于HTTP协议的调用

Java Web Service还可以通过HTTP协议进行调用,这种方式比较简单,可以通过Java提供的HttpURLConnection类实现。通过HTTP协议进行调用的主要步骤如下:

① 创建连接

```java

URL url = new URL("http://localhost:8080/MyWebService");

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

```

② 设置请求方法和参数

```java

conn.setRequestMethod("POST");

conn.setRequestProperty("Content-Type", "text/xml");

conn.setDoOutput(true);

conn.setDoInput(true);

```

③ 发送请求

```java

OutputStream os = conn.getOutputStream();

String requestXML = "\n" +

" \n" +

" \n" +

" \n" +

" World\n" +

" \n" +

" \n" +

"\n";

os.write(requestXML.getBytes());

os.flush();

```

④ 获取响应内容

```java

InputStream is = conn.getInputStream();

byte[] buffer = new byte[1024];

int len;

StringBuilder sb = new StringBuilder();

while ((len = is.read(buffer)) != -1) {

sb.append(new String(buffer, 0, len));

}

String responseXML = sb.toString();

```

3. 基于RESTful方式的调用

RESTful是一种轻量级的WebService风格,它提供了一种简单、灵活、易于开发和维护的WebService方式,基于RESTful的WebService调用和普通的HTTP请求处理类似。

下面是一个基于RESTful方式调用WebService的实例:

```java

String url = "http://localhost:8080/MyWebService/sayHello/World";

URLConnection conn = new URL(url).openConnection();

InputStream is = conn.getInputStream();

byte[] buffer = new byte[1024];

int len;

StringBuilder sb = new StringBuilder();

while ((len = is.read(buffer)) != -1) {

sb.append(new String(buffer, 0, len));

}

String result = sb.toString();

```

四、Java Web Service的应用举例

下面是一个简单的Java Web Service的实例:

```java

@WebService

public class MyWebService {

@WebMethod

public String sayHello(String name) {

return "Hello, " + name + "!";

}

}

```

发布WebService的方式有两种,下面分别进行说明。

1. 基于注解的发布方式

通过在代码中添加一些注解即可发布WebService。

```java

public class Application {

public static void main(String[] args) {

Endpoint.publish("http://localhost:8080/MyWebService", new MyWebService());

}

}

```

2. 基于配置文件的发布方式

在项目的src/main/resources目录下创建一个名为sun-jaxws.xml的文件,并在其中进行配置。

```xml

xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime"

version="2.0">

name="MyWebService"

implementor="com.example.MyWebService"

address="/MyWebService" />

```

这个文件定义了一个名称为“MyWebService”的WebService,它的实现类是com.example.MyWebService,发布地址是/MyWebService。可以通过tomcat等Web服务器部署这个WebService服务。

调用MyWebService的方式和上面介绍的一样。

Java Web Service的应用范围非常广泛,比如企业应用中,可以使用Java Web Service来实现不同系统之间的数据交互与共享。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/

点赞(112) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部