周末闲来无事,在家中复习了一下JDK6下开发WebService的知识,为了加强印象,特此记录。
一、
样例
开发环境
从
Java6
开始,
JDK
中已经支持用
Java
开发
WebService
应用了,不必选用第三方包。
|
软件及其版本
|
|
JDK1.6.0_25
|
|
Eclipse3.4.2 JavaEE
版
|
二、
样例工程结构
(1)服务端com.ws.server
(手工编写)
(2)
客户端
com.ws.client
(自动生成)
(3)
客户端调用
com.ws.client.test
(手工编写)。
三
、
样例开发过程
1、新建Dynamic Web Project
2、编写服务代码
package com.ws.server;
import javax.jws.WebService;
@WebService
public class HelloService {
public String sayHello(String username) {
return "hello," + username + "! This is HelloService!";
}
}
3、发布服务,在本例中使用Servlet发布服务
package com.ws.server;
import java.io.IOException;
import java.io.Writer;
import javax.servlet.GenericServlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.xml.ws.Endpoint;
public class HelloServicePublisher extends GenericServlet {
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
System.out
.println("准备启动WebService-->http://192.168.1.103:8088/WS_Java6/HelloService");
// 发布一个WebService
Endpoint.publish("http://192.168.1.103:8088/WS_Java6/HelloService",
new HelloService());
System.out
.println("成功启动WebService-->http://192.168.1.103:8088/WS_Java6/HelloService");
}
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
response.setCharacterEncoding("GBK");
Writer wr = response.getWriter();
wr
.write("<a href='http://192.168.1.103:8088/WS_Java6/HelloService?WSDL'>点击访问WSDL</a>");
wr.close();
}
}
4、生成客户端
Java6
提供了生成
WebService
客户端代码的工具wsimport.exe,只需在命令行输入一句简单的命令就可以生成客户端代码。需要
注意的是,在生成客户端前前需要先启动服务端。如果已经在启动,就不需要重新启动。
-p参数指定生成的代码所要放置的包
在生成的客户端中有一个java文件的名字是由服务端的类名加上一个Service组成的,这个xxxService我们可以把它看做是
WebService
的一个代理类,在客户端我们通过这个代理类来调用服务。
5、编写客户端调用服务的代码
package com.ws.client.test;
import com.ws.client.HelloService;
import com.ws.client.HelloServiceService;
public class ClientTest {
public static void main(String[] args) {
// 创建一个客户端服务对象
HelloService helloService = new HelloServiceService()
.getHelloServicePort();
// 调用服务方法,并得到方法返回值
String returnContent = helloService.sayHello("张三");
// 打印服务的返回值
System.out.println(returnContent);
}
}
6、运行测试代码

