JAX-WS之旅(一)

——作者:Angel



注意:

1>需要开发工具Eclipse

2>有注解编程的基础

3>JDK 需要1.6以上

4>附带完整源码

5>学习的时候建议和作者起相同的名称

6>测试环境 Window Xp

7>图片在附件中。

资源参考:




目录

1. 什么是WebService. 1

2. 为什么需要WebService. 2

3. 主流WebService框架... 2

4 利用JAX-WS开发Web服务... 2



1. 什么是WebService

Web Service 是有企业发布的完成其特定商务需求的在线应用服务,其他公司或者应用软件可以能够通过Internet来访问这项在线服务。

更多资源访问:http://baike.baidu.com/view/837392.htm

 

2. 为什么需要WebService

我们知道如果我们要把一个桌面程序发布成web程序的话,在以前并不是一件很简单的事情,当然在最早的时候有一项分布式开发技术RMI技术就实现了桌面程序web化。现在使用WebService就能够很简单的解决这个问题。其次使用WebService能够让两门语言进行通信,也就是说,你可以服务端是Java语言,而客户端是其他语言,比如Rubby语言。

当然以上只是简单的说明,如果要连接更多的webService还需要您自己细心的体会。

 

3. 主流WebService框架

   Axis2——全称Apache EXtensible Interaction System 即阿帕奇可扩展交互系统。

   JAX-WS——Java API for XML Web Services (JAX-WS)是Java程序设计语言一个用来创建Web服务的API。

等等。

更多资源:http://wenku.baidu.com/view/5d0ceef5f61fb7360b4c65c9.html

 

4. 利用JAX-WS开发Web服务

   接下来将以一个实例讲解JAX-WS。

在讲解之前我们大体了解下要开发一个JAX-WS的步骤:

(1)编写能够发布成webservice的接口

(2)实现接口,并指定客户端访问的WSDL(Web Service Description Language)服务名

(3)发布服务

(4)编写客户端访问

第一步:启动工具

打开开发工具Eclipse,这一步对于编程人员都是very easy的一件事件,直接过。

 

第二步:新建工程(演示工程名为WebService)

新建一个 Java Project.相信能够学习WebService这项技术的人,这个应该不是问题。为了照顾一些部分家人,我们还是稍微讲讲,会的家人这步可以跳过。


【菜单栏】--【File】--【New】--【Project】--【Java Project】

--【Next】输入【Project name】--【Finish】。


这样我们就创建了一个工程。

图示:





完成的效果图:




第三步:建包(演示包为webservice)

   在刚才建立的工程建立包结构。

操作如下:


点击工程src目录【右键】--【New】--【package】--【输入包名】--【Finish】。


 

第四步:新建接口(演示接口名为IMyServer)

在刚才建立的包下新建一个接口。

代码如下:


package webservice;
import javax.jws.WebService;
/**
 * 接口类
 * @author Administrator
 *
 */
@WebService //此代码说明该接口可以进行Web化
public interface IMyServer {
    
    /**
     * 在接口里有一个获取作者姓名的方法
     * @param name:姓名
     * @return:String
     */
    public String getMyName(String name);
    
}


注:此接口和我们平时写接口是一样的,只是增加了一条

@WebService这样的代码,这条代码的主要作用是允许我们这个接口交给WebService进行管理。

 

第五步:实现接口(演示实现类名为MyServerImpl)

让我们写一个实现我们刚才接口的类,写法和我们平时的大差不差。

代码如下:


package webservice;
 
import javax.jws.WebService;
 
//以下这句代码的作用是:定义客户端访问的WSDL服务名
@WebService(endpointInterface = "webservice.IMyServer")
public class MyServerImpl implements IMyServer{
 
    @Override
    public String getMyName(String name) {
       // TODO Auto-generated method stub
       System.out.println("Called by the client");
       return "Hello,"+name+",I'm happy to learn webservice with you.";
    }
    
}
 
注意:这个实现类比一般实现类多了以下代码:
 
@WebService(endpointInterface = "webservice.IMyServer")


这句代码作用是:定义客户端访问的WSDL服务名

webservice是包名,IMyServer是接口。

 

现在的文件目录结构如下:

 

 

第六步:发布服务(演示名为:PublishServer)

我们需要将我们的类进行发布。

代码如下:


package webservice;
 
import javax.xml.ws.Endpoint;
 
/**
 * 此类的作用是:发布我们要让客户端访问的类
 * @author Administrator
 *
 */
public class PublishServer {
    /**
     * 启动程序
     * @param args
     */
    public static void main(String[] args) {
       /*
        * 参数说明:
        * 第一个参数http:127.0.0.1:2011
        * 这是url地址,需要指定端口
        * 
        * 第二个参数 new MyServerImpl()
        * 这个就是我们要让客户端访问的实现类
        *不能是接口(嘎嘎,接口也不允许 new呀。) 
        */
       Endpoint.publish("http://127.0.0.1:2011/myweb", new MyServerImpl());
       System.out.println("The Server is started.");
    }
}


文件目录结构图:

 

 

让我们运行PublishServer

运行成功之后控制台显示:

 

这表示发布成功了,我们可以打开浏览器进行访问(因为是web,所以网页当然能访问了,嘎嘎)

【打开浏览器】--在地址栏输入

http://127.0.0.1:2011/myweb?wsdl

效果图:

 

至此说明以上操作基本上是没有问题了。

 

第七步:编写客户端程序(演示名为MyClient)

用浏览器访问并不是我们的最终目的,我们是希望通过Java代码去访问服务器。那么接下来让我们编写一下客户端程序。

代码如下:


package webservice;
 
import java.net.MalformedURLException;
import java.net.URL;
 
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
 
public class MyClient {
 
    /**
     * 启动程序
     * @param args
     * @throws MalformedURLException 
     */
    public static void main(String[] args) throws MalformedURLException {
       //服务URL
urlnew URL("http://127.0.0.1:2011/myweb");
       
       /*
        * 参数说明:
        * 第一参数: http://webservice/
        * 服务的URI
        * 
        * 第二个参数:MyServerImplService
        * 在WSDL发布的服务名,这个名称是你的   实现类 连接上 Service
        * 
        */
       QName qname = new QName("http://webservice/","MyServerImplService");
       
       //创建服务
       Service service = Service.create(url, qname);
       
       //提取服务端口
       IMyServer myServer = service.getPort(IMyServer.class);
       
       //调用方法
       System.out.println(myServer.getMyName("林祥纤"));
    }
 
}


文件目录结构:

 

 

运行MyClient:

Dos窗口显示接口:

 


注意:服务端不可关闭。

 

伸伸懒腰,终于可以闭灯休息了。

先告一小段落吧。

源码附上