关于WebService技术的应用开发

来源:互联网 发布:win10网络图标灰色 编辑:程序博客网 时间:2024/06/08 17:15

这段时间自己一直在琢磨如何远程调用服务,我有个项目就是需要同步数据,通俗点就是把这个数据库里的数据搬到别的地方的数据库里,因此我使用WebService来调用服务。

在使用WebService需要以下几个步骤:

1.WebService的服务接口,供客户端调用。

@javax.jws.WebService        //WebService接口的注解
public class DoWebService {

       @Resource
       private WebServiceContext wsContext;


       public String doServiceFace(String name) {
                    return "你好,欢迎来到服务端,"+name;
       }

      public String getClientInfo() {
                    MessageContext mc = wsContext.getMessageContext();
                    HttpExchange exchange = (HttpExchange) mc .get(JAXWSProperties.HTTP_EXCHANGE);
                    InetSocketAddress isa = exchange.getRemoteAddress();
                    String IP = isa.getAddress().getHostAddress();
                    System.out.println("当前的IP:" + IP);
      }
 }

解析:我这里的代码是很简单的,在这里只需要讲几点:

a.在类的顶部加上@javax.jws.WebService  注解,声明这是个WebService的接口。

b.服务端接收数据,类型是一个String类型,这里关于网络传数据比较建议用XML。

c.在接收到数据时,进行处理,返回数据给客户端。同样也是String类型。

d.在这里这些都是需要被客户端调用的接口,接收到什么和返回什么都是通过这个入口来实现的。

e.处理数据的过程,我在项目中主要用到的是Spring+ibatis来进行数据同步。注意:使用类的时候,spring的注入应该用静态的注入方式。只需要将接收到的数据交给   Spring+ibatis来处理。也就是在这个接口里调用别的类来处理。

f.getClientInfo()为获取正在调用服务的客户端IP地址。可以用它来记录谁访问过我。

g.浏览器中执行http://localhost:8080/Service/DoWebService?WSDL 看是否页面上显示XML数据。

2.发布WebService。

     public class StartWebService extends ActionSupport {

              private static final long serialVersionUID = 1L;

             @Override
              public String execute() throws Exception {
                     System.out.println("程序已经开始执行了。。。。。");
                     Endpoint.publish("http://168.7.109.9:8080/Service/DoWebService", new DoWebService());
                     System.out.println("service success!");
                      return "success";
              }

}

我的这个是使用action来发布的,同样你也可以使用main方法来发布,都是可以的。在浏览器中通过请求执行下这段代码就可以了

3.客户端接入。

需要在cmd中使用wsimport来执行。

其命令是:wsimport -s C:\Users\cyl\workspace\WebServiceClient\src
                  -p com.xyyh.client -keep http://168.7.109.16:8080/Service/WebService?WSDL 必须服务端启用才可以执行。

a.C:\Users\cyl\workspace\WebServiceClient\src指的是客户端项目src的路径,将WebService接口类引入过来,供客户端调用。

b.-p com.xyyh.client在客户端的src下生成一个com.xyyh.client包,将WebService类全放在该包下。

c.-keep http://168.7.109.16:8080/Service/DoWebService?WSDL  连接WebService的地址。这里面有几个参数是不一样的,DoWebService 为接口名称,ip地址是不同的。

4.客户端的调用。

public class test {

        public void dotest(){

                  DoWebService ws = new DoWebServiceService().getDoWebServicePort();
                  String hz = ws.doServiceFace("张三"); 

                  System.out.println(hz);

        }

}

5.最后的结果是:

    控制台输出:你好,欢迎来到服务端,张三


1 0